From 8358fc24f13694d62078ee6cd0a12fdf036095cb Mon Sep 17 00:00:00 2001 From: qbit-mirror-bot Date: Wed, 1 Jul 2026 11:10:56 +0000 Subject: [PATCH] =?UTF-8?q?feat(desktop):=20add=2011=20new=20languages=20?= =?UTF-8?q?=E2=80=94=20hybrid=20JSON=20+=20TypeScript=20i18n=20system?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/desktop/scripts/sync-locales.py | 287 +++++++ apps/desktop/src/i18n/ar.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/catalog.ts | 32 +- apps/desktop/src/i18n/de.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/es.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/fr.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/hi.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/it.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/ko.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/languages.ts | 150 +++- apps/desktop/src/i18n/pt-br.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/ru.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/th.ts | 953 +++++++++++++++++++++++ apps/desktop/src/i18n/types.ts | 780 +------------------ apps/desktop/src/i18n/vi.ts | 953 +++++++++++++++++++++++ apps/desktop/src/locales/TRANSLATING.md | 53 ++ apps/desktop/src/locales/ar.json | 864 ++++++++++++++++++++ apps/desktop/src/locales/de.json | 863 ++++++++++++++++++++ apps/desktop/src/locales/en.json | 863 ++++++++++++++++++++ apps/desktop/src/locales/es.json | 863 ++++++++++++++++++++ apps/desktop/src/locales/fr.json | 863 ++++++++++++++++++++ apps/desktop/src/locales/hi.json | 864 ++++++++++++++++++++ apps/desktop/src/locales/it.json | 864 ++++++++++++++++++++ apps/desktop/src/locales/ja.json | 863 ++++++++++++++++++++ apps/desktop/src/locales/ko.json | 863 ++++++++++++++++++++ apps/desktop/src/locales/locales.test.ts | 68 ++ apps/desktop/src/locales/pt-BR.json | 863 ++++++++++++++++++++ apps/desktop/src/locales/ru.json | 864 ++++++++++++++++++++ apps/desktop/src/locales/th.json | 864 ++++++++++++++++++++ apps/desktop/src/locales/vi.json | 864 ++++++++++++++++++++ apps/desktop/src/locales/zh-CN.json | 863 ++++++++++++++++++++ apps/desktop/src/locales/zh-Hant.json | 863 ++++++++++++++++++++ 32 files changed, 24000 insertions(+), 804 deletions(-) create mode 100644 apps/desktop/scripts/sync-locales.py create mode 100644 apps/desktop/src/i18n/ar.ts create mode 100644 apps/desktop/src/i18n/de.ts create mode 100644 apps/desktop/src/i18n/es.ts create mode 100644 apps/desktop/src/i18n/fr.ts create mode 100644 apps/desktop/src/i18n/hi.ts create mode 100644 apps/desktop/src/i18n/it.ts create mode 100644 apps/desktop/src/i18n/ko.ts create mode 100644 apps/desktop/src/i18n/pt-br.ts create mode 100644 apps/desktop/src/i18n/ru.ts create mode 100644 apps/desktop/src/i18n/th.ts create mode 100644 apps/desktop/src/i18n/vi.ts create mode 100644 apps/desktop/src/locales/TRANSLATING.md create mode 100644 apps/desktop/src/locales/ar.json create mode 100644 apps/desktop/src/locales/de.json create mode 100644 apps/desktop/src/locales/en.json create mode 100644 apps/desktop/src/locales/es.json create mode 100644 apps/desktop/src/locales/fr.json create mode 100644 apps/desktop/src/locales/hi.json create mode 100644 apps/desktop/src/locales/it.json create mode 100644 apps/desktop/src/locales/ja.json create mode 100644 apps/desktop/src/locales/ko.json create mode 100644 apps/desktop/src/locales/locales.test.ts create mode 100644 apps/desktop/src/locales/pt-BR.json create mode 100644 apps/desktop/src/locales/ru.json create mode 100644 apps/desktop/src/locales/th.json create mode 100644 apps/desktop/src/locales/vi.json create mode 100644 apps/desktop/src/locales/zh-CN.json create mode 100644 apps/desktop/src/locales/zh-Hant.json diff --git a/apps/desktop/scripts/sync-locales.py b/apps/desktop/scripts/sync-locales.py new file mode 100644 index 000000000000..ee381c1001e2 --- /dev/null +++ b/apps/desktop/scripts/sync-locales.py @@ -0,0 +1,287 @@ +#!/usr/bin/env python3 +""" +sync-locales.py — Sync JSON locale source files → TypeScript defineLocale() catalogs. + +This script is the bridge between our JSON translation files (translator-friendly) +and the upstream TypeScript i18n framework (type-safe, production-grade). + +Workflow: +1. Translators edit *.json in apps/desktop/src/locales/ +2. Run: python3 apps/desktop/scripts/sync-locales.py +3. Script validates keys, generates *.ts in apps/desktop/src/i18n/ +4. TypeScript compiler validates everything + +To add a new language: +1. Drop {code}.json into locales/ +2. Add to KNOWN_LOCALES and TYPE_UNION below +3. Run sync-locales.py +4. Done — no manual TS files to write + +Exit codes: + 0 = success + 1 = validation error (missing keys, type mismatches) +""" + +import json, os, re, sys + +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) +LOCALES_DIR = os.path.join(REPO_ROOT, 'src', 'locales') +I18N_DIR = os.path.join(REPO_ROOT, 'src', 'i18n') + +# ── Configuration — add new languages here ────────────────────── + +KNOWN_LOCALES: list[dict] = [ + # (json_code, ts_code, ts_variable, endonym, english_name, config_value) + {'json': 'en', 'ts': 'en', 'var': 'en', 'name': 'English', 'englishName': 'English', 'configValue': 'en'}, + {'json': 'zh-CN', 'ts': 'zh', 'var': 'zh', 'name': '简体中文', 'englishName': 'Simplified Chinese', 'configValue': 'zh'}, + {'json': 'zh-Hant', 'ts': 'zh-hant', 'var': 'zhHant', 'name': '繁體中文', 'englishName': 'Traditional Chinese', 'configValue': 'zh-hant'}, + {'json': 'ja', 'ts': 'ja', 'var': 'ja', 'name': '日本語', 'englishName': 'Japanese', 'configValue': 'ja'}, + {'json': 'ko', 'ts': 'ko', 'var': 'ko', 'name': '한국어', 'englishName': 'Korean', 'configValue': 'ko'}, + {'json': 'de', 'ts': 'de', 'var': 'de', 'name': 'Deutsch', 'englishName': 'German', 'configValue': 'de'}, + {'json': 'es', 'ts': 'es', 'var': 'es', 'name': 'Español', 'englishName': 'Spanish', 'configValue': 'es'}, + {'json': 'fr', 'ts': 'fr', 'var': 'fr', 'name': 'Français', 'englishName': 'French', 'configValue': 'fr'}, + {'json': 'pt-BR', 'ts': 'pt-br', 'var': 'ptbr', 'name': 'Português (Brasil)', 'englishName': 'Portuguese (Brazil)', 'configValue': 'pt-br'}, + {'json': 'ar', 'ts': 'ar', 'var': 'ar', 'name': 'العربية', 'englishName': 'Arabic', 'configValue': 'ar'}, + {'json': 'hi', 'ts': 'hi', 'var': 'hi', 'name': 'हिन्दी', 'englishName': 'Hindi', 'configValue': 'hi'}, + {'json': 'th', 'ts': 'th', 'var': 'th', 'name': 'ภาษาไทย', 'englishName': 'Thai', 'configValue': 'th'}, + {'json': 'vi', 'ts': 'vi', 'var': 'vi', 'name': 'Tiếng Việt', 'englishName': 'Vietnamese', 'configValue': 'vi'}, + {'json': 'it', 'ts': 'it', 'var': 'it', 'name': 'Italiano', 'englishName': 'Italian', 'configValue': 'it'}, + {'json': 'ru', 'ts': 'ru', 'var': 'ru', 'name': 'Русский', 'englishName': 'Russian', 'configValue': 'ru'}, +] + +# Generate the TypeScript Locale type union from KNOWN_LOCALES +TYPE_UNION = ' | '.join(f"'{l['ts']}'" for l in KNOWN_LOCALES) + +# ── Keys to skip (don't exist in upstream Translations type) ──── + +LOCALE_CODES = {'system'} | {l['json'] for l in KNOWN_LOCALES} + +def should_skip(key: str) -> bool: + for code in LOCALE_CODES: + if key == f'language.{code}' or key.startswith(f'language.{code}.'): + return True + if key == 'artifacts': + return True + return False + +# ── JSON → nested TS conversion ──────────────────────────────── + +def flat_to_nested(flat: dict) -> dict: + tree = {} + for orig_key, value in flat.items(): + if should_skip(orig_key): + continue + parts = orig_key.split('.') + cur = tree + for i, part in enumerate(parts): + if i == len(parts) - 1: + if isinstance(value, str) and '{' in value: + params = re.findall(r'\{(\w+)\}', value) + if params: + ts_val = re.sub(r'\{(\w+)\}', r'${\1}', value) + if len(params) == 1: + cur[part] = f'__FN__:{params[0]} => `{ts_val}`' + else: + cur[part] = f'__FN__:({", ".join(params)}) => `{ts_val}`' + else: + cur[part] = value + else: + cur[part] = value + else: + if part not in cur: + cur[part] = {} + elif isinstance(cur[part], str): + cur[part] = {'__value': cur[part]} + cur = cur[part] + return tree + +def escape_ts(s: str) -> str: + return s.replace('\\', '\\\\').replace("'", "\\'").replace('\n', '\\n') + +def render(obj, indent=0): + pfx = ' ' * indent + inner = ' ' * (indent + 1) + lines = ['{'] + for k, v in obj.items(): + if k == '__value': + continue + if isinstance(v, dict): + lines.append(f'{inner}{k}: {render(v, indent + 1)},') + elif isinstance(v, str) and v.startswith('__FN__:'): + lines.append(f'{inner}{v[7:]},') + else: + lines.append(f"{inner}{k}: '{escape_ts(str(v))}',") + lines.append(f'{pfx}}}') + return '\n'.join(lines) + +# ── Generate TS files ────────────────────────────────────────── + +def generate_ts(locale: dict, json_data: dict) -> str: + nested = flat_to_nested(json_data) + lines = [ + "import { defineLocale } from './define-locale'", + '', + f"export const {locale['var']} = defineLocale(", + render(nested, 0), + ')', + '', + ] + return '\n'.join(lines) + +# ── Generate catalog.ts ──────────────────────────────────────── + +def generate_catalog() -> str: + imports = '\n'.join( + f"import {{ {l['var']} }} from './{l['ts']}'" + for l in KNOWN_LOCALES + ) + entries = ',\n '.join( + f" '{l['ts']}': {l['var']}" if l['ts'] != l['var'] else f" {l['var']}" + for l in KNOWN_LOCALES + ) + return f'''{imports} +import type {{ Locale, Translations }} from './types' + +export const TRANSLATIONS: Record = {{ +{entries} +}} +''' + +# ── Generate languages.ts (LOCALE_OPTIONS + LOCALE_ALIASES) ──── + +LOCALE_ALIASES_MAP: dict[str, str] = { + 'en': 'en', 'en-us': 'en', 'en_us': 'en', + 'zh': 'zh', 'zh-cn': 'zh', 'zh_cn': 'zh', 'zh-hans': 'zh', 'zh_hans': 'zh', 'zh-hans-cn': 'zh', 'zh_hans_cn': 'zh', + 'zh-tw': 'zh-hant', 'zh_tw': 'zh-hant', 'zh-hk': 'zh-hant', 'zh_hk': 'zh-hant', 'zh-mo': 'zh-hant', 'zh_mo': 'zh-hant', + 'zh-hant': 'zh-hant', 'zh_hant': 'zh-hant', 'zh-hant-tw': 'zh-hant', 'zh_hant_tw': 'zh-hant', 'zh-hant-hk': 'zh-hant', 'zh_hant_hk': 'zh-hant', + 'ja': 'ja', 'ja-jp': 'ja', 'ja_jp': 'ja', + 'ko': 'ko', 'ko-kr': 'ko', 'ko_kr': 'ko', + 'de': 'de', 'de-de': 'de', 'de_de': 'de', 'de-at': 'de', 'de-ch': 'de', + 'es': 'es', 'es-es': 'es', 'es_es': 'es', 'es-mx': 'es', 'es-ar': 'es', + 'fr': 'fr', 'fr-fr': 'fr', 'fr_fr': 'fr', 'fr-ca': 'fr', 'fr-ch': 'fr', 'fr-be': 'fr', + 'pt-br': 'pt-br', 'pt_br': 'pt-br', 'pt-pt': 'pt-br', 'pt_pt': 'pt-br', + 'ar': 'ar', 'ar-sa': 'ar', 'ar_sa': 'ar', 'ar-eg': 'ar', 'ar-ae': 'ar', + 'hi': 'hi', 'hi-in': 'hi', 'hi_in': 'hi', + 'th': 'th', 'th-th': 'th', 'th_th': 'th', + 'vi': 'vi', 'vi-vn': 'vi', 'vi_vn': 'vi', + 'it': 'it', 'it-it': 'it', 'it_it': 'it', 'it-ch': 'it', + 'ru': 'ru', 'ru-ru': 'ru', 'ru_ru': 'ru', +} + +# ── Main ─────────────────────────────────────────────────────── + +def main(): + # 1. Load en.json (canonical key source) + en_path = os.path.join(LOCALES_DIR, 'en.json') + with open(en_path) as f: + en_data = json.load(f) + en_keys = set(k for k in en_data if not should_skip(k)) + + print(f'📖 en.json: {len(en_data)} total, {len(en_keys)} active keys') + issues = 0 + + # 2. Process each locale + for locale in KNOWN_LOCALES: + json_path = os.path.join(LOCALES_DIR, f"{locale['json']}.json") + ts_path = os.path.join(I18N_DIR, f"{locale['ts']}.ts") + is_upstream = locale['json'] in ('en', 'ja', 'zh-CN', 'zh-Hant') + + if not os.path.exists(json_path): + print(f' ❌ {locale["json"]}: JSON file not found') + issues += 1 + continue + + with open(json_path) as f: + json_data = json.load(f) + + # Validate: check for missing keys + locale_keys = set(k for k in json_data if not should_skip(k)) + missing = en_keys - locale_keys + + if missing: + print(f' ⚠️ {locale["json"]}: {len(missing)} keys missing (will fallback to en)') + + # Skip if this locale already exists upstream (en/ja/zh/zh-hant are the full framework) + if is_upstream: + print(f' ⏭️ {locale["json"]}: upstream locale (keeping existing TS)') + continue + + # Generate TS file + ts_content = generate_ts(locale, json_data) + with open(ts_path, 'w') as f: + f.write(ts_content) + + print(f' ✅ {locale["json"]} → {locale["ts"]}.ts ({len(locale_keys)} keys)') + + # 3. Generate catalog.ts + catalog = generate_catalog() + catalog_path = os.path.join(I18N_DIR, 'catalog.ts') + with open(catalog_path, 'w') as f: + f.write(catalog) + print(f'\n📦 catalog.ts updated ({len(KNOWN_LOCALES)} locales)') + + # 4. Generate/update types.ts Locale type + types_path = os.path.join(I18N_DIR, 'types.ts') + with open(types_path) as f: + types_content = f.read() + + old_type = re.search(r"export type Locale = '([^']|'[^'])*'", types_content) + if old_type: + new_type_line = f"export type Locale = {TYPE_UNION}" + types_content = types_content.replace(old_type.group(0), new_type_line) + with open(types_path, 'w') as f: + f.write(types_content) + print(f'📝 types.ts: Locale type updated → {TYPE_UNION}') + + # 5. Generate/update languages.ts + langs_path = os.path.join(I18N_DIR, 'languages.ts') + + # Read current languages.ts and update LOCALE_OPTIONS and LOCALE_ALIASES + with open(langs_path) as f: + langs_content = f.read() + + # Update LOCALE_OPTIONS + options_lines = ['export const LOCALE_OPTIONS = ['] + for l in KNOWN_LOCALES: + options_lines.append(f''' {{ + id: '{l['ts']}', + name: '{l['name']}', + englishName: '{l['englishName']}', + configValue: '{l['configValue']}' + }},''') + options_lines.append('] as const satisfies readonly { configValue: string; englishName: string; id: Locale; name: string }[]') + options_block = '\n'.join(options_lines) + + # Replace the LOCALE_OPTIONS section + langs_content = re.sub( + r'export const LOCALE_OPTIONS = \[.*?\] as const satisfies readonly.*?\]', + options_block, + langs_content, + flags=re.DOTALL + ) + + # Update LOCALE_ALIASES + alias_lines = ['const LOCALE_ALIASES: Record = {'] + for alias, target in sorted(LOCALE_ALIASES_MAP.items()): + alias_lines.append(f" '{alias}': '{target}',") + alias_lines.append('}') + alias_block = '\n'.join(alias_lines) + + langs_content = re.sub( + r'const LOCALE_ALIASES: Record = \{.*?\n\}', + alias_block, + langs_content, + flags=re.DOTALL + ) + + with open(langs_path, 'w') as f: + f.write(langs_content) + print('📝 languages.ts updated') + + # Summary + if issues: + sys.exit(1) + print(f'\n✅ All {len(KNOWN_LOCALES)} locales synced successfully') + +if __name__ == '__main__': + main() diff --git a/apps/desktop/src/i18n/ar.ts b/apps/desktop/src/i18n/ar.ts new file mode 100644 index 000000000000..91e4def18b0a --- /dev/null +++ b/apps/desktop/src/i18n/ar.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const ar = defineLocale( +{ + appearance: { + title: 'المظهر', + description: 'هذه إعدادات عرض خاصة بسطح المكتب. يتحكم الوضع في السطوع؛ ويتحكم السمة في لوحة الألوان وتصميم سطح المحادثة.', + colorMode: 'وضع الألوان', + colorModeDesc: 'اختر وضعًا ثابتًا أو دع Hermes يتبع إعداد النظام.', + theme: { + nous: 'Nous', + nousDesc: 'ألوان محايدة زجاجية مع لمسات Nous الزرقاء', + midnight: 'منتصف الليل', + midnightDesc: 'أزرق بنفسجي عميق مع لمسات باردة', + ember: 'جمرة', + emberDesc: 'قرمزي وبرونزي دافئ — أجواء الحدادة', + mono: 'أحادي', + monoDesc: 'تدرج رمادي نظيف — بسيط ومركز', + cyberpunk: 'سايبربانك', + cyberpunkDesc: 'أخضر نيون على أسود — طرفية ماتركس', + slate: 'أردوازي', + slateDesc: 'أزرق أردوازي بارد — سمة مطور مركزة', + }, + themeDesc: 'اختر لوحة ألوان لسطح المحادثة وألوان الواجهة.', + mode: { + light: 'فاتح', + lightDesc: 'أسطح مكتب مشرقة', + dark: 'داكن', + darkDesc: 'مساحة عمل منخفضة الوهج', + system: 'النظام', + systemDesc: 'اتبع مظهر نظام التشغيل', + }, + language: 'اللغة', + languageDesc: 'اختر لغة الواجهة أو دع Hermes يتبع إعداد النظام.', + toolCallDisplay: 'عرض استدعاءات الأدوات', + toolCallDisplayDesc: 'منتج يخفي حمولات الأدوات الخام؛ تقني يعرض الإدخال/الإخراج الكامل.', + toolViewProduct: 'منتج', + toolViewTechnical: 'تقني', + toolViewProductDesc: 'نشاط أدوات سهل القراءة مع ملخصات موجزة.', + toolViewTechnicalDesc: 'تضمين وسائط/نتائج الأدوات الخام والتفاصيل منخفضة المستوى.', + }, + settings: { + title: 'الإعدادات', + appearance: 'المظهر', + model: 'النموذج', + gateway: 'البوابة', + sessions: 'الجلسات', + tools: 'الأدوات والمهارات', + section: { + chat: 'المحادثة', + workspace: 'مساحة العمل', + safety: 'الأمان', + memory: 'الذاكرة والسياق', + voice: 'الصوت', + advanced: 'متقدم', + }, + mcp: 'خوادم MCP', + config: 'التهيئة', + keys: 'مفاتيح API', + about: 'حول', + closeSettings: 'إغلاق الإعدادات', + archivedChats: 'المحادثات المؤرشفة', + exportConfig: 'تصدير التهيئة', + importConfig: 'استيراد التهيئة', + resetDefaults: 'إعادة التعيين إلى الإعدادات الافتراضية', + llmProviders: 'مزودو LLM', + searchPlaceholder: { + about: 'حول Hermes Desktop', + config: 'البحث في الإعدادات…', + gateway: 'اتصال البوابة…', + keys: 'البحث عن مفاتيح API…', + mcp: 'البحث عن خوادم MCP…', + sessions: 'البحث عن الجلسات المؤرشفة…', + }, + }, + chat: { + placeholder: 'اسألني أي شيء…', + send: 'إرسال', + stop: 'إيقاف', + thinking: 'جاري التفكير…', + noSession: 'لا توجد جلسة نشطة. ابدأ محادثة جديدة.', + loadingSession: 'جاري تحميل الجلسة', + loadingResponse: 'Hermes يحمّل ردًا', + branchInNewChat: 'تفرع في محادثة جديدة', + readAloud: 'قراءة بصوت عالٍ', + preparingAudio: 'جاري تحضير الصوت...', + stopReading: 'إيقاف القراءة', + editMessage: 'تحرير الرسالة', + editableCheckpoint: 'نقطة حفظ قابلة للتحرير', + restoreCheckpoint: 'استعادة نقطة الحفظ', + goForward: 'تقدم للأمام', + restorePrevCheckpoint: 'استعادة نقطة الحفظ السابقة', + restoreNextCheckpoint: 'استعادة نقطة الحفظ التالية', + composerTip: 'نصيحة: اكتب @ للإشارة إلى الملفات مباشرة.', + reconnecting: 'جاري إعادة الاتصال بـ Hermes…', + }, + commandCenter: { + title: 'مركز الأوامر', + noSessions: 'لا توجد جلسات بعد.', + loadingStatus: 'جاري تحميل الحالة…', + recentLogs: 'السجلات الحديثة', + dailyTokens: 'الرموز اليومية', + noActivity: 'لا يوجد نشاط يومي.', + noModelUsage: 'لا يوجد استخدام للنماذج بعد.', + noSkillActivity: 'لا يوجد نشاط مهارات بعد.', + sessionsPanel: 'لوحة الجلسات', + systemPanel: 'لوحة النظام', + usagePanel: 'لوحة الاستخدام', + navigate: 'تنقل', + noMatchingResults: 'لم يتم العثور على نتائج مطابقة.', + noSessionsYet: 'لا توجد جلسات بعد.', + unpinSession: 'إلغاء تثبيت الجلسة', + pinSession: 'تثبيت الجلسة', + exportSession: 'تصدير الجلسة', + deleteSession: 'حذف الجلسة', + gatewayRunning: 'بوابة المراسلة قيد التشغيل', + gatewayStopped: 'بوابة المراسلة متوقفة', + restartMsg: 'إعادة تشغيل المراسلة', + updateHermes: 'تحديث Hermes', + noLogsLoaded: 'لم يتم تحميل سجلات بعد.', + closeLabel: 'إغلاق مركز الأوامر', + searchPlaceholder: 'البحث عن جلسات، عروض، وإجراءات', + statSessions: 'جلسات', + statApiCalls: 'استدعاءات API', + statTokens: 'الرموز دخول/خروج', + statEstCost: 'التكلفة المقدرة', + cost => `الفعلي ${cost}`, + loadingUsage: 'جاري تحميل الاستخدام...', + count => `لا يوجد استخدام في آخر ${count} أيام.`, + retry: 'إعادة المحاولة', + tokenInput: 'دخل', + tokenOutput: 'خرج', + noDailyActivity: 'لا يوجد نشاط يومي.', + topModels: 'أفضل النماذج', + topSkills: 'أفضل المهارات', + actionsLabel: 'إجراءات', + systemRunning: 'قيد التشغيل', + systemDone: 'تم', + systemFailed: 'فشل', + open: 'فتح مركز الأوامر', + close: 'إغلاق مركز الأوامر', + }, + common: { + loading: 'جاري التحميل…', + save: 'حفظ', + cancel: 'إلغاء', + close: 'إغلاق', + delete: 'حذف', + confirm: 'تأكيد', + search: 'بحث…', + clearSearch: 'مسح البحث', + copy: 'نسخ', + refresh: 'تحديث', + moreActions: 'المزيد من الإجراءات', + tryAgain: 'حاول مرة أخرى', + }, + onboarding: { + welcome: 'مرحبًا بك في Hermes', + getStarted: 'ابدأ باختيار مزود ونموذج.', + skip: 'تخطي', + continue: 'متابعة', + finish: 'إنهاء', + setupTitle: 'لنقم بإعداد Hermes Agent', + setupDesc: 'اربط مزود نماذج لبدء الدردشة. معظم الخيارات تحتاج نقرة واحدة.', + preparing: 'جاري تشغيل Hermes…', + installing: 'Hermes يُكمل التثبيت. يستغرق هذا عادة أقل من دقيقة في أول تشغيل.', + lookingUp: 'جاري البحث عن المزودين...', + otherProviders: 'مزودون آخرون', + collapse: 'طي', + iHaveKey: 'لدي مفتاح API', + recommended: 'موصى به', + connected: 'متصل', + backToSignIn: 'العودة إلى تسجيل الدخول', + getKey: 'احصل على مفتاح', + pasteKey: 'ألصق مفتاح API', + connect: 'اتصال', + connecting: 'جاري الاتصال', + copyCode: 'نسخ', + startSignIn: 'بدء تسجيل الدخول لـ', + verifyingCode: 'جاري التحقق من الرمز مع', + pickingModel: 'متصل. جاري اختيار نموذج افتراضي...', + signInFailed: 'فشل تسجيل الدخول. حاول مرة أخرى.', + pickDifferent: 'اختر مزودًا مختلفًا', + signInTitle: 'تسجيل الدخول باستخدام', + step1: 'فتحنا', + step1End: 'في متصفحك.', + step2: 'امنح Hermes الصلاحية هناك.', + step3: 'انسخ رمز التفويض وألصقه أدناه.', + pasteCode: 'ألصق رمز التفويض', + reopenAuth: 'إعادة فتح صفحة التفويض', + cancel: 'إلغاء', + browserDesc: 'فتحنا', + browserDescEnd: 'في متصفحك. امنح Hermes الصلاحية هناك وستتصل تلقائيًا — لا حاجة للنسخ أو اللصق.', + waitingAuth: 'في انتظار منحك الصلاحية...', + reopenSignIn: 'إعادة فتح صفحة تسجيل الدخول', + externalDesc: 'يسجل الدخول من خلال CLI الخاص به. شغّل هذا الأمر في الطرفية، ثم عد واختر "لقد سجلت الدخول":', + iSignedIn: 'لقد سجلت الدخول', + enterCode: 'فتحنا', + enterCodeEnd: 'في متصفحك. أدخل هذا الرمز هناك:', + reopenVerification: 'إعادة فتح صفحة التحقق', + defaultModel: 'النموذج الافتراضي', + freeTier: 'الطبقة المجانية', + pro: 'Pro', + change: 'تغيير', + startChatting: 'ابدأ الدردشة', + docs: 'الوثائق', + close: 'إغلاق', + savingError: 'تعذر حفظ بيانات الاعتماد.', + openRouter: 'OpenRouter', + }, + file: { + browser: 'متصفح الملفات', + noFiles: 'لا توجد ملفات بعد.', + }, + terminal: { + title: 'الطرفية', + newTab: 'تبويب جديد', + closeTab: 'إغلاق التبويب', + }, + skills: { + title: 'المهارات', + search: 'البحث عن مهارات…', + noResults: 'لم يتم العثور على مهارات.', + tools: 'المهارات والأدوات', + }, + profiles: { + title: 'الملفات الشخصية', + noProfilesYet: 'لا توجد ملفات شخصية بعد.', + selectProfile: 'اختر ملفًا شخصيًا لعرض تفاصيله.', + deleteProfile: 'حذف الملف الشخصي؟', + soulMd: 'SOUL.md', + unsavedChanges: 'تغييرات غير محفوظة', + newProfile: 'ملف شخصي جديد', + cloneFromDefault: 'نسخ من الافتراضي', + renameProfile: 'إعادة تسمية الملف الشخصي', + }, + cron: { + title: 'مهام Cron', + noJobs: 'لا توجد مهام مجدولة.', + deleteCronJob: 'حذف مهمة Cron؟', + optional: 'اختياري', + label: 'Cron', + open: 'فتح مهام cron', + }, + messaging: { + title: 'المراسلة', + recommended: 'موصى به', + recommendedTelegram: 'موصى به. معرّفات رقمية مفصولة بفواصل من @userinfobot. بدون هذا، يمكن لأي شخص مراسلة بوتك.', + recommendedDiscord: 'موصى به. معرّفات مستخدم Discord مفصولة بفواصل.', + recommendedSlack: 'موصى به. معرّفات مستخدم Slack مفصولة بفواصل.', + recommendedMattermost: 'موصى به. معرّفات مستخدم Mattermost مفصولة بفواصل.', + recommendedMatrix: 'موصى به. معرّفات مستخدم مفصولة بفواصل بصيغة @user:server.', + recommendedSignal: 'موصى به. معرّفات Signal مفصولة بفواصل.', + recommendedWhatsApp: 'موصى به. أرقام هواتف أو معرّفات WhatsApp مفصولة بفواصل.', + gatewayStopped: 'بوابة المراسلة متوقفة', + getCredentials: 'احصل على بيانات الاعتماد', + required: 'مطلوب', + unsavedChanges: 'تغييرات غير محفوظة', + saved: 'تم الحفظ', + }, + about: { + version: 'الإصدار', + checkUpdates: 'التحقق من التحديثات', + upToDate: 'Hermes محدث.', + updateAvailable: 'يتوفر تحديث.', + license: 'رخصة MIT', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'الإصدار غير متاح', + updates: 'التحديثات', + checkNow: 'تحقق الآن', + checking: 'جاري التحقق…', + seeWhatsNew: 'اطلع على الجديد', + releaseNotes: 'ملاحظات الإصدار', + autoUpdates: 'التحديثات التلقائية', + autoUpdatesDesc: 'يتحقق Hermes من التحديثات تلقائيًا في الخلفية ويخبرك عند توفر تحديث.', + selfUpdateUnsupported: 'لا يمكن لهذا الإصدار تحديث نفسه من داخل التطبيق.', + cannotReachServer: 'تعذر الوصول إلى خادم التحديثات.', + installingUpdate: 'يتم تثبيت تحديث حاليًا.', + count => `يتوفر تحديث جديد (يشمل ${count} تغيير).`, + count => `يتوفر تحديث جديد (يشمل ${count} تغييرات).`, + onLatest: 'أنت تستخدم أحدث إصدار.', + tapCheckNow: 'اضغط "تحقق الآن" للبحث عن تحديثات.', + time => `آخر فحص ${time}`, + justNow: 'الآن', + never: 'أبدًا', + count => `قبل ${count} دقيقة`, + count => `قبل ${count} ساعة`, + count => `قبل ${count} يوم`, + (branch, sha) => `فرع ${branch} · إيداع ${sha}`, + }, + keys: { + title: 'مفاتيح API', + noKeys: 'لم يتم تكوين مفاتيح API.', + addKey: 'إضافة مفتاح', + loading: 'جاري تحميل مفاتيح API وبيانات الاعتماد…', + docs: 'الوثائق', + openDocs: 'فتح وثائق المزود', + hideValue: 'إخفاء القيمة', + revealValue: 'إظهار القيمة', + set: 'مُعيّن', + notSet: 'غير مُعيّن', + replace: 'استبدال', + replaceValue: 'استبدال القيمة الحالية', + enterValue: 'أدخل القيمة', + saving: 'جاري الحفظ', + save: 'حفظ', + cancel: 'إلغاء', + clearValue: 'مسح القيمة', + (count, total) => `تم تكوين ${count} من ${total}`, + (count, total) => `تم تعيين ${count} من ${total}`, + count => `تم تعيين ${count}`, + count => `${count} مفاتيح`, + otherProviders: 'مزودون آخرون', + categoryTools: 'الأدوات', + categoryMessaging: 'المراسلة', + categorySettings: 'الإعدادات', + openProviderDocs: 'فتح وثائق المزود', + showAdvanced: 'إظهار المتقدم', + loadFailed: 'فشل تحميل مفاتيح API', + credentialSaved: 'تم حفظ بيانات الاعتماد', + credentialRemoved: 'تمت إزالة بيانات الاعتماد', + }, + config: { + title: 'التهيئة', + edit: 'تحرير التهيئة', + reload: 'إعادة تحميل التهيئة', + notSet: 'غير مُعيّن', + commaSeparated: 'قيم مفصولة بفواصل', + on: 'تشغيل', + off: 'إيقاف', + none: 'لا شيء', + emptyOption: '(لا شيء)', + loading: 'جاري تحميل تهيئة Hermes…', + noMatching: 'لا توجد إعدادات مطابقة', + noMatchingDesc: 'جرّب مصطلح بحث مختلف أو اختر قسمًا آخر.', + count => `${count} نتيجة`, + count => `${count} نتائج`, + saving: 'جاري الحفظ…', + label: { + defaultModel: 'النموذج الافتراضي', + contextWindow: 'نافذة السياق', + fallbackModels: 'النماذج الاحتياطية', + enabledToolsets: 'مجموعات الأدوات المفعلة', + timezone: 'المنطقة الزمنية', + personality: 'الشخصية', + reasoningBlocks: 'كتل الاستدلال', + maxAgentSteps: 'الحد الأقصى لخطوات الوكيل', + imageAttachments: 'مرفقات الصور', + workingDirectory: 'دليل العمل', + executionBackend: 'خلفية التنفيذ', + commandTimeout: 'مهلة الأوامر', + persistentShell: 'طرفية مستمرة', + envPassthrough: 'تمرير متغيرات البيئة', + fileReadLimit: 'حد قراءة الملفات', + terminalOutputLimit: 'حد مخرجات الطرفية', + filePageLimit: 'حد صفحات الملفات', + lineLengthLimit: 'حد طول السطر', + codeExecutionMode: 'وضع تنفيذ الكود', + approvalMode: 'وضع الموافقة', + approvalTimeout: 'مهلة الموافقة', + confirmMcpReloads: 'تأكيد إعادة تحميل MCP', + commandAllowlist: 'قائمة الأوامر المسموحة', + redactSecrets: 'حجب الأسرار', + allowPrivateUrls: 'السماح بالروابط الخاصة', + browserPrivateUrls: 'تصفح الروابط الخاصة', + localBrowserForPrivateUrls: 'متصفح محلي للروابط الخاصة', + fileCheckpoints: 'نقاط حفظ الملفات', + checkpointLimit: 'حد نقاط الحفظ', + voiceShortcut: 'اختصار الصوت', + maxRecordingLength: 'الحد الأقصى للتسجيل', + readResponsesAloud: 'قراءة الردود بصوت عالٍ', + speechToText: 'تحويل الكلام إلى نص', + speechToTextProvider: 'مزود تحويل الكلام إلى نص', + localTranscriptionModel: 'نموذج النسخ المحلي', + transcriptionLanguage: 'لغة النسخ', + elevenlabsSttModel: 'نموذج ElevenLabs STT', + elevenlabsLanguage: 'لغة ElevenLabs', + tagAudioEvents: 'وسم الأحداث الصوتية', + speakerDiarization: 'تمييز المتحدثين', + textToSpeechProvider: 'مزود تحويل النص إلى كلام', + edgeVoice: 'صوت Edge', + openaiTtsModel: 'نموذج OpenAI TTS', + openaiVoice: 'صوت OpenAI', + elevenlabsVoice: 'صوت ElevenLabs', + elevenlabsModel: 'نموذج ElevenLabs', + persistentMemory: 'ذاكرة دائمة', + userProfile: 'ملف المستخدم', + memoryBudget: 'ميزانية الذاكرة', + profileBudget: 'ميزانية الملف الشخصي', + memoryProvider: 'مزود الذاكرة', + contextEngine: 'محرك السياق', + autoCompression: 'الضغط التلقائي', + compressionThreshold: 'عتبة الضغط', + compressionTarget: 'هدف الضغط', + protectedRecentMessages: 'الرسائل الحديثة المحمية', + apiRetries: 'إعادة محاولات API', + serviceTier: 'مستوى الخدمة', + toolUseEnforcement: 'فرض استخدام الأدوات', + subagentModel: 'نموذج الوكيل الفرعي', + subagentProvider: 'مزود الوكيل الفرعي', + subagentTurnLimit: 'حد أدوار الوكيل الفرعي', + parallelSubagents: 'الوكلاء الفرعيون المتوازيون', + subagentTimeout: 'مهلة الوكيل الفرعي', + subagentReasoningEffort: 'جهد استدلال الوكيل الفرعي', + }, + desc: { + defaultModel: 'يُستخدم للمحادثات الجديدة ما لم تختر نموذجًا مختلفًا في المحرر.', + contextWindow: 'اتركه 0 لاستخدام نافذة السياق المكتشفة للنموذج المحدد.', + fallbackModels: 'إدخالات مزود:نموذج احتياطية للتجربة إذا فشل النموذج الافتراضي.', + personality: 'نمط المساعد الافتراضي للجلسات الجديدة.', + timezone: 'يُستخدم عندما يحتاج Hermes إلى سياق التوقيت المحلي. الفراغ يستخدم المنطقة الزمنية للنظام.', + reasoningBlocks: 'إظهار أقسام الاستدلال عندما توفرها الخلفية.', + imageAttachments: 'يتحكم في كيفية إرسال مرفقات الصور إلى النموذج.', + workingDirectory: 'مجلد المشروع الافتراضي لعمل الأدوات والطرفية.', + codeExecutionMode: 'مدى صرامة نطاق تنفيذ الكود على المشروع الحالي.', + persistentShell: 'الحفاظ على حالة الطرفية بين الأوامر عندما تدعمها الخلفية.', + envPassthrough: 'متغيرات البيئة لتمريرها إلى تنفيذ الأدوات.', + fileReadLimit: 'الحد الأقصى للأحرف التي يمكن لـ Hermes قراءتها من طلب ملف واحد.', + approvalMode: 'كيفية تعامل Hermes مع الأوامر التي تحتاج موافقة صريحة.', + approvalTimeout: 'مدة انتظار مطالبات الموافقة قبل انتهاء المهلة.', + redactSecrets: 'إخفاء الأسرار المكتشفة من المحتوى المرئي للنموذج عندما يكون ممكنًا.', + fileCheckpoints: 'إنشاء نسخ احتياطية للتراجع قبل تعديلات الملفات.', + persistentMemory: 'حفظ ذكريات دائمة يمكن أن تساعد الجلسات المستقبلية.', + userProfile: 'الاحتفاظ بملف مضغوط لتفضيلات المستخدم.', + contextEngine: 'استراتيجية إدارة المحادثات الطويلة بالقرب من حد السياق.', + autoCompression: 'تلخيص السياق الأقدم عندما تصبح المحادثات كبيرة.', + readResponsesAloud: 'نطق ردود المساعد تلقائيًا.', + speechToText: 'تفعيل النسخ الصوتي المحلي أو عبر مزود.', + elevenlabsLanguage: 'رمز لغة ISO-639-3 اختياري. الفراغ يسمح لـ ElevenLabs بالكشف التلقائي.', + maxAgentSteps: 'الحد الأعلى لأدوار استدعاء الأدوات قبل أن يوقف Hermes التشغيل.', + }, + }, + gateway: { + title: 'البوابة', + start: 'تشغيل البوابة', + stop: 'إيقاف البوابة', + restart: 'إعادة تشغيل البوابة', + running: 'قيد التشغيل', + stopped: 'متوقفة', + loading: 'جاري تحميل إعدادات البوابة…', + unavailable: 'إعدادات البوابة غير متاحة', + unavailableDesc: 'لا يكشف جسر IPC لسطح المكتب عن إعدادات البوابة.', + connection: 'اتصال البوابة', + envOverride: 'تجاوز بيئي', + desc: 'يشغل Hermes Desktop بوابته المحلية افتراضيًا. استخدم بوابة بعيدة عندما تريد من هذا التطبيق التحكم في خلفية Hermes قيد التشغيل على جهاز آخر أو خلف وكيل موثوق.', + envOverrideTitle: 'متغيرات البيئة تتحكم في جلسة سطح المكتب هذه.', + (urlVar, tokenVar) => `ألغِ تعيين ${urlVar} و ${tokenVar} لاستخدام الإعداد المحفوظ أدناه.`, + localTitle: 'بوابة محلية', + localDesc: 'تشغيل خلفية Hermes خاصة على localhost. هذا هو الإعداد الافتراضي ويعمل دون اتصال.', + remoteTitle: 'بوابة بعيدة', + remoteDesc: 'ربط واجهة سطح المكتب هذه بخلفية Hermes بعيدة باستخدام رمز الجلسة الخاص بها.', + remoteUrl: 'الرابط البعيد', + remoteUrlDesc: 'الرابط الأساسي للوحة التحكم البعيدة. بادئات المسار مدعومة، مثل /hermes.', + remoteUrlPlaceholder: 'https://gateway.example.com/hermes', + sessionToken: 'رمز الجلسة', + sessionTokenDesc: 'رمز جلسة لوحة التحكم المستخدم للوصول عبر REST و WebSocket. اتركه فارغًا للإبقاء على الرمز المحفوظ.', + sessionTokenPlaceholder: 'ألصق رمز الجلسة', + preview => `رمز موجود ${preview}`, + tokenSaved: 'محفوظ', + testRemote: 'اختبار البعيد', + saveRestart: 'حفظ لإعادة التشغيل التالية', + saveReconnect: 'حفظ وإعادة الاتصال', + diagnostics: 'التشخيص', + diagnosticsDesc: 'إظهار desktop.log في مدير الملفات — مفيد عند فشل تشغيل البوابة.', + openLogs: 'فتح السجلات', + connected: 'متصل', + connecting: 'جاري الاتصال', + disconnected: 'غير متصل', + inferenceReady: 'الاستدلال جاهز', + inferenceNotReady: 'الاستدلال غير جاهز', + checkingInference: 'جاري التحقق من الاستدلال', + openSystemPanel: 'فتح لوحة النظام', + connectionLabel: 'الاتصال:', + recentActivity: 'النشاط الحديث', + viewAllLogs: 'عرض جميع السجلات →', + messagingPlatforms: 'منصات المراسلة', + label: 'البوابة', + inferenceStatus: 'حالة استدلال البوابة', + enterUrlFirst: 'أدخل رابطًا بعيدًا ورمز جلسة قبل التبديل', + enterUrlFirstTest: 'أدخل رابطًا بعيدًا ورمز جلسة قبل الاختبار', + }, + sessions: { + title: 'الجلسات', + search: 'البحث عن جلسات…', + noResults: 'لم يتم العثور على جلسات.', + export: 'تصدير', + delete: 'حذف الجلسة', + loading: 'جاري التحميل…', + defaultProjectDir: 'دليل المشروع الافتراضي', + defaultProjectDirDesc: 'تبدأ الجلسات الجديدة في هذا المجلد ما لم تختر مجلدًا آخر. اتركه فارغًا لاستخدام الدليل الرئيسي.', + fallback => `الافتراضي هو ${fallback}.`, + notSet: 'غير مُعيّن', + change: 'تغيير', + choose: 'اختيار', + clear: 'مسح', + archivedTitle: 'الجلسات المؤرشفة', + archivedDesc: 'المحادثات المؤرشفة مخفية من الشريط الجانبي لكنها تحتفظ بجميع رسائلها. اضغط Ctrl/⌘ مع النقر على محادثة في الشريط الجانبي لأرشفتها.', + nothingArchived: 'لا شيء مؤرشَف', + noSearchMatch: 'لا توجد محادثات مؤرشفة تطابق بحثك.', + archiveToHide: 'أرشِف محادثة لإخفائها هنا.', + unarchive: 'إلغاء الأرشفة', + deletePermanently: 'حذف نهائي', + count => `${count} رسائل`, + new: 'جلسة جديدة', + running: 'الجلسة قيد التشغيل', + actions: 'إجراءات الجلسة', + reorder: 'إعادة ترتيب', + pin: 'تثبيت', + unpin: 'إلغاء التثبيت', + copyId: 'نسخ المعرّف', + rename: 'إعادة تسمية', + archive: 'أرشفة', + renameDialog: 'إعادة تسمية الجلسة', + renameDesc: 'أعطِ هذه المحادثة عنوانًا مميزًا. اتركه فارغًا للمسح.', + untitled: 'جلسة بدون عنوان', + renamed: 'تمت إعادة التسمية', + renameFailed: 'فشلت إعادة التسمية', + pinned: 'مُثبّت', + results: 'النتائج', + allPinned: 'كل ما هنا مُثبّت. ألغِ تثبيت محادثة لإظهارها في الحديثة.', + pinHint: 'Shift + نقرة لتثبيت محادثة · سحب لإعادة الترتيب', + loadMore: 'تحميل المزيد', + noWorkspace: 'بدون مساحة عمل', + ungroup: 'إظهار الجلسات كقائمة واحدة', + groupByWorkspace: 'تجميع الجلسات حسب مساحة العمل', + loadStep: 'تحميل', + moreLabel: 'المزيد', + nothingArchivedTitle: 'لا شيء مؤرشَف', + deletePermanentlyTitle: 'حذف نهائي', + defaultProjectDirTitle: 'دليل المشروع الافتراضي', + loadingArchived: 'جاري تحميل الجلسات المؤرشفة…', + restored: 'تمت الاستعادة', + projectDirUpdated: 'تم تحديث دليل المشروع الافتراضي', + loadFailed: 'تعذر تحميل الجلسات المؤرشفة', + unarchiveFailed: 'فشل إلغاء الأرشفة', + deleteFailed: 'فشل الحذف', + archiveHint: 'أرشِف محادثة لإخفائها هنا.', + updateDirFailed: 'تعذر تحديث الدليل الافتراضي', + clearDirFailed: 'تعذر مسح الدليل الافتراضي', + }, + mcp: { + title: 'خوادم MCP', + addServer: 'إضافة خادم', + noServers: 'لم يتم تكوين خوادم MCP.', + loading: 'جاري تحميل خوادم MCP…', + servers: 'خوادم MCP', + count => `تم تكوين ${count}`, + newServer: 'خادم جديد', + reloadMCP: 'إعادة تحميل MCP', + reloading: 'جاري إعادة التحميل...', + noServersDesc: 'أضف خادم stdio أو HTTP لعرض أدوات MCP.', + name: 'الاسم', + namePlaceholder: 'filesystem', + serverJSON: 'JSON الخادم', + editServer: 'تحرير الخادم', + saveServer: 'حفظ الخادم', + saving: 'جاري الحفظ...', + remove: 'إزالة', + disabled: 'معطل', + nameRequired: 'الاسم مطلوب', + nameRequiredDesc: 'أعطِ خادم MCP هذا مفتاح تهيئة.', + invalidJson: 'يجب أن تكون تهيئة الخادم كائن JSON', + invalidJsonDesc: 'JSON MCP غير صالح', + saved: 'تم حفظ خادم MCP', + name => `${name} يُطبق بعد إعادة تحميل MCP.`, + saveFailed: 'فشل الحفظ', + removeFailed: 'فشلت الإزالة', + gatewayUnavailable: 'البوابة غير متاحة', + gatewayUnavailableDesc: 'أعد توصيل البوابة قبل إعادة تحميل MCP.', + reloadedTitle: 'تم إعادة تحميل أدوات MCP', + reloadedDesc: 'مخططات الأدوات الجديدة تُطبق على الأدوار الجديدة.', + reloadFailed: 'فشلت إعادة تحميل MCP', + giveConfigKey: 'أعطِ خادم MCP هذا مفتاح تهيئة.', + reconnectGateway: 'أعد توصيل البوابة قبل إعادة تحميل MCP.', + newSchemas: 'مخططات الأدوات الجديدة تُطبق على الأدوار الجديدة.', + loadingServers: 'جاري تحميل خوادم MCP...', + serverName: 'الاسم', + serversTitle: 'خوادم MCP', + noServersTitle: 'لا توجد خوادم MCP', + failedToLoad: 'فشل تحميل تهيئة MCP', + invalidJsonShort: 'JSON MCP غير صالح', + serverSaved: 'تم حفظ خادم MCP', + toolsReloaded: 'تم إعادة تحميل أدوات MCP', + emptyDesc: 'أضف خادم stdio أو HTTP لعرض أدوات MCP.', + }, + tools: { + title: 'الأدوات والمهارات', + noTools: 'لا توجد أدوات متاحة.', + }, + nav: { + home: 'الرئيسية', + chat: 'المحادثة', + settings: 'الإعدادات', + files: 'الملفات', + terminal: 'الطرفية', + }, + header: { + search: 'ابحث أو اكتب أمرًا…', + }, + model: { + auxTask: { + vision: 'الرؤية', + visionHint: 'تحليل الصور', + web_extract: 'استخراج الويب', + web_extractHint: 'تلخيص الصفحات', + compression: 'الضغط', + compressionHint: 'ضغط السياق', + session_search: 'بحث الجلسات', + session_searchHint: 'استعلامات الاستدعاء', + skills_hub: 'مركز المهارات', + skills_hubHint: 'بحث المهارات', + approval: 'الموافقة', + approvalHint: 'موافقة تلقائية ذكية', + mcp: 'MCP', + mcpHint: 'توجيه أدوات MCP', + title_generation: 'توليد العناوين', + title_generationHint: 'عناوين الجلسات', + curator: 'المنسق', + curatorHint: 'مراجعة استخدام المهارات', + }, + mainModel: 'النموذج الرئيسي', + mainDesc: 'ينطبق على الجلسات الجديدة. استخدم منتقي النماذج في المحرر للتبديل السريع للمحادثة النشطة.', + providerPlaceholder: 'المزود', + modelPlaceholder: 'النموذج', + apply: 'تطبيق', + applying: 'جاري التطبيق…', + auxiliaryModels: 'النماذج المساعدة', + auxiliaryDesc: 'تعمل المهام المساعدة على النموذج الرئيسي افتراضيًا. عيّن نموذجًا مخصصًا لأي مهمة للتجاوز.', + resetAllToMain: 'إعادة تعيين الكل إلى الرئيسي', + setToMain: 'تعيين إلى الرئيسي', + change: 'تغيير', + cancel: 'إلغاء', + autoUseMain: 'تلقائي · استخدام النموذج الرئيسي', + providerDefault: '(افتراضي المزود)', + loading: 'جاري تحميل تهيئة النموذج…', + options: 'خيارات', + thinking: 'التفكير', + fast: 'سريع', + effort: 'الجهد', + noOptions: 'لا توجد خيارات لهذا النموذج', + optionUpdateFailed: 'فشل تحديث خيار النموذج', + fastModeUpdateFailed: 'فشل تحديث الوضع السريع', + effortMinimal: 'أدنى', + effortLow: 'منخفض', + effortMedium: 'متوسط', + effortHigh: 'عالي', + effortMax: 'أقصى', + switch: 'تبديل النموذج', + unknown: '(غير معروف)', + filterPlaceholder: 'تصفية المزودين والنماذج...', + persistGlobal: 'حفظ بشكل عام', + persistGlobalSession: 'حفظ بشكل عام (وإلا لهذه الجلسة فقط)', + couldNotLoad: 'تعذر تحميل النماذج', + proLockedDesc: 'النماذج Pro تحتاج اشتراك Nous مدفوع.', + priceTooltip: 'سعر الإدخال / الإخراج لكل مليون رمز', + freePrice: 'مجاني', + currentLabel: 'الحالي:', + addProviderBtn: 'إضافة مزود', + }, + updates: { + checking: 'جاري التحقق من التحديثات…', + available: 'يتوفر تحديث', + downloading: 'جاري التنزيل…', + installing: 'جاري التثبيت…', + restart: 'أعد التشغيل للتحديث', + stageGettingReady: 'جاري الاستعداد…', + stageDownloading: 'جاري التنزيل…', + stageAlmostThere: 'أوشكنا على الانتهاء…', + stageFinishingUp: 'جاري الإنهاء…', + stageRestarting: 'جاري إعادة تشغيل Hermes…', + stageManual: 'حدّث من الطرفية', + stageError: 'توقف التحديث مؤقتًا', + updatingHermes: 'جاري تحديث Hermes…', + lookingForUpdates: 'جاري البحث عن تحديثات…', + couldntCheck: 'تعذر التحقق من التحديثات', + updateNotAvailable: 'التحديث غير متاح', + checkConnection: 'تحقق من اتصالك وحاول مرة أخرى.', + onLatest: 'أنت تستخدم أحدث إصدار.', + allSet: 'كل شيء جاهز', + newUpdateAvailable: 'يتوفر تحديث جديد', + readyToInstall: 'إصدار جديد من Hermes جاهز للتثبيت.', + updateNow: 'حدّث الآن', + maybeLater: 'ربما لاحقًا', + count => `+ ${count} تغيير إضافي مضمن.`, + count => `+ ${count} تغييرات إضافية مضمنة.`, + updateFromTerminal: 'حدّث من الطرفية', + terminalDesc: 'لقد ثبّت Hermes من سطر الأوامر، لذا تعمل التحديثات هناك أيضًا. ألصق هذا في الطرفية:', + copied: 'تم النسخ', + copy: 'نسخ', + pickupNewVersion: 'سيتبنى Hermes الإصدار الجديد عند تشغيله في المرة القادمة.', + done: 'تم', + updaterDesc: 'سيتولى مُحدِّث Hermes المهمة في نافذته الخاصة وسيعيد فتح Hermes عند الانتهاء.', + closeToApply: 'سيُغلق Hermes لتطبيق التحديث.', + updateDidntFinish: 'لم يكتمل التحديث', + nothingLost: 'لا تقلق — لم يُفقد شيء. يمكنك المحاولة مرة أخرى الآن.', + notNow: 'ليس الآن', + }, + errors: { + generic: 'حدث خطأ ما.', + notFound: 'الصفحة غير موجودة.', + noPermission: 'ليس لديك صلاحية الوصول إلى هذا.', + somethingBroke: 'حدث عطل في الواجهة', + viewCrashedDesc: 'واجهت الواجهة خطأ غير متوقع. محادثاتك وإعداداتك آمنة - حاول مرة أخرى، أو أعد تحميل النافذة.', + noProviders: 'لا يوجد مزودون مصرح لهم.', + }, + tool: { + toolCall: 'استدعاء أداة', + result: 'النتيجة', + error: 'خطأ', + timeout: 'انتهت المهلة', + cancelled: 'مُلغى', + running: 'قيد التشغيل', + recovered: 'تم الاسترداد', + done: 'تم', + output: 'مخرجات الأداة', + searchResults: 'نتائج البحث', + rawResponse: 'الرد الخام', + stdout: 'stdout', + stderr: 'stderr', + copyActivity: 'نسخ النشاط', + recoveredAfter: 'تم الاسترداد بعد خطوة فاشلة واحدة', + count => `تم الاسترداد بعد ${count} خطوات فاشلة`, + oneStepFailed: 'فشلت خطوة واحدة', + count => `فشلت ${count} خطوات`, + }, + composer: { + startingHermes: 'جاري تشغيل Hermes...', + sendFollowUp: 'إرسال متابعة', + message: 'رسالة', + editingQueued: 'تحرير الدور المُنتظر في المحرر', + attach: 'إرفاق', + files: 'ملفات…', + folder: 'مجلد…', + images: 'صور…', + pasteImage: 'لصق صورة', + url: 'رابط…', + promptSnippets: 'مقتطفات التوجيه', + promptSnippetsDesc: 'اختر توجيهًا بدائيًا لإدراجه في المحرر.', + voiceStart: 'بدء محادثة صوتية', + queue: 'وضع الرسالة في الطابور', + speaking: 'يتحدث', + transcribing: 'جاري النسخ', + muted: 'مكتوم', + listening: 'يستمع', + unmuteMic: 'إلغاء كتم الميكروفون', + muteMic: 'كتم الميكروفون', + stopListening: 'إيقاف الاستماع والإرسال', + endVoice: 'إنهاء المحادثة الصوتية', + end: 'إنهاء', + stopDictation: 'إيقاف الإملاء', + transcribingDictation: 'جاري نسخ الإملاء', + voiceDictation: 'الإملاء الصوتي', + addContext: 'إضافة سياق', + }, + models: { + title: 'النماذج', + search: 'البحث عن نماذج', + addProvider: 'إضافة مزود…', + }, + install: { + title: 'يحتاج Hermes إلى تثبيت لمرة واحدة', + desc: 'التثبيت التلقائي لأول تشغيل غير متاح على', + descEnd: 'بعد. افتح الطرفية وشغّل الأمر أدناه، ثم أعد تشغيل هذا التطبيق. سيتخطى التشغيل اللاحق هذه الخطوة.', + installCommand: 'أمر التثبيت', + copyCommand: 'نسخ الأمر', + viewDocs: 'عرض وثائق التثبيت', + willInstallTo: 'سيتم التثبيت في', + iRanIt: 'لقد شغلته -- أعد المحاولة', + failed: 'فشل التثبيت', + settingUp: 'جاري إعداد Hermes Agent', + finishingUp: 'جاري الإنهاء', + failedDesc: 'فشلت إحدى خطوات التثبيت. على Windows، قد يحدث هذا إذا كان هناك مثيل آخر من Hermes CLI أو سطح المكتب قيد التشغيل. أوقف أي مثيلات Hermes قيد التشغيل، ثم أعد المحاولة. راجع التفاصيل أدناه أو سجل سطح المكتب للنص الكامل.', + setupDesc: 'هذا إعداد لمرة واحدة. يقوم مثبّت Hermes بتنزيل التبعيات وتهيئة جهازك. ستتخطى عمليات التشغيل اللاحقة هذه الخطوة.', + fetchingManifest: 'جاري جلب بيان التثبيت...', + error: 'خطأ', + showOutput: 'إظهار مخرجات التثبيت', + hideOutput: 'إخفاء مخرجات التثبيت', + noOutput: 'لا توجد مخرجات بعد.', + cancelInstall: 'إلغاء التثبيت', + cancelling: 'جاري الإلغاء...', + copyOutput: 'نسخ المخرجات', + copied: 'تم النسخ!', + reloadRetry: 'إعادة تحميل وإعادة المحاولة', + saveLogs: 'تم حفظ النص الكامل في', + stepsComplete: 'الخطوات مكتملة', + nowLabel: 'الآن', + line: 'سطر', + lines: 'أسطر', + }, + previewConsole: { + resizeLabel: 'تغيير حجم طرفية المعاينة', + noMessages: 'لا توجد رسائل طرفية بعد.', + }, + boot: { + ipcUnavailable: 'جسر IPC لسطح المكتب غير متاح.', + backendExited: 'عملية Hermes الخلفية خرجت أثناء بدء التشغيل.', + backendStoppedTitle: 'توقفت الخلفية', + backendStoppedMessage: 'عملية Hermes الخلفية خرجت.', + startingConnection: 'بدء اتصال سطح المكتب', + connectingGateway: 'توصيل بوابة سطح المكتب الحية', + loadingConfig: 'تحميل إعدادات Hermes', + loadingSessions: 'تحميل الجلسات الحديثة', + desktopBootFailed: 'فشل تشغيل سطح المكتب', + couldNotStart: 'تعذر تشغيل Hermes', + recoveryDesc: 'البوابة الخلفية لم تعمل. جرب إحدى خطوات الاسترداد أدناه — لا شيء هنا يحذف محادثاتك أو إعداداتك.', + retry: 'إعادة المحاولة', + repairInstall: 'إصلاح التثبيت', + useLocalGateway: 'استخدام بوابة محلية', + openLogs: 'فتح السجلات', + repairHint: 'الإصلاح يعيد تشغيل المثبت وقد يستغرق بضع دقائق على جهاز جديد.', + showLogs: 'إظهار السجلات الحديثة', + hideLogs: 'إخفاء السجلات الحديثة', + }, + urlDialog: { + title: 'إرفاق رابط', + description: 'سيجلب Hermes الصفحة ويضمّنها كسياق لهذا الدور.', + placeholder: 'https://example.com/post', + hint: 'أدرج الرابط الكامل، مثل', + attach: 'إرفاق', + }, + titlebar: { + hideSidebar: 'إخفاء الشريط الجانبي', + showSidebar: 'إظهار الشريط الجانبي', + search: 'بحث', + searchTitle: 'البحث عن جلسات، عروض، وإجراءات', + hideRightSidebar: 'إخفاء الشريط الجانبي الأيمن', + showRightSidebar: 'إظهار الشريط الجانبي الأيمن', + unmuteHaptics: 'إلغاء كتم الاهتزازات', + muteHaptics: 'كتم الاهتزازات', + openSettings: 'فتح الإعدادات', + profiles: 'الملفات الشخصية', + profilesDesc: 'بيئات Hermes متقدمة لشخصيات وتكوينات ومهارات وSOUL.md منفصلة.', + manageProfiles: 'إدارة الملفات الشخصية', + language: 'اللغة', + languageDesc: 'اختر لغة عرض للواجهة.', + }, + pagination: { + ariaLabel: 'ترقيم الصفحات', + prevAria: 'الذهاب إلى الصفحة السابقة', + prev: 'السابق', + nextAria: 'الذهاب إلى الصفحة التالية', + next: 'التالي', + }, + bootstrap: { + pending: 'معلق', + running: 'جاري التثبيت', + done: 'تم', + skipped: 'تم التخطي', + failed: 'فشل', + }, + sidebar: { + sheetTitle: 'الشريط الجانبي', + sheetDesc: 'يعرض الشريط الجانبي للجوال.', + toggle: 'تبديل الشريط الجانبي', + }, + clarify: { + hermesIsAsking: 'Hermes يسأل', + loadingQuestion: 'جاري تحميل السؤال…', + otherTypeAnswer: 'أخرى (اكتب إجابتك)', + placeholderAnswer: 'اكتب إجابتك…', + cmdEnterToSend: '⌘/Ctrl + Enter للإرسال', + back: 'رجوع', + skip: 'تخطي', + couldNotSend: 'تعذر إرسال رد التوضيح', + n => `١–${n} للاختيار`, + }, + intro: { + fallback1h: 'ماذا نحرك اليوم؟', + fallback1b: 'أرسل خطأ أو فرعًا أو خطة أو فكرة أولية. سأفحص المستودع وأحولها إلى الخطوة الملموسة التالية.', + fallback2h: 'ما الذي يشغل بالك؟', + fallback2b: 'أحضر الكود أو السؤال أو الجزء العالق. سأقرأ الغرفة قبل إجراء التغييرات.', + fallback3h: 'ما الذي يجب أن ينظر إليه Hermes؟', + fallback3b: 'أرسل المهمة أو المسار الفاشل أو الخطة غير المكتملة. سأساعد في تحويلها إلى عمل.', + fallback4h: 'من أين نبدأ؟', + fallback4b: 'أحضر المشكلة أو الهدف أو الملف. سأفحص أولاً وأبقي الخطوة التالية ملموسة.', + fallback5h: 'ما الذي يحتاج اهتمامًا؟', + fallback5b: 'أرسل السياق الذي لديك. سأساعد في ترتيبه إلى خطة أو إصلاح.', + personality: { + label => `وضع ${label} قيد التشغيل. على ماذا نعمل؟`, + body1: 'أرسل المهمة أو الملف أو الفكرة الأولية. سأستخدم صوتك المُعد وأبقي العمل مرتبطًا بهذا المستودع.', + label => `ما الذي يحتاج ${label} Hermes رؤيته؟`, + body2: 'أحضر السياق أو الجزء العالق. سأتكيف مع شخصيتك المُعدة.', + label => `وضع ${label} جاهز.`, + body3: 'أرسل المشكلة أو الملف أو الفكرة. سأتبع الشخصية التي قمت بتهيئتها.', + label => `ما الذي يجب أن يعالجه ${label} Hermes؟`, + body4: 'ضع المهمة هنا. سأبقي العمل مرتبطًا بالمستودع.', + heading5: 'من أين نبدأ؟', + label => `أعطني السياق وسأجيب في وضع ${label}.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'لم يتم العثور على مُخرجات', + }, + agents: { + spawnTree: 'شجرة التفريخ', + liveSubagentActivity: 'نشاط الوكيل الفرعي المباشر للدور الحالي.', + noLiveSubagents: 'لا يوجد وكلاء فرعيون مباشرون', + files: 'ملفات', + label: 'الوكلاء', + open: 'فتح الوكلاء', + close: 'إغلاق الوكلاء', + subagent: 'وكيل فرعي', + subagents: 'وكلاء فرعيون', + failed: 'فشل', + running: 'قيد التشغيل', + }, + provider: { + desc: { + nousPortal: 'تجاوز الرابط الأساسي لبوابة Nous', + openRouter: 'مفتاح OpenRouter API (للرؤية ومساعدي كشط الويب و MoA)', + google: 'مفتاح Google AI Studio API (يُعرف أيضًا كـ GEMINI_API_KEY)', + gemini: 'معرّف مشروع GCP لطبقات Gemini المدفوعة (الطبقة المجانية تُجهّز تلقائيًا)', + anthropic: 'مفتاح Anthropic API', + deepseek: 'رابط DeepSeek API الأساسي المخصص (متقدم)', + xai: 'تجاوز الرابط الأساسي لـ xAI', + huggingface: 'تجاوز الرابط الأساسي لـ Hugging Face Inference Providers', + kimi: 'مفتاح Kimi / Moonshot China API', + minimax: 'تجاوز الرابط الأساسي لـ MiniMax (الصين)', + minimaxCn: 'مفتاح MiniMax China API', + dashscope: 'رابط DashScope أساسي مخصص (الافتراضي: نقطة نهاية coding-intl المتوافقة مع OpenAI)', + glm: 'مفتاح GLM API (Z.AI)', + nvidia: 'تجاوز الرابط الأساسي لـ NVIDIA NIM (مثل http://localhost:8000/v1 لـ NIM المحلي)', + opencodeGo: 'مفتاح OpenCode Go API', + opencodeZen: 'مفتاح OpenCode Zen API', + xiaomi: 'تجاوز الرابط الأساسي لـ Xiaomi MiMo (الافتراضي: https://api.xiaomimimo.com/v1)', + kiloCode: 'مفتاح Kilo Code API', + aiGateway: 'مفتاح AI Gateway API (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'مفتاح ElevenLabs API', + openai: 'مفتاح OpenAI API (لمعالجة الصوت عبر الوكيل)', + mistral: 'مفتاح Mistral API (لـ STT/TTS)', + groq: 'مفتاح Groq API (لـ STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'رابط Firecrawl API للحالات المستضافة ذاتيًا (اختياري)', + fal: 'FAL_KEY', + nous: 'تجاوز الرابط الأساسي لبوابة Nous', + openrouter: 'مفتاح OpenRouter API (للرؤية ومساعدي كشط الويب و MoA)', + lmstudio: 'تجاوز الرابط الأساسي لـ Z.AI / GLM', + zai: 'رابط Azure Foundry الأساسي (اضبط عبر \'hermes model\' لتهيئة خاصة بنقطة النهاية)', + stepfun: 'تجاوز الرابط الأساسي لـ StepFun Step Plan', + arcee: 'تجاوز الرابط الأساسي لـ Arcee AI', + gmi: 'تجاوز الرابط الأساسي لـ GMI Cloud', + qwenportal: 'تجاوز الرابط الأساسي لبوابة Qwen (الافتراضي: https://portal.qwen.ai/v1)', + opencodego: 'تجاوز الرابط الأساسي لـ OpenCode Go', + ollamacloud: 'تجاوز الرابط الأساسي لـ Ollama Cloud (الافتراضي: https://ollama.com/v1)', + awsbedrock: 'ملف AWS المسمى لمصادقة Bedrock (من ~/.aws/credentials)', + exa: 'مفتاح Exa API للبحث واستخراج المحتوى المدعوم بالذكاء الاصطناعي', + parallel: 'مفتاح Parallel API للبحث والاستخراج المدعوم بالذكاء الاصطناعي', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/catalog.ts b/apps/desktop/src/i18n/catalog.ts index 19556cb45c49..416bbad555f0 100644 --- a/apps/desktop/src/i18n/catalog.ts +++ b/apps/desktop/src/i18n/catalog.ts @@ -1,12 +1,34 @@ import { en } from './en' -import { ja } from './ja' -import type { Locale, Translations } from './types' import { zh } from './zh' import { zhHant } from './zh-hant' +import { ja } from './ja' +import { ko } from './ko' +import { de } from './de' +import { es } from './es' +import { fr } from './fr' +import { ptbr } from './pt-br' +import { ar } from './ar' +import { hi } from './hi' +import { th } from './th' +import { vi } from './vi' +import { it } from './it' +import { ru } from './ru' +import type { Locale, Translations } from './types' export const TRANSLATIONS: Record = { en, - zh, - 'zh-hant': zhHant, - ja + zh, + 'zh-hant': zhHant, + ja, + ko, + de, + es, + fr, + 'pt-br': ptbr, + ar, + hi, + th, + vi, + it, + ru } diff --git a/apps/desktop/src/i18n/de.ts b/apps/desktop/src/i18n/de.ts new file mode 100644 index 000000000000..d9383d0ddbd3 --- /dev/null +++ b/apps/desktop/src/i18n/de.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const de = defineLocale( +{ + appearance: { + title: 'Erscheinungsbild', + description: 'Dies sind Desktop-spezifische Anzeigeeinstellungen. Der Modus steuert die Helligkeit; das Design steuert die Akzentpalette und das Chat-Design.', + colorMode: 'Farbmodus', + colorModeDesc: 'Wähle einen festen Modus oder lass Hermes deiner Systemeinstellung folgen.', + theme: { + nous: 'Nous', + nousDesc: 'Glas-Neutraltöne mit Nous-Blau-Akzenten', + midnight: 'Mitternacht', + midnightDesc: 'Tiefes Blauviolett mit kühlen Akzenten', + ember: 'Glut', + emberDesc: 'Warmes Karminrot und Bronze – Schmiede-Vibes', + mono: 'Mono', + monoDesc: 'Klares Graustufen-Design – minimalistisch und fokussiert', + cyberpunk: 'Cyberpunk', + cyberpunkDesc: 'Neon-Grün auf Schwarz – Matrix-Terminal', + slate: 'Schiefer', + slateDesc: 'Kühles Schieferblau – fokussiertes Entwickler-Design', + }, + themeDesc: 'Wähle eine Farbpalette für die Chat-Oberfläche und die Akzente.', + mode: { + light: 'Hell', + lightDesc: 'Helle Desktop-Oberflächen', + dark: 'Dunkel', + darkDesc: 'Blendarme Arbeitsumgebung', + system: 'System', + systemDesc: 'Systemeinstellung übernehmen', + }, + language: 'Sprache', + languageDesc: 'Wähle die UI-Sprache oder lass Hermes deiner Systemeinstellung folgen.', + toolCallDisplay: 'Tool-Aufruf-Anzeige', + toolCallDisplayDesc: 'Produkt blendet rohe Tool-Daten aus; Technisch zeigt vollständige Ein-/Ausgabe.', + toolViewProduct: 'Produkt', + toolViewTechnical: 'Technisch', + toolViewProductDesc: 'Menschenfreundliche Tool-Aktivität mit kurzen Zusammenfassungen.', + toolViewTechnicalDesc: 'Rohe Tool-Argumente/Ergebnisse und Details auf niedriger Ebene einbeziehen.', + }, + settings: { + title: 'Einstellungen', + appearance: 'Erscheinungsbild', + model: 'Modell', + gateway: 'Gateway', + sessions: 'Sitzungen', + tools: 'Tools & Skills', + section: { + chat: 'Chat', + workspace: 'Arbeitsbereich', + safety: 'Sicherheit', + memory: 'Speicher & Kontext', + voice: 'Sprache', + advanced: 'Erweitert', + }, + mcp: 'MCP-Server', + config: 'Konfiguration', + keys: 'API-Schlüssel', + about: 'Über', + closeSettings: 'Einstellungen schließen', + archivedChats: 'Archivierte Chats', + exportConfig: 'Konfiguration exportieren', + importConfig: 'Konfiguration importieren', + resetDefaults: 'Auf Standard zurücksetzen', + llmProviders: 'LLM-Anbieter', + searchPlaceholder: { + about: 'Über Hermes Desktop', + config: 'Einstellungen durchsuchen…', + gateway: 'Gateway-Verbindung…', + keys: 'API-Schlüssel durchsuchen…', + mcp: 'MCP-Server durchsuchen…', + sessions: 'Archivierte Sitzungen durchsuchen…', + }, + }, + chat: { + placeholder: 'Frag mich etwas…', + send: 'Senden', + stop: 'Stopp', + thinking: 'Denkt nach…', + noSession: 'Keine aktive Sitzung. Starte eine neue Unterhaltung.', + loadingSession: 'Lade Sitzung', + loadingResponse: 'Hermes lädt eine Antwort', + branchInNewChat: 'In neuem Chat abzweigen', + readAloud: 'Vorlesen', + preparingAudio: 'Bereite Audio vor...', + stopReading: 'Vorlesen beenden', + editMessage: 'Nachricht bearbeiten', + editableCheckpoint: 'Bearbeitbarer Checkpoint', + restoreCheckpoint: 'Checkpoint wiederherstellen', + goForward: 'Vorwärts', + restorePrevCheckpoint: 'Vorherigen Checkpoint wiederherstellen', + restoreNextCheckpoint: 'Nächsten Checkpoint wiederherstellen', + composerTip: 'Tipp: Gib @ ein, um Dateien inline zu referenzieren.', + reconnecting: 'Verbinde erneut mit Hermes…', + }, + commandCenter: { + title: 'Kommandozentrale', + noSessions: 'Noch keine Sitzungen.', + loadingStatus: 'Lade Status…', + recentLogs: 'Aktuelle Logs', + dailyTokens: 'Tägliche Token', + noActivity: 'Keine tägliche Aktivität.', + noModelUsage: 'Noch keine Modellnutzung.', + noSkillActivity: 'Noch keine Skill-Aktivität.', + sessionsPanel: 'Sitzungs-Panel', + systemPanel: 'System-Panel', + usagePanel: 'Nutzungs-Panel', + navigate: 'Navigieren', + noMatchingResults: 'Keine passenden Ergebnisse gefunden.', + noSessionsYet: 'Noch keine Sitzungen.', + unpinSession: 'Sitzung lösen', + pinSession: 'Sitzung anheften', + exportSession: 'Sitzung exportieren', + deleteSession: 'Sitzung löschen', + gatewayRunning: 'Messaging-Gateway läuft', + gatewayStopped: 'Messaging-Gateway gestoppt', + restartMsg: 'Messaging neustarten', + updateHermes: 'Hermes aktualisieren', + noLogsLoaded: 'Noch keine Logs geladen.', + closeLabel: 'Kommandozentrale schließen', + searchPlaceholder: 'Sitzungen, Ansichten und Aktionen durchsuchen', + statSessions: 'Sitzungen', + statApiCalls: 'API-Aufrufe', + statTokens: 'Token ein/aus', + statEstCost: 'Gesch. Kosten', + cost => `tatsächlich ${cost}`, + loadingUsage: 'Lade Nutzung...', + count => `Keine Nutzung in den letzten ${count} Tagen.`, + retry: 'Wiederholen', + tokenInput: 'Eingabe', + tokenOutput: 'Ausgabe', + noDailyActivity: 'Keine tägliche Aktivität.', + topModels: 'Top-Modelle', + topSkills: 'Top-Skills', + actionsLabel: 'Aktionen', + systemRunning: 'läuft', + systemDone: 'fertig', + systemFailed: 'fehlgeschlagen', + open: 'Kommandozentrale öffnen', + close: 'Kommandozentrale schließen', + }, + common: { + loading: 'Lädt…', + save: 'Speichern', + cancel: 'Abbrechen', + close: 'Schließen', + delete: 'Löschen', + confirm: 'Bestätigen', + search: 'Suchen…', + clearSearch: 'Suche löschen', + copy: 'Kopieren', + refresh: 'Aktualisieren', + moreActions: 'Weitere Aktionen', + tryAgain: 'Erneut versuchen', + }, + onboarding: { + welcome: 'Willkommen bei Hermes', + getStarted: 'Wähle einen Anbieter und ein Modell, um loszulegen.', + skip: 'Überspringen', + continue: 'Weiter', + finish: 'Fertig', + setupTitle: 'Lass uns Hermes Agent einrichten', + setupDesc: 'Verbinde einen Modellanbieter, um zu chatten. Die meisten Optionen brauchen nur einen Klick.', + preparing: 'Starte Hermes…', + installing: 'Hermes schließt die Installation ab. Das dauert beim ersten Start normalerweise unter einer Minute.', + lookingUp: 'Suche nach Anbietern...', + otherProviders: 'Andere Anbieter', + collapse: 'Einklappen', + iHaveKey: 'Ich habe einen API-Schlüssel', + recommended: 'Empfohlen', + connected: 'Verbunden', + backToSignIn: 'Zurück zur Anmeldung', + getKey: 'Schlüssel besorgen', + pasteKey: 'API-Schlüssel einfügen', + connect: 'Verbinden', + connecting: 'Verbinde', + copyCode: 'Kopieren', + startSignIn: 'Starte Anmeldung für', + verifyingCode: 'Überprüfe deinen Code mit', + pickingModel: 'verbunden. Wähle ein Standardmodell...', + signInFailed: 'Anmeldung fehlgeschlagen. Erneut versuchen.', + pickDifferent: 'Anderen Anbieter wählen', + signInTitle: 'Anmelden mit', + step1: 'Wir haben', + step1End: 'in deinem Browser geöffnet.', + step2: 'Autorisiere Hermes dort.', + step3: 'Kopiere den Autorisierungscode und füge ihn unten ein.', + pasteCode: 'Autorisierungscode einfügen', + reopenAuth: 'Autorisierungsseite erneut öffnen', + cancel: 'Abbrechen', + browserDesc: 'Wir haben', + browserDescEnd: 'in deinem Browser geöffnet. Autorisiere Hermes dort und du wirst automatisch verbunden – nichts zum Kopieren oder Einfügen.', + waitingAuth: 'Warte auf deine Autorisierung...', + reopenSignIn: 'Anmeldeseite erneut öffnen', + externalDesc: 'meldet sich über die eigene CLI an. Führe diesen Befehl im Terminal aus, komm zurück und wähle „Ich habe mich angemeldet":', + iSignedIn: 'Ich habe mich angemeldet', + enterCode: 'Wir haben', + enterCodeEnd: 'in deinem Browser geöffnet. Gib diesen Code dort ein:', + reopenVerification: 'Verifizierungsseite erneut öffnen', + defaultModel: 'Standardmodell', + freeTier: 'Kostenlos', + pro: 'Pro', + change: 'Ändern', + startChatting: 'Chat starten', + docs: 'Dokumentation', + close: 'Schließen', + savingError: 'Zugangsdaten konnten nicht gespeichert werden.', + openRouter: 'OpenRouter', + }, + file: { + browser: 'Dateibrowser', + noFiles: 'Noch keine Dateien.', + }, + terminal: { + title: 'Terminal', + newTab: 'Neuer Tab', + closeTab: 'Tab schließen', + }, + skills: { + title: 'Skills', + search: 'Skills durchsuchen…', + noResults: 'Keine Skills gefunden.', + tools: 'Skills & Tools', + }, + profiles: { + title: 'Profile', + noProfilesYet: 'Noch keine Profile.', + selectProfile: 'Wähle ein Profil, um Details anzuzeigen.', + deleteProfile: 'Profil löschen?', + soulMd: 'SOUL.md', + unsavedChanges: 'Ungespeicherte Änderungen', + newProfile: 'Neues Profil', + cloneFromDefault: 'Von Standard kopieren', + renameProfile: 'Profil umbenennen', + }, + cron: { + title: 'Cron-Jobs', + noJobs: 'Keine geplanten Jobs.', + deleteCronJob: 'Cron-Job löschen?', + optional: 'Optional', + label: 'Cron', + open: 'Cron-Jobs öffnen', + }, + messaging: { + title: 'Messaging', + recommended: 'Empfohlen', + recommendedTelegram: 'Empfohlen. Kommagetrennte numerische IDs von @userinfobot. Ohne dies kann jeder deinem Bot eine DM schicken.', + recommendedDiscord: 'Empfohlen. Kommagetrennte Discord-Benutzer-IDs.', + recommendedSlack: 'Empfohlen. Kommagetrennte Slack-Benutzer-IDs.', + recommendedMattermost: 'Empfohlen. Kommagetrennte Mattermost-Benutzer-IDs.', + recommendedMatrix: 'Empfohlen. Kommagetrennte Benutzer-IDs im Format @benutzer:server.', + recommendedSignal: 'Empfohlen. Kommagetrennte Signal-Identifikatoren.', + recommendedWhatsApp: 'Empfohlen. Kommagetrennte Telefonnummern oder WhatsApp-IDs.', + gatewayStopped: 'Messaging-Gateway gestoppt', + getCredentials: 'Zugangsdaten besorgen', + required: 'Erforderlich', + unsavedChanges: 'Ungespeicherte Änderungen', + saved: 'Gespeichert', + }, + about: { + version: 'Version', + checkUpdates: 'Nach Updates suchen', + upToDate: 'Hermes ist auf dem neuesten Stand.', + updateAvailable: 'Ein Update ist verfügbar.', + license: 'MIT-Lizenz', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'Version nicht verfügbar', + updates: 'Updates', + checkNow: 'Jetzt prüfen', + checking: 'Prüfe…', + seeWhatsNew: 'Neuigkeiten anzeigen', + releaseNotes: 'Versionshinweise', + autoUpdates: 'Automatische Updates', + autoUpdatesDesc: 'Hermes prüft automatisch im Hintergrund nach Updates und benachrichtigt dich, wenn eins bereit ist.', + selfUpdateUnsupported: 'Dieser Build kann sich nicht selbst aus der App heraus aktualisieren.', + cannotReachServer: 'Der Update-Server konnte nicht erreicht werden.', + installingUpdate: 'Ein Update wird gerade installiert.', + count => `Ein neues Update ist bereit (${count} Änderung enthalten).`, + count => `Ein neues Update ist bereit (${count} Änderungen enthalten).`, + onLatest: 'Du bist auf der neuesten Version.', + tapCheckNow: 'Tippe auf „Jetzt prüfen", um nach Updates zu suchen.', + time => `Zuletzt geprüft ${time}`, + justNow: 'gerade eben', + never: 'nie', + count => `vor ${count} Min.`, + count => `vor ${count} Std.`, + count => `vor ${count} Tagen`, + (branch, sha) => `Branch ${branch} · Commit ${sha}`, + }, + keys: { + title: 'API-Schlüssel', + noKeys: 'Keine API-Schlüssel konfiguriert.', + addKey: 'Schlüssel hinzufügen', + loading: 'Lade API-Schlüssel und Zugangsdaten…', + docs: 'Dokumentation', + openDocs: 'Anbieter-Dokumentation öffnen', + hideValue: 'Wert verbergen', + revealValue: 'Wert anzeigen', + set: 'Gesetzt', + notSet: 'Nicht gesetzt', + replace: 'Ersetzen', + replaceValue: 'Aktuellen Wert ersetzen', + enterValue: 'Wert eingeben', + saving: 'Speichern', + save: 'Speichern', + cancel: 'Abbrechen', + clearValue: 'Wert löschen', + (count, total) => `${count} von ${total} konfiguriert`, + (count, total) => `${count} von ${total} gesetzt`, + count => `${count} gesetzt`, + count => `${count} Schlüssel`, + otherProviders: 'Andere Anbieter', + categoryTools: 'Tools', + categoryMessaging: 'Messaging', + categorySettings: 'Einstellungen', + openProviderDocs: 'Anbieter-Dokumentation öffnen', + showAdvanced: 'Erweitert anzeigen', + loadFailed: 'API-Schlüssel konnten nicht geladen werden', + credentialSaved: 'Zugangsdaten gespeichert', + credentialRemoved: 'Zugangsdaten entfernt', + }, + config: { + title: 'Konfiguration', + edit: 'Konfiguration bearbeiten', + reload: 'Konfiguration neu laden', + notSet: 'Nicht gesetzt', + commaSeparated: 'kommagetrennte Werte', + on: 'An', + off: 'Aus', + none: 'Keine', + emptyOption: '(keine)', + loading: 'Lade Hermes-Konfiguration…', + noMatching: 'Keine passenden Einstellungen', + noMatchingDesc: 'Versuche einen anderen Suchbegriff oder wähle einen anderen Bereich.', + count => `${count} Ergebnis`, + count => `${count} Ergebnisse`, + saving: 'Speichere…', + label: { + defaultModel: 'Standardmodell', + contextWindow: 'Kontextfenster', + fallbackModels: 'Fallback-Modelle', + enabledToolsets: 'Aktivierte Toolsets', + timezone: 'Zeitzone', + personality: 'Persönlichkeit', + reasoningBlocks: 'Reasoning-Blöcke', + maxAgentSteps: 'Max. Agent-Schritte', + imageAttachments: 'Bildanhänge', + workingDirectory: 'Arbeitsverzeichnis', + executionBackend: 'Ausführungs-Backend', + commandTimeout: 'Befehls-Timeout', + persistentShell: 'Persistente Shell', + envPassthrough: 'Umgebungsvariablen-Durchleitung', + fileReadLimit: 'Datei-Lese-Limit', + terminalOutputLimit: 'Terminal-Ausgabe-Limit', + filePageLimit: 'Datei-Seiten-Limit', + lineLengthLimit: 'Zeilenlängen-Limit', + codeExecutionMode: 'Code-Ausführungsmodus', + approvalMode: 'Genehmigungsmodus', + approvalTimeout: 'Genehmigungs-Timeout', + confirmMcpReloads: 'MCP-Neuladen bestätigen', + commandAllowlist: 'Befehls-Allowlist', + redactSecrets: 'Geheimnisse schwärzen', + allowPrivateUrls: 'Private URLs erlauben', + browserPrivateUrls: 'Browser für private URLs', + localBrowserForPrivateUrls: 'Lokaler Browser für private URLs', + fileCheckpoints: 'Datei-Checkpoints', + checkpointLimit: 'Checkpoint-Limit', + voiceShortcut: 'Sprach-Shortcut', + maxRecordingLength: 'Max. Aufnahmelänge', + readResponsesAloud: 'Antworten vorlesen', + speechToText: 'Sprache-zu-Text', + speechToTextProvider: 'Sprache-zu-Text-Anbieter', + localTranscriptionModel: 'Lokales Transkriptionsmodell', + transcriptionLanguage: 'Transkriptionssprache', + elevenlabsSttModel: 'ElevenLabs-STT-Modell', + elevenlabsLanguage: 'ElevenLabs-Sprache', + tagAudioEvents: 'Audio-Ereignisse taggen', + speakerDiarization: 'Sprecher-Diarisierung', + textToSpeechProvider: 'Text-zu-Sprache-Anbieter', + edgeVoice: 'Edge-Stimme', + openaiTtsModel: 'OpenAI-TTS-Modell', + openaiVoice: 'OpenAI-Stimme', + elevenlabsVoice: 'ElevenLabs-Stimme', + elevenlabsModel: 'ElevenLabs-Modell', + persistentMemory: 'Persistenter Speicher', + userProfile: 'Benutzerprofil', + memoryBudget: 'Speicher-Budget', + profileBudget: 'Profil-Budget', + memoryProvider: 'Speicher-Anbieter', + contextEngine: 'Kontext-Engine', + autoCompression: 'Auto-Kompression', + compressionThreshold: 'Kompressions-Schwelle', + compressionTarget: 'Kompressions-Ziel', + protectedRecentMessages: 'Geschützte aktuelle Nachrichten', + apiRetries: 'API-Wiederholungen', + serviceTier: 'Service-Stufe', + toolUseEnforcement: 'Tool-Nutzungs-Erzwingung', + subagentModel: 'Subagent-Modell', + subagentProvider: 'Subagent-Anbieter', + subagentTurnLimit: 'Subagent-Turn-Limit', + parallelSubagents: 'Parallele Subagents', + subagentTimeout: 'Subagent-Timeout', + subagentReasoningEffort: 'Subagent-Reasoning-Aufwand', + }, + desc: { + defaultModel: 'Wird für neue Chats verwendet, es sei denn, du wählst ein anderes Modell im Composer.', + contextWindow: 'Auf 0 lassen, um das erkannte Kontextfenster des ausgewählten Modells zu verwenden.', + fallbackModels: 'Backup-Anbieter:Modell-Einträge, die versucht werden, wenn das Standardmodell ausfällt.', + personality: 'Standard-Assistentenstil für neue Sitzungen.', + timezone: 'Wird verwendet, wenn Hermes lokalen Zeitkontext benötigt. Leer lassen für System-Zeitzone.', + reasoningBlocks: 'Reasoning-Abschnitte anzeigen, wenn das Backend sie bereitstellt.', + imageAttachments: 'Steuert, wie Bildanhänge an das Modell gesendet werden.', + workingDirectory: 'Standard-Projektordner für Tool- und Terminal-Arbeit.', + codeExecutionMode: 'Wie strikt die Code-Ausführung auf das aktuelle Projekt beschränkt ist.', + persistentShell: 'Shell-Zustand zwischen Befehlen beibehalten, wenn das Backend dies unterstützt.', + envPassthrough: 'Umgebungsvariablen, die an die Tool-Ausführung durchgereicht werden.', + fileReadLimit: 'Maximale Zeichen, die Hermes aus einer Dateianfrage lesen kann.', + approvalMode: 'Wie Hermes Befehle behandelt, die explizite Genehmigung erfordern.', + approvalTimeout: 'Wie lange Genehmigungsaufforderungen warten, bevor sie ablaufen.', + redactSecrets: 'Erkannte Geheimnisse nach Möglichkeit vor modellsichtbaren Inhalten verbergen.', + fileCheckpoints: 'Rollback-Snapshots vor Dateibearbeitungen erstellen.', + persistentMemory: 'Dauerhafte Erinnerungen speichern, die zukünftigen Sitzungen helfen können.', + userProfile: 'Ein kompaktes Profil der Benutzereinstellungen pflegen.', + contextEngine: 'Strategie zur Verwaltung langer Unterhaltungen nahe dem Kontextlimit.', + autoCompression: 'Älteren Kontext zusammenfassen, wenn Unterhaltungen groß werden.', + readResponsesAloud: 'Assistentenantworten automatisch vorlesen.', + speechToText: 'Lokale oder anbieter-gestützte Sprach-Transkription aktivieren.', + elevenlabsLanguage: 'Optionaler ISO-639-3-Sprachcode. Leer lassen für Auto-Erkennung durch ElevenLabs.', + maxAgentSteps: 'Obergrenze für Tool-Aufruf-Turns, bevor Hermes einen Lauf stoppt.', + }, + }, + gateway: { + title: 'Gateway', + start: 'Gateway starten', + stop: 'Gateway stoppen', + restart: 'Gateway neustarten', + running: 'Läuft', + stopped: 'Gestoppt', + loading: 'Lade Gateway-Einstellungen…', + unavailable: 'Gateway-Einstellungen nicht verfügbar', + unavailableDesc: 'Die Desktop-IPC-Brücke stellt keine Gateway-Einstellungen bereit.', + connection: 'Gateway-Verbindung', + envOverride: 'env-Override', + desc: 'Hermes Desktop startet standardmäßig ein eigenes lokales Gateway. Verwende ein Remote-Gateway, wenn diese App ein bereits laufendes Hermes-Backend auf einem anderen Rechner oder hinter einem vertrauenswürdigen Proxy steuern soll.', + envOverrideTitle: 'Umgebungsvariablen steuern diese Desktop-Sitzung.', + (urlVar, tokenVar) => `Entferne ${urlVar} und ${tokenVar}, um die gespeicherte Einstellung unten zu verwenden.`, + localTitle: 'Lokales Gateway', + localDesc: 'Starte ein privates Hermes-Backend auf localhost. Dies ist die Standardeinstellung und funktioniert offline.', + remoteTitle: 'Remote-Gateway', + remoteDesc: 'Verbinde diese Desktop-Oberfläche mit einem entfernten Hermes-Backend über dessen Sitzungs-Token.', + remoteUrl: 'Remote-URL', + remoteUrlDesc: 'Basis-URL für das Remote-Dashboard-Backend. Pfad-Präfixe werden unterstützt, z.B. /hermes.', + remoteUrlPlaceholder: 'https://gateway.example.com/hermes', + sessionToken: 'Sitzungs-Token', + sessionTokenDesc: 'Der Dashboard-Sitzungs-Token für REST- und WebSocket-Zugriff. Leer lassen, um den gespeicherten Token beizubehalten.', + sessionTokenPlaceholder: 'Sitzungs-Token einfügen', + preview => `Vorhandener Token ${preview}`, + tokenSaved: 'gespeichert', + testRemote: 'Remote testen', + saveRestart: 'Für nächsten Neustart speichern', + saveReconnect: 'Speichern und neu verbinden', + diagnostics: 'Diagnose', + diagnosticsDesc: 'desktop.log im Dateimanager anzeigen – nützlich, wenn das Gateway nicht startet.', + openLogs: 'Logs öffnen', + connected: 'Verbunden', + connecting: 'Verbinde', + disconnected: 'Getrennt', + inferenceReady: 'Inferenz bereit', + inferenceNotReady: 'Inferenz nicht bereit', + checkingInference: 'Prüfe Inferenz', + openSystemPanel: 'System-Panel öffnen', + connectionLabel: 'Verbindung:', + recentActivity: 'Aktuelle Aktivität', + viewAllLogs: 'Alle Logs anzeigen →', + messagingPlatforms: 'Messaging-Plattformen', + label: 'Gateway', + inferenceStatus: 'Gateway-Inferenzstatus', + enterUrlFirst: 'Gib zuerst eine Remote-URL und einen Sitzungs-Token ein, bevor du wechselst', + enterUrlFirstTest: 'Gib zuerst eine Remote-URL und einen Sitzungs-Token ein, bevor du testest', + }, + sessions: { + title: 'Sitzungen', + search: 'Sitzungen durchsuchen…', + noResults: 'Keine Sitzungen gefunden.', + export: 'Exportieren', + delete: 'Sitzung löschen', + loading: 'Lädt…', + defaultProjectDir: 'Standard-Projektverzeichnis', + defaultProjectDirDesc: 'Neue Sitzungen starten in diesem Ordner, sofern du keinen anderen wählst. Leer lassen, um dein Home-Verzeichnis zu verwenden.', + fallback => `Standard: ${fallback}.`, + notSet: 'Nicht gesetzt', + change: 'Ändern', + choose: 'Auswählen', + clear: 'Löschen', + archivedTitle: 'Archivierte Sitzungen', + archivedDesc: 'Archivierte Chats sind in der Seitenleiste ausgeblendet, behalten aber alle Nachrichten. Strg/⌘-Klick auf einen Chat in der Seitenleiste, um ihn zu archivieren.', + nothingArchived: 'Nichts archiviert', + noSearchMatch: 'Keine archivierten Chats entsprechen deiner Suche.', + archiveToHide: 'Archiviere einen Chat, um ihn hier auszublenden.', + unarchive: 'Archivierung aufheben', + deletePermanently: 'Endgültig löschen', + count => `${count} Nachrichten`, + new: 'Neue Sitzung', + running: 'Sitzung läuft', + actions: 'Sitzungsaktionen', + reorder: 'Neu anordnen', + pin: 'Anheften', + unpin: 'Lösen', + copyId: 'ID kopieren', + rename: 'Umbenennen', + archive: 'Archivieren', + renameDialog: 'Sitzung umbenennen', + renameDesc: 'Gib diesem Chat einen einprägsamen Titel. Leer lassen zum Löschen.', + untitled: 'Unbenannte Sitzung', + renamed: 'Umbenannt', + renameFailed: 'Umbenennung fehlgeschlagen', + pinned: 'Angeheftet', + results: 'Ergebnisse', + allPinned: 'Alles hier ist angeheftet. Löse einen Chat, um ihn in den letzten anzuzeigen.', + pinHint: 'Shift-Klick auf einen Chat zum Anheften · Ziehen zum Neuanordnen', + loadMore: 'Mehr laden', + noWorkspace: 'Kein Arbeitsbereich', + ungroup: 'Sitzungen als einzelne Liste anzeigen', + groupByWorkspace: 'Sitzungen nach Arbeitsbereich gruppieren', + loadStep: 'Laden', + moreLabel: 'mehr', + nothingArchivedTitle: 'Nichts archiviert', + deletePermanentlyTitle: 'Endgültig löschen', + defaultProjectDirTitle: 'Standard-Projektverzeichnis', + loadingArchived: 'Lade archivierte Sitzungen…', + restored: 'Wiederhergestellt', + projectDirUpdated: 'Standard-Projektverzeichnis aktualisiert', + loadFailed: 'Archivierte Sitzungen konnten nicht geladen werden', + unarchiveFailed: 'Archivierung aufheben fehlgeschlagen', + deleteFailed: 'Löschen fehlgeschlagen', + archiveHint: 'Archiviere einen Chat, um ihn hier auszublenden.', + updateDirFailed: 'Standardverzeichnis konnte nicht aktualisiert werden', + clearDirFailed: 'Standardverzeichnis konnte nicht gelöscht werden', + }, + mcp: { + title: 'MCP-Server', + addServer: 'Server hinzufügen', + noServers: 'Keine MCP-Server konfiguriert.', + loading: 'Lade MCP-Server…', + servers: 'MCP-Server', + count => `${count} konfiguriert`, + newServer: 'Neuer Server', + reloadMCP: 'MCP neu laden', + reloading: 'Lade neu...', + noServersDesc: 'Füge einen STDIO- oder HTTP-Server hinzu, um MCP-Tools bereitzustellen.', + name: 'Name', + namePlaceholder: 'dateisystem', + serverJSON: 'Server-JSON', + editServer: 'Server bearbeiten', + saveServer: 'Server speichern', + saving: 'Speichere...', + remove: 'Entfernen', + disabled: 'deaktiviert', + nameRequired: 'Name erforderlich', + nameRequiredDesc: 'Gib diesem MCP-Server einen Konfigurationsschlüssel.', + invalidJson: 'Server-Konfiguration muss ein JSON-Objekt sein', + invalidJsonDesc: 'Ungültiges MCP-JSON', + saved: 'MCP-Server gespeichert', + name => `${name} wird nach MCP-Neuladen wirksam.`, + saveFailed: 'Speichern fehlgeschlagen', + removeFailed: 'Entfernen fehlgeschlagen', + gatewayUnavailable: 'Gateway nicht verfügbar', + gatewayUnavailableDesc: 'Verbinde das Gateway erneut, bevor du MCP neu lädst.', + reloadedTitle: 'MCP-Tools neu geladen', + reloadedDesc: 'Neue Tool-Schemas gelten für neue Turns.', + reloadFailed: 'MCP-Neuladen fehlgeschlagen', + giveConfigKey: 'Gib diesem MCP-Server einen Konfigurationsschlüssel.', + reconnectGateway: 'Verbinde das Gateway erneut, bevor du MCP neu lädst.', + newSchemas: 'Neue Tool-Schemas gelten für neue Turns.', + loadingServers: 'Lade MCP-Server...', + serverName: 'Name', + serversTitle: 'MCP-Server', + noServersTitle: 'Keine MCP-Server', + failedToLoad: 'MCP-Konfiguration konnte nicht geladen werden', + invalidJsonShort: 'Ungültiges MCP-JSON', + serverSaved: 'MCP-Server gespeichert', + toolsReloaded: 'MCP-Tools neu geladen', + emptyDesc: 'Füge einen STDIO- oder HTTP-Server hinzu, um MCP-Tools bereitzustellen.', + }, + tools: { + title: 'Tools & Skills', + noTools: 'Keine Tools verfügbar.', + }, + nav: { + home: 'Start', + chat: 'Chat', + settings: 'Einstellungen', + files: 'Dateien', + terminal: 'Terminal', + }, + header: { + search: 'Suchen oder Befehl eingeben…', + }, + model: { + auxTask: { + vision: 'Vision', + visionHint: 'Bildanalyse', + web_extract: 'Web-Extrakt', + web_extractHint: 'Seitenzusammenfassung', + compression: 'Kompression', + compressionHint: 'Kontext-Verdichtung', + session_search: 'Sitzungssuche', + session_searchHint: 'Suchanfragen', + skills_hub: 'Skills-Hub', + skills_hubHint: 'Skill-Suche', + approval: 'Genehmigung', + approvalHint: 'Intelligente Auto-Genehmigung', + mcp: 'MCP', + mcpHint: 'MCP-Tool-Routing', + title_generation: 'Titelgenerierung', + title_generationHint: 'Sitzungstitel', + curator: 'Kurator', + curatorHint: 'Skill-Nutzungs-Überprüfung', + }, + mainModel: 'Hauptmodell', + mainDesc: 'Gilt für neue Sitzungen. Verwende die Modellauswahl im Composer, um das aktive Modell zu wechseln.', + providerPlaceholder: 'Anbieter', + modelPlaceholder: 'Modell', + apply: 'Anwenden', + applying: 'Wende an…', + auxiliaryModels: 'Hilfsmodelle', + auxiliaryDesc: 'Hilfsaufgaben laufen standardmäßig mit dem Hauptmodell. Weise einer Aufgabe ein eigenes Modell zu, um dies zu überschreiben.', + resetAllToMain: 'Alle auf Hauptmodell zurücksetzen', + setToMain: 'Auf Hauptmodell setzen', + change: 'Ändern', + cancel: 'Abbrechen', + autoUseMain: 'auto · Hauptmodell verwenden', + providerDefault: '(Anbieter-Standard)', + loading: 'Lade Modellkonfiguration…', + options: 'Optionen', + thinking: 'Nachdenken', + fast: 'Schnell', + effort: 'Aufwand', + noOptions: 'Keine Optionen für dieses Modell', + optionUpdateFailed: 'Modelloption-Update fehlgeschlagen', + fastModeUpdateFailed: 'Schnellmodus-Update fehlgeschlagen', + effortMinimal: 'Minimal', + effortLow: 'Niedrig', + effortMedium: 'Mittel', + effortHigh: 'Hoch', + effortMax: 'Maximal', + switch: 'Modell wechseln', + unknown: '(unbekannt)', + filterPlaceholder: 'Anbieter und Modelle filtern...', + persistGlobal: 'Global speichern', + persistGlobalSession: 'Global speichern (sonst nur diese Sitzung)', + couldNotLoad: 'Modelle konnten nicht geladen werden', + proLockedDesc: 'Pro-Modelle benötigen ein kostenpflichtiges Nous-Abonnement.', + priceTooltip: 'Eingabe-/Ausgabepreis pro Million Token', + freePrice: 'Kostenlos', + currentLabel: 'aktuell:', + addProviderBtn: 'Anbieter hinzufügen', + }, + updates: { + checking: 'Suche nach Updates…', + available: 'Update verfügbar', + downloading: 'Lade herunter…', + installing: 'Installiere…', + restart: 'Neustarten zum Aktualisieren', + stageGettingReady: 'Vorbereitung…', + stageDownloading: 'Herunterladen…', + stageAlmostThere: 'Fast geschafft…', + stageFinishingUp: 'Abschluss…', + stageRestarting: 'Starte Hermes neu…', + stageManual: 'Update über dein Terminal', + stageError: 'Update pausiert', + updatingHermes: 'Aktualisiere Hermes…', + lookingForUpdates: 'Suche nach Updates…', + couldntCheck: 'Konnte nicht nach Updates suchen', + updateNotAvailable: 'Update nicht verfügbar', + checkConnection: 'Überprüfe deine Verbindung und versuche es erneut.', + onLatest: 'Du verwendest die neueste Version.', + allSet: 'Alles bereit', + newUpdateAvailable: 'Neues Update verfügbar', + readyToInstall: 'Eine neue Version von Hermes ist zur Installation bereit.', + updateNow: 'Jetzt aktualisieren', + maybeLater: 'Vielleicht später', + count => `+ ${count} weitere Änderung enthalten.`, + count => `+ ${count} weitere Änderungen enthalten.`, + updateFromTerminal: 'Update über dein Terminal', + terminalDesc: 'Du hast Hermes von der Kommandozeile installiert, daher laufen Updates auch dort. Füge dies in dein Terminal ein:', + copied: 'Kopiert', + copy: 'Kopieren', + pickupNewVersion: 'Hermes übernimmt die neue Version beim nächsten Start.', + done: 'Fertig', + updaterDesc: 'Der Hermes-Updater übernimmt in einem eigenen Fenster und öffnet Hermes erneut, wenn er fertig ist.', + closeToApply: 'Hermes wird geschlossen, um das Update anzuwenden.', + updateDidntFinish: 'Update wurde nicht abgeschlossen', + nothingLost: 'Keine Sorge – nichts ist verloren. Du kannst es jetzt erneut versuchen.', + notNow: 'Nicht jetzt', + }, + errors: { + generic: 'Etwas ist schiefgelaufen.', + notFound: 'Seite nicht gefunden.', + noPermission: 'Du hast keine Berechtigung, darauf zuzugreifen.', + somethingBroke: 'Etwas ist in der Oberfläche kaputtgegangen', + viewCrashedDesc: 'Die Ansicht hat einen unerwarteten Fehler gefunden. Deine Chats und Einstellungen sind sicher – versuche es erneut oder lade das Fenster neu.', + noProviders: 'Keine authentifizierten Anbieter.', + }, + tool: { + toolCall: 'Tool-Aufruf', + result: 'Ergebnis', + error: 'Fehler', + timeout: 'Zeitüberschreitung', + cancelled: 'Abgebrochen', + running: 'Läuft', + recovered: 'Wiederhergestellt', + done: 'Fertig', + output: 'Tool-Ausgabe', + searchResults: 'Suchergebnisse', + rawResponse: 'Rohantwort', + stdout: 'Standardausgabe', + stderr: 'Standardfehlerausgabe', + copyActivity: 'Aktivität kopieren', + recoveredAfter: 'Nach 1 fehlgeschlagenen Schritt wiederhergestellt', + count => `Nach ${count} fehlgeschlagenen Schritten wiederhergestellt`, + oneStepFailed: '1 Schritt fehlgeschlagen', + count => `${count} Schritte fehlgeschlagen`, + }, + composer: { + startingHermes: 'Starte Hermes...', + sendFollowUp: 'Nachfrage senden', + message: 'Nachricht', + editingQueued: 'Bearbeite wartenden Turn im Composer', + attach: 'Anhängen', + files: 'Dateien…', + folder: 'Ordner…', + images: 'Bilder…', + pasteImage: 'Bild einfügen', + url: 'URL…', + promptSnippets: 'Prompt-Schnipsel', + promptSnippetsDesc: 'Wähle einen Starter-Prompt zum Einfügen in den Composer.', + voiceStart: 'Sprachunterhaltung starten', + queue: 'Nachricht in Warteschlange', + speaking: 'Spricht', + transcribing: 'Transkribiert', + muted: 'Stummgeschaltet', + listening: 'Hört zu', + unmuteMic: 'Mikrofon einschalten', + muteMic: 'Mikrofon stummschalten', + stopListening: 'Zuhören beenden und senden', + endVoice: 'Sprachunterhaltung beenden', + end: 'Beenden', + stopDictation: 'Diktat beenden', + transcribingDictation: 'Transkribiere Diktat', + voiceDictation: 'Sprachdiktat', + addContext: 'Kontext hinzufügen', + }, + models: { + title: 'Modelle', + search: 'Modelle durchsuchen', + addProvider: 'Anbieter hinzufügen…', + }, + install: { + title: 'Hermes benötigt eine einmalige Installation', + desc: 'Automatische Erstinstallation ist nicht verfügbar auf', + descEnd: 'noch. Öffne das Terminal und führe den folgenden Befehl aus, dann starte die App neu. Nachfolgende Starts überspringen diesen Schritt.', + installCommand: 'Installationsbefehl', + copyCommand: 'Befehl kopieren', + viewDocs: 'Installationsdokumentation anzeigen', + willInstallTo: 'Wird installiert nach', + iRanIt: 'Ich habe es ausgeführt – erneut versuchen', + failed: 'Installation fehlgeschlagen', + settingUp: 'Richte Hermes Agent ein', + finishingUp: 'Fertigstellung', + failedDesc: 'Einer der Installationsschritte ist fehlgeschlagen. Unter Windows kann das passieren, wenn eine andere Hermes-CLI- oder Desktop-Instanz läuft. Beende alle laufenden Hermes-Instanzen und versuche es erneut. Details unten oder im Desktop-Log für das vollständige Protokoll.', + setupDesc: 'Dies ist eine einmalige Einrichtung. Der Hermes-Installer lädt Abhängigkeiten herunter und konfiguriert deinen Rechner. Nachfolgende Starts überspringen diesen Schritt.', + fetchingManifest: 'Lade Installations-Manifest...', + error: 'Fehler', + showOutput: 'Installer-Ausgabe anzeigen', + hideOutput: 'Installer-Ausgabe ausblenden', + noOutput: 'Noch keine Ausgabe.', + cancelInstall: 'Installation abbrechen', + cancelling: 'Breche ab...', + copyOutput: 'Ausgabe kopieren', + copied: 'Kopiert!', + reloadRetry: 'Neu laden und erneut versuchen', + saveLogs: 'Vollständiges Protokoll gespeichert unter', + stepsComplete: 'Schritte abgeschlossen', + nowLabel: 'jetzt', + line: 'Zeile', + lines: 'Zeilen', + }, + previewConsole: { + resizeLabel: 'Vorschau-Konsole skalieren', + noMessages: 'Noch keine Konsolen-Nachrichten.', + }, + boot: { + ipcUnavailable: 'Desktop-IPC-Brücke ist nicht verfügbar.', + backendExited: 'Hermes-Hintergrundprozess wurde während des Starts beendet.', + backendStoppedTitle: 'Backend gestoppt', + backendStoppedMessage: 'Hermes-Hintergrundprozess wurde beendet.', + startingConnection: 'Starte Desktop-Verbindung', + connectingGateway: 'Verbinde Live-Desktop-Gateway', + loadingConfig: 'Lade Hermes-Einstellungen', + loadingSessions: 'Lade letzte Sitzungen', + desktopBootFailed: 'Desktop-Start fehlgeschlagen', + couldNotStart: 'Hermes konnte nicht starten', + recoveryDesc: 'Das Hintergrund-Gateway ist nicht gestartet. Versuche einen der Wiederherstellungsschritte unten – nichts hier löscht deine Chats oder Einstellungen.', + retry: 'Wiederholen', + repairInstall: 'Installation reparieren', + useLocalGateway: 'Lokales Gateway verwenden', + openLogs: 'Logs öffnen', + repairHint: 'Reparieren führt den Installer erneut aus und kann auf einem frischen Rechner einige Minuten dauern.', + showLogs: 'Aktuelle Logs anzeigen', + hideLogs: 'Aktuelle Logs ausblenden', + }, + urlDialog: { + title: 'URL anhängen', + description: 'Hermes ruft die Seite ab und fügt sie als Kontext für diesen Turn hinzu.', + placeholder: 'https://example.com/post', + hint: 'Gib die vollständige URL ein, z.B.', + attach: 'Anhängen', + }, + titlebar: { + hideSidebar: 'Seitenleiste ausblenden', + showSidebar: 'Seitenleiste anzeigen', + search: 'Suchen', + searchTitle: 'Sitzungen, Ansichten und Aktionen durchsuchen', + hideRightSidebar: 'Rechte Seitenleiste ausblenden', + showRightSidebar: 'Rechte Seitenleiste anzeigen', + unmuteHaptics: 'Haptik einschalten', + muteHaptics: 'Haptik ausschalten', + openSettings: 'Einstellungen öffnen', + profiles: 'Profile', + profilesDesc: 'Erweiterte Hermes-Umgebungen für separate Personas, Konfiguration, Skills und SOUL.md.', + manageProfiles: 'Profile verwalten', + language: 'Sprache', + languageDesc: 'Wähle eine Anzeigesprache für die Oberfläche.', + }, + pagination: { + ariaLabel: 'Seitennummerierung', + prevAria: 'Zur vorherigen Seite', + prev: 'Zurück', + nextAria: 'Zur nächsten Seite', + next: 'Weiter', + }, + bootstrap: { + pending: 'Ausstehend', + running: 'Installiere', + done: 'Fertig', + skipped: 'Übersprungen', + failed: 'Fehlgeschlagen', + }, + sidebar: { + sheetTitle: 'Seitenleiste', + sheetDesc: 'Zeigt die mobile Seitenleiste an.', + toggle: 'Seitenleiste umschalten', + }, + clarify: { + hermesIsAsking: 'Hermes fragt', + loadingQuestion: 'Lade Frage…', + otherTypeAnswer: 'Anderes (Antwort eingeben)', + placeholderAnswer: 'Antwort eingeben…', + cmdEnterToSend: '⌘/Strg + Enter zum Senden', + back: 'Zurück', + skip: 'Überspringen', + couldNotSend: 'Konnte Klärungsantwort nicht senden', + n => `1–${n} zum Auswählen`, + }, + intro: { + fallback1h: 'Was bewegen wir heute?', + fallback1b: 'Schick einen Bug, Branch, Plan oder eine grobe Idee. Ich schaue mir das Repo an und mache den nächsten konkreten Schritt daraus.', + fallback2h: 'Was beschäftigt dich?', + fallback2b: 'Bring den Code, die Frage oder den hängenden Teil. Ich lese die Lage, bevor ich Änderungen mache.', + fallback3h: 'Was soll Hermes sich ansehen?', + fallback3b: 'Schick die Aufgabe, den fehlerhaften Pfad oder den halbfertigen Plan. Ich helfe, es in die Tat umzusetzen.', + fallback4h: 'Wo sollen wir anfangen?', + fallback4b: 'Bring das Problem, Ziel oder die Datei. Ich schaue es mir zuerst an und halte den nächsten Schritt konkret.', + fallback5h: 'Was braucht Aufmerksamkeit?', + fallback5b: 'Schick den Kontext, den du hast. Ich helfe, ihn in einen Plan oder eine Lösung zu sortieren.', + personality: { + label => `${label}-Modus ist an. Woran sollen wir arbeiten?`, + body1: 'Schick die Aufgabe, Datei oder grobe Idee. Ich verwende deine konfigurierte Stimme und halte die Arbeit in diesem Repo verankert.', + label => `Was muss ${label} Hermes sehen?`, + body2: 'Bring den Kontext oder den hängenden Teil. Ich passe mich deiner konfigurierten Persönlichkeit an.', + label => `${label}-Modus ist bereit.`, + body3: 'Schick das Problem, die Datei oder Idee. Ich folge der von dir konfigurierten Persönlichkeit.', + label => `Was soll ${label} Hermes angehen?`, + body4: 'Wirf die Aufgabe hier rein. Ich halte die Arbeit im Repo verankert.', + heading5: 'Wo sollen wir beginnen?', + label => `Gib mir den Kontext und ich antworte im ${label}-Modus.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'Keine Artefakte gefunden', + }, + agents: { + spawnTree: 'Spawn-Baum', + liveSubagentActivity: 'Live-Subagent-Aktivität für den aktuellen Turn.', + noLiveSubagents: 'Keine Live-Subagents', + files: 'Dateien', + label: 'Agents', + open: 'Agents öffnen', + close: 'Agents schließen', + subagent: 'Subagent', + subagents: 'Subagents', + failed: 'fehlgeschlagen', + running: 'läuft', + }, + provider: { + desc: { + nousPortal: 'Nous Portal Basis-URL-Override', + openRouter: 'OpenRouter API-Schlüssel (für Vision, Web-Scraping-Helfer und MoA)', + google: 'Google AI Studio API-Schlüssel (auch als GEMINI_API_KEY erkannt)', + gemini: 'GCP-Projekt-ID für kostenpflichtige Gemini-Tiers (Free-Tier wird automatisch bereitgestellt)', + anthropic: 'Anthropic API-Schlüssel', + deepseek: 'Benutzerdefinierte DeepSeek API-Basis-URL (erweitert)', + xai: 'xAI Basis-URL-Override', + huggingface: 'Hugging Face Inference Providers Basis-URL-Override', + kimi: 'Kimi / Moonshot China API-Schlüssel', + minimax: 'MiniMax (China) Basis-URL-Override', + minimaxCn: 'MiniMax China API-Schlüssel', + dashscope: 'Benutzerdefinierte DashScope Basis-URL (Standard: coding-intl OpenAI-kompatibler Endpunkt)', + glm: 'GLM API-Schlüssel (Z.AI)', + nvidia: 'NVIDIA NIM Basis-URL-Override (z.B. http://localhost:8000/v1 für lokales NIM)', + opencodeGo: 'OpenCode Go API-Schlüssel', + opencodeZen: 'OpenCode Zen API-Schlüssel', + xiaomi: 'Xiaomi MiMo Basis-URL-Override (Standard: https://api.xiaomimimo.com/v1)', + kiloCode: 'Kilo Code API-Schlüssel', + aiGateway: 'AI Gateway API-Schlüssel (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'ElevenLabs API-Schlüssel', + openai: 'OpenAI API-Schlüssel (für Sprachverarbeitung via Proxy)', + mistral: 'Mistral API-Schlüssel (für STT/TTS)', + groq: 'Groq API-Schlüssel (für STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'Firecrawl API-URL für selbst gehostete Instanzen (optional)', + fal: 'FAL_KEY', + nous: 'Nous Portal Basis-URL-Override', + openrouter: 'OpenRouter API-Schlüssel (für Vision, Web-Scraping-Helfer und MoA)', + lmstudio: 'Z.AI / GLM Basis-URL-Override', + zai: 'Azure Foundry Basis-URL (über \'hermes model\' für endpunktspezifische Konfiguration setzen)', + stepfun: 'StepFun Step Plan Basis-URL-Override', + arcee: 'Arcee AI Basis-URL-Override', + gmi: 'GMI Cloud Basis-URL-Override', + qwenportal: 'Qwen Portal Basis-URL-Override (Standard: https://portal.qwen.ai/v1)', + opencodego: 'OpenCode Go Basis-URL-Override', + ollamacloud: 'Ollama Cloud Basis-URL-Override (Standard: https://ollama.com/v1)', + awsbedrock: 'AWS Named Profile für Bedrock-Authentifizierung (aus ~/.aws/credentials)', + exa: 'Exa API-Schlüssel für KI-native Websuche und Inhalte', + parallel: 'Parallel API-Schlüssel für KI-native Websuche und Extraktion', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/es.ts b/apps/desktop/src/i18n/es.ts new file mode 100644 index 000000000000..61e31cc14986 --- /dev/null +++ b/apps/desktop/src/i18n/es.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const es = defineLocale( +{ + appearance: { + title: 'Apariencia', + description: 'Preferencias de visualización exclusivas del escritorio. El modo controla el brillo; el tema controla la paleta de acentos y el estilo de la superficie de chat.', + colorMode: 'Modo de color', + colorModeDesc: 'Elige un modo fijo o deja que Hermes siga la configuración de tu sistema.', + theme: { + nous: 'Nous', + nousDesc: 'Neutros cristal con acentos azul Nous', + midnight: 'Medianoche', + midnightDesc: 'Azul violeta profundo con acentos fríos', + ember: 'Ascua', + emberDesc: 'Carmesí cálido y bronce — ambiente de forja', + mono: 'Mono', + monoDesc: 'Escala de grises limpia — minimalista y enfocado', + cyberpunk: 'Cyberpunk', + cyberpunkDesc: 'Verde neón sobre negro — terminal matrix', + slate: 'Pizarra', + slateDesc: 'Azul pizarra frío — tema enfocado para desarrolladores', + }, + themeDesc: 'Elige una paleta de colores para la superficie de chat y los acentos de la interfaz.', + mode: { + light: 'Claro', + lightDesc: 'Superficies de escritorio brillantes', + dark: 'Oscuro', + darkDesc: 'Espacio de trabajo de bajo deslumbramiento', + system: 'Sistema', + systemDesc: 'Seguir la apariencia del SO', + }, + language: 'Idioma', + languageDesc: 'Elige el idioma de la interfaz o deja que Hermes siga la configuración de tu sistema.', + toolCallDisplay: 'Visualización de llamadas a herramientas', + toolCallDisplayDesc: 'Producto oculta los datos sin procesar de las herramientas; Técnico muestra entrada/salida completa.', + toolViewProduct: 'Producto', + toolViewTechnical: 'Técnico', + toolViewProductDesc: 'Actividad de herramientas amigable con resúmenes concisos.', + toolViewTechnicalDesc: 'Incluir argumentos/resultados sin procesar y detalles de bajo nivel.', + }, + settings: { + title: 'Configuración', + appearance: 'Apariencia', + model: 'Modelo', + gateway: 'Gateway', + sessions: 'Sesiones', + tools: 'Herramientas y skills', + section: { + chat: 'Chat', + workspace: 'Espacio de trabajo', + safety: 'Seguridad', + memory: 'Memoria y contexto', + voice: 'Voz', + advanced: 'Avanzado', + }, + mcp: 'Servidores MCP', + config: 'Configuración', + keys: 'Claves API', + about: 'Acerca de', + closeSettings: 'Cerrar configuración', + archivedChats: 'Chats archivados', + exportConfig: 'Exportar configuración', + importConfig: 'Importar configuración', + resetDefaults: 'Restablecer valores predeterminados', + llmProviders: 'Proveedores LLM', + searchPlaceholder: { + about: 'Acerca de Hermes Desktop', + config: 'Buscar ajustes…', + gateway: 'Conexión del Gateway…', + keys: 'Buscar claves API…', + mcp: 'Buscar servidores MCP…', + sessions: 'Buscar sesiones archivadas…', + }, + }, + chat: { + placeholder: 'Pregúntame lo que sea…', + send: 'Enviar', + stop: 'Detener', + thinking: 'Pensando…', + noSession: 'Sin sesión activa. Inicia una nueva conversación.', + loadingSession: 'Cargando sesión', + loadingResponse: 'Hermes está cargando una respuesta', + branchInNewChat: 'Ramificar en nuevo chat', + readAloud: 'Leer en voz alta', + preparingAudio: 'Preparando audio...', + stopReading: 'Dejar de leer', + editMessage: 'Editar mensaje', + editableCheckpoint: 'Punto de control editable', + restoreCheckpoint: 'Restaurar punto de control', + goForward: 'Avanzar', + restorePrevCheckpoint: 'Restaurar punto de control anterior', + restoreNextCheckpoint: 'Restaurar punto de control siguiente', + composerTip: 'Consejo: escribe @ para referenciar archivos en línea.', + reconnecting: 'Reconectando con Hermes…', + }, + commandCenter: { + title: 'Centro de mando', + noSessions: 'Aún no hay sesiones.', + loadingStatus: 'Cargando estado…', + recentLogs: 'Registros recientes', + dailyTokens: 'Tokens diarios', + noActivity: 'Sin actividad diaria.', + noModelUsage: 'Aún no hay uso de modelos.', + noSkillActivity: 'Aún no hay actividad de skills.', + sessionsPanel: 'Panel de sesiones', + systemPanel: 'Panel del sistema', + usagePanel: 'Panel de uso', + navigate: 'Navegar', + noMatchingResults: 'No se encontraron resultados coincidentes.', + noSessionsYet: 'Aún no hay sesiones.', + unpinSession: 'Desfijar sesión', + pinSession: 'Fijar sesión', + exportSession: 'Exportar sesión', + deleteSession: 'Eliminar sesión', + gatewayRunning: 'Gateway de mensajería en ejecución', + gatewayStopped: 'Gateway de mensajería detenido', + restartMsg: 'Reiniciar mensajería', + updateHermes: 'Actualizar Hermes', + noLogsLoaded: 'Aún no se han cargado registros.', + closeLabel: 'Cerrar centro de mando', + searchPlaceholder: 'Buscar sesiones, vistas y acciones', + statSessions: 'Sesiones', + statApiCalls: 'Llamadas API', + statTokens: 'Tokens entrada/salida', + statEstCost: 'Coste est.', + cost => `real ${cost}`, + loadingUsage: 'Cargando uso...', + count => `Sin uso en los últimos ${count} días.`, + retry: 'Reintentar', + tokenInput: 'entrada', + tokenOutput: 'salida', + noDailyActivity: 'Sin actividad diaria.', + topModels: 'Modelos principales', + topSkills: 'Skills principales', + actionsLabel: 'acciones', + systemRunning: 'en ejecución', + systemDone: 'hecho', + systemFailed: 'fallido', + open: 'Abrir centro de mando', + close: 'Cerrar centro de mando', + }, + common: { + loading: 'Cargando…', + save: 'Guardar', + cancel: 'Cancelar', + close: 'Cerrar', + delete: 'Eliminar', + confirm: 'Confirmar', + search: 'Buscar…', + clearSearch: 'Limpiar búsqueda', + copy: 'Copiar', + refresh: 'Actualizar', + moreActions: 'Más acciones', + tryAgain: 'Intentar de nuevo', + }, + onboarding: { + welcome: 'Bienvenido a Hermes', + getStarted: 'Comienza eligiendo un proveedor y un modelo.', + skip: 'Saltar', + continue: 'Continuar', + finish: 'Finalizar', + setupTitle: 'Vamos a configurar Hermes Agent', + setupDesc: 'Conecta un proveedor de modelos para empezar a chatear. La mayoría de opciones son con un solo clic.', + preparing: 'Iniciando Hermes…', + installing: 'Hermes está terminando la instalación. Esto suele tardar menos de un minuto en la primera ejecución.', + lookingUp: 'Buscando proveedores...', + otherProviders: 'Otros proveedores', + collapse: 'Contraer', + iHaveKey: 'Tengo una clave API', + recommended: 'Recomendado', + connected: 'Conectado', + backToSignIn: 'Volver a inicio de sesión', + getKey: 'Obtener clave', + pasteKey: 'Pegar clave API', + connect: 'Conectar', + connecting: 'Conectando', + copyCode: 'Copiar', + startSignIn: 'Iniciando sesión para', + verifyingCode: 'Verificando tu código con', + pickingModel: 'conectado. Eligiendo un modelo predeterminado...', + signInFailed: 'Error al iniciar sesión. Inténtalo de nuevo.', + pickDifferent: 'Elegir otro proveedor', + signInTitle: 'Iniciar sesión con', + step1: 'Hemos abierto', + step1End: 'en tu navegador.', + step2: 'Autoriza a Hermes allí.', + step3: 'Copia el código de autorización y pégalo abajo.', + pasteCode: 'Pegar código de autorización', + reopenAuth: 'Reabrir página de autorización', + cancel: 'Cancelar', + browserDesc: 'Hemos abierto', + browserDescEnd: 'en tu navegador. Autoriza a Hermes allí y te conectarás automáticamente — sin copiar ni pegar nada.', + waitingAuth: 'Esperando a que autorices...', + reopenSignIn: 'Reabrir página de inicio de sesión', + externalDesc: 'inicia sesión a través de su propia CLI. Ejecuta este comando en una terminal, luego vuelve y elige "Ya he iniciado sesión":', + iSignedIn: 'Ya he iniciado sesión', + enterCode: 'Hemos abierto', + enterCodeEnd: 'en tu navegador. Introduce este código allí:', + reopenVerification: 'Reabrir página de verificación', + defaultModel: 'Modelo predeterminado', + freeTier: 'Nivel gratuito', + pro: 'Pro', + change: 'Cambiar', + startChatting: 'Empezar a chatear', + docs: 'docs', + close: 'Cerrar', + savingError: 'No se pudo guardar la credencial.', + openRouter: 'OpenRouter', + }, + file: { + browser: 'Explorador de archivos', + noFiles: 'Aún no hay archivos.', + }, + terminal: { + title: 'Terminal', + newTab: 'Nueva pestaña', + closeTab: 'Cerrar pestaña', + }, + skills: { + title: 'Skills', + search: 'Buscar skills…', + noResults: 'No se encontraron skills.', + tools: 'Skills y herramientas', + }, + profiles: { + title: 'Perfiles', + noProfilesYet: 'Aún no hay perfiles.', + selectProfile: 'Selecciona un perfil para ver sus detalles.', + deleteProfile: '¿Eliminar perfil?', + soulMd: 'SOUL.md', + unsavedChanges: 'Cambios sin guardar', + newProfile: 'Nuevo perfil', + cloneFromDefault: 'Clonar desde predeterminado', + renameProfile: 'Renombrar perfil', + }, + cron: { + title: 'Tareas Cron', + noJobs: 'Sin tareas programadas.', + deleteCronJob: '¿Eliminar tarea cron?', + optional: 'Opcional', + label: 'Cron', + open: 'Abrir tareas cron', + }, + messaging: { + title: 'Mensajería', + recommended: 'Recomendado', + recommendedTelegram: 'Recomendado. IDs numéricos separados por comas de @userinfobot. Sin esto, cualquiera puede enviar MD a tu bot.', + recommendedDiscord: 'Recomendado. IDs de usuario de Discord separados por comas.', + recommendedSlack: 'Recomendado. IDs de usuario de Slack separados por comas.', + recommendedMattermost: 'Recomendado. IDs de usuario de Mattermost separados por comas.', + recommendedMatrix: 'Recomendado. IDs de usuario separados por comas en formato @usuario:servidor.', + recommendedSignal: 'Recomendado. Identificadores de Signal separados por comas.', + recommendedWhatsApp: 'Recomendado. Números de teléfono o IDs de WhatsApp separados por comas.', + gatewayStopped: 'Gateway de mensajería detenido', + getCredentials: 'Obtén tus credenciales', + required: 'Obligatorio', + unsavedChanges: 'Cambios sin guardar', + saved: 'Guardado', + }, + about: { + version: 'Versión', + checkUpdates: 'Buscar actualizaciones', + upToDate: 'Hermes está actualizado.', + updateAvailable: 'Hay una actualización disponible.', + license: 'Licencia MIT', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'Versión no disponible', + updates: 'Actualizaciones', + checkNow: 'Comprobar ahora', + checking: 'Comprobando…', + seeWhatsNew: 'Ver novedades', + releaseNotes: 'Notas de la versión', + autoUpdates: 'Actualizaciones automáticas', + autoUpdatesDesc: 'Hermes busca actualizaciones automáticamente en segundo plano y te avisa cuando hay una disponible.', + selfUpdateUnsupported: 'Esta versión no puede actualizarse desde dentro de la aplicación.', + cannotReachServer: 'No pudimos contactar con el servidor de actualizaciones.', + installingUpdate: 'Se está instalando una actualización.', + count => `Hay una nueva actualización lista (${count} cambio incluido).`, + count => `Hay una nueva actualización lista (${count} cambios incluidos).`, + onLatest: 'Estás en la última versión.', + tapCheckNow: 'Pulsa "Comprobar ahora" para buscar actualizaciones.', + time => `Última comprobación ${time}`, + justNow: 'justo ahora', + never: 'nunca', + count => `hace ${count} min`, + count => `hace ${count} horas`, + count => `hace ${count} días`, + (branch, sha) => `Rama ${branch} · Commit ${sha}`, + }, + keys: { + title: 'Claves API', + noKeys: 'No hay claves API configuradas.', + addKey: 'Añadir clave', + loading: 'Cargando claves API y credenciales…', + docs: 'Docs', + openDocs: 'Abrir documentación del proveedor', + hideValue: 'Ocultar valor', + revealValue: 'Mostrar valor', + set: 'Establecer', + notSet: 'No establecido', + replace: 'Reemplazar', + replaceValue: 'Reemplazar valor actual', + enterValue: 'Introducir valor', + saving: 'Guardando', + save: 'Guardar', + cancel: 'Cancelar', + clearValue: 'Limpiar valor', + (count, total) => `${count} de ${total} configuradas`, + (count, total) => `${count} de ${total} establecidas`, + count => `${count} establecidas`, + count => `${count} claves`, + otherProviders: 'Otros proveedores', + categoryTools: 'Herramientas', + categoryMessaging: 'Mensajería', + categorySettings: 'Configuración', + openProviderDocs: 'Abrir documentación del proveedor', + showAdvanced: 'Mostrar avanzado', + loadFailed: 'Error al cargar las claves API', + credentialSaved: 'Credencial guardada', + credentialRemoved: 'Credencial eliminada', + }, + config: { + title: 'Configuración', + edit: 'Editar configuración', + reload: 'Recargar configuración', + notSet: 'No establecido', + commaSeparated: 'valores separados por comas', + on: 'Activado', + off: 'Desactivado', + none: 'Ninguno', + emptyOption: '(ninguno)', + loading: 'Cargando configuración de Hermes…', + noMatching: 'Sin ajustes coincidentes', + noMatchingDesc: 'Prueba con otro término de búsqueda o elige otra sección.', + count => `${count} resultado`, + count => `${count} resultados`, + saving: 'Guardando…', + label: { + defaultModel: 'Modelo predeterminado', + contextWindow: 'Ventana de contexto', + fallbackModels: 'Modelos de respaldo', + enabledToolsets: 'Conjuntos de herramientas activados', + timezone: 'Zona horaria', + personality: 'Personalidad', + reasoningBlocks: 'Bloques de razonamiento', + maxAgentSteps: 'Pasos máx. del agente', + imageAttachments: 'Adjuntos de imagen', + workingDirectory: 'Directorio de trabajo', + executionBackend: 'Backend de ejecución', + commandTimeout: 'Tiempo de espera de comandos', + persistentShell: 'Shell persistente', + envPassthrough: 'Paso de variables de entorno', + fileReadLimit: 'Límite de lectura de archivos', + terminalOutputLimit: 'Límite de salida de terminal', + filePageLimit: 'Límite de página de archivo', + lineLengthLimit: 'Límite de longitud de línea', + codeExecutionMode: 'Modo de ejecución de código', + approvalMode: 'Modo de aprobación', + approvalTimeout: 'Tiempo de espera de aprobación', + confirmMcpReloads: 'Confirmar recargas MCP', + commandAllowlist: 'Lista blanca de comandos', + redactSecrets: 'Ocultar secretos', + allowPrivateUrls: 'Permitir URLs privadas', + browserPrivateUrls: 'URLs privadas del navegador', + localBrowserForPrivateUrls: 'Navegador local para URLs privadas', + fileCheckpoints: 'Puntos de control de archivos', + checkpointLimit: 'Límite de puntos de control', + voiceShortcut: 'Atajo de voz', + maxRecordingLength: 'Duración máx. de grabación', + readResponsesAloud: 'Leer respuestas en voz alta', + speechToText: 'Voz a texto', + speechToTextProvider: 'Proveedor de voz a texto', + localTranscriptionModel: 'Modelo de transcripción local', + transcriptionLanguage: 'Idioma de transcripción', + elevenlabsSttModel: 'Modelo STT de ElevenLabs', + elevenlabsLanguage: 'Idioma de ElevenLabs', + tagAudioEvents: 'Etiquetar eventos de audio', + speakerDiarization: 'Diarización de hablantes', + textToSpeechProvider: 'Proveedor de texto a voz', + edgeVoice: 'Voz de Edge', + openaiTtsModel: 'Modelo TTS de OpenAI', + openaiVoice: 'Voz de OpenAI', + elevenlabsVoice: 'Voz de ElevenLabs', + elevenlabsModel: 'Modelo de ElevenLabs', + persistentMemory: 'Memoria persistente', + userProfile: 'Perfil de usuario', + memoryBudget: 'Presupuesto de memoria', + profileBudget: 'Presupuesto de perfil', + memoryProvider: 'Proveedor de memoria', + contextEngine: 'Motor de contexto', + autoCompression: 'Compresión automática', + compressionThreshold: 'Umbral de compresión', + compressionTarget: 'Objetivo de compresión', + protectedRecentMessages: 'Mensajes recientes protegidos', + apiRetries: 'Reintentos de API', + serviceTier: 'Nivel de servicio', + toolUseEnforcement: 'Obligación de uso de herramientas', + subagentModel: 'Modelo de subagente', + subagentProvider: 'Proveedor de subagente', + subagentTurnLimit: 'Límite de turnos de subagente', + parallelSubagents: 'Subagentes paralelos', + subagentTimeout: 'Tiempo de espera de subagente', + subagentReasoningEffort: 'Esfuerzo de razonamiento del subagente', + }, + desc: { + defaultModel: 'Usado para nuevos chats a menos que elijas otro modelo en el compositor.', + contextWindow: 'Deja en 0 para usar la ventana de contexto detectada del modelo seleccionado.', + fallbackModels: 'Entradas proveedor:modelo de respaldo a probar si el modelo predeterminado falla.', + personality: 'Estilo de asistente predeterminado para nuevas sesiones.', + timezone: 'Usado cuando Hermes necesita contexto de hora local. En blanco usa la zona horaria del sistema.', + reasoningBlocks: 'Mostrar secciones de razonamiento cuando el backend las proporcione.', + imageAttachments: 'Controla cómo se envían los adjuntos de imagen al modelo.', + workingDirectory: 'Carpeta de proyecto predeterminada para trabajo con herramientas y terminal.', + codeExecutionMode: 'Con qué rigor se limita la ejecución de código al proyecto actual.', + persistentShell: 'Mantener el estado del shell entre comandos cuando el backend lo soporte.', + envPassthrough: 'Variables de entorno a pasar a la ejecución de herramientas.', + fileReadLimit: 'Máximo de caracteres que Hermes puede leer de una solicitud de archivo.', + approvalMode: 'Cómo maneja Hermes los comandos que necesitan aprobación explícita.', + approvalTimeout: 'Cuánto tiempo esperan las solicitudes de aprobación antes de agotarse.', + redactSecrets: 'Ocultar secretos detectados del contenido visible para el modelo cuando sea posible.', + fileCheckpoints: 'Crear instantáneas de reversión antes de editar archivos.', + persistentMemory: 'Guardar recuerdos duraderos que puedan ayudar en futuras sesiones.', + userProfile: 'Mantener un perfil compacto de preferencias de usuario.', + contextEngine: 'Estrategia para gestionar conversaciones largas cerca del límite de contexto.', + autoCompression: 'Resumir contexto antiguo cuando las conversaciones crecen mucho.', + readResponsesAloud: 'Leer automáticamente las respuestas del asistente en voz alta.', + speechToText: 'Activar transcripción de voz local o mediante proveedor.', + elevenlabsLanguage: 'Código de idioma ISO-639-3 opcional. En blanco deja que ElevenLabs lo detecte automáticamente.', + maxAgentSteps: 'Límite superior de turnos de llamadas a herramientas antes de que Hermes detenga una ejecución.', + }, + }, + gateway: { + title: 'Gateway', + start: 'Iniciar Gateway', + stop: 'Detener Gateway', + restart: 'Reiniciar Gateway', + running: 'En ejecución', + stopped: 'Detenido', + loading: 'Cargando configuración del Gateway…', + unavailable: 'Configuración del Gateway no disponible', + unavailableDesc: 'El puente IPC de escritorio no expone la configuración del Gateway.', + connection: 'Conexión del Gateway', + envOverride: 'anulación por variable de entorno', + desc: 'Hermes Desktop inicia su propio Gateway local por defecto. Usa un Gateway remoto cuando quieras que esta app controle un backend de Hermes ya en ejecución en otra máquina o detrás de un proxy de confianza.', + envOverrideTitle: 'Las variables de entorno están controlando esta sesión de escritorio.', + (urlVar, tokenVar) => `Desactiva ${urlVar} y ${tokenVar} para usar la configuración guardada abajo.`, + localTitle: 'Gateway local', + localDesc: 'Inicia un backend privado de Hermes en localhost. Es la opción por defecto y funciona sin conexión.', + remoteTitle: 'Gateway remoto', + remoteDesc: 'Conecta este shell de escritorio a un backend remoto de Hermes usando su token de sesión.', + remoteUrl: 'URL remota', + remoteUrlDesc: 'URL base del backend del panel remoto. Se admiten prefijos de ruta, por ejemplo /hermes.', + remoteUrlPlaceholder: 'https://gateway.ejemplo.com/hermes', + sessionToken: 'Token de sesión', + sessionTokenDesc: 'Token de sesión del panel usado para acceso REST y WebSocket. Déjalo en blanco para conservar el token guardado.', + sessionTokenPlaceholder: 'Pega el token de sesión', + preview => `Token existente ${preview}`, + tokenSaved: 'guardado', + testRemote: 'Probar remoto', + saveRestart: 'Guardar para el próximo reinicio', + saveReconnect: 'Guardar y reconectar', + diagnostics: 'Diagnóstico', + diagnosticsDesc: 'Mostrar desktop.log en tu gestor de archivos — útil cuando el Gateway no puede iniciarse.', + openLogs: 'Abrir registros', + connected: 'Conectado', + connecting: 'Conectando', + disconnected: 'Desconectado', + inferenceReady: 'Inferencia lista', + inferenceNotReady: 'Inferencia no lista', + checkingInference: 'Comprobando inferencia', + openSystemPanel: 'Abrir panel del sistema', + connectionLabel: 'Conexión:', + recentActivity: 'Actividad reciente', + viewAllLogs: 'Ver todos los registros →', + messagingPlatforms: 'Plataformas de mensajería', + label: 'Gateway', + inferenceStatus: 'Estado de inferencia del Gateway', + enterUrlFirst: 'Introduce una URL remota y un token de sesión antes de cambiar', + enterUrlFirstTest: 'Introduce una URL remota y un token de sesión antes de probar', + }, + sessions: { + title: 'Sesiones', + search: 'Buscar sesiones…', + noResults: 'No se encontraron sesiones.', + export: 'Exportar', + delete: 'Eliminar sesión', + loading: 'Cargando…', + defaultProjectDir: 'Directorio de proyecto predeterminado', + defaultProjectDirDesc: 'Las sesiones nuevas comienzan en esta carpeta a menos que elijas otra. Déjalo sin configurar para usar tu directorio personal.', + fallback => `Por defecto ${fallback}.`, + notSet: 'No establecido', + change: 'Cambiar', + choose: 'Elegir', + clear: 'Limpiar', + archivedTitle: 'Sesiones archivadas', + archivedDesc: 'Los chats archivados se ocultan de la barra lateral pero conservan todos sus mensajes. Haz Ctrl/⌘-clic en un chat de la barra lateral para archivarlo.', + nothingArchived: 'Nada archivado', + noSearchMatch: 'Ningún chat archivado coincide con tu búsqueda.', + archiveToHide: 'Archiva un chat para ocultarlo aquí.', + unarchive: 'Desarchivar', + deletePermanently: 'Eliminar permanentemente', + count => `${count} mensajes`, + new: 'Nueva sesión', + running: 'Sesión en curso', + actions: 'Acciones de sesión', + reorder: 'Reordenar', + pin: 'Fijar', + unpin: 'Desfijar', + copyId: 'Copiar ID', + rename: 'Renombrar', + archive: 'Archivar', + renameDialog: 'Renombrar sesión', + renameDesc: 'Dale a este chat un título fácil de recordar. Déjalo vacío para limpiar.', + untitled: 'Sesión sin título', + renamed: 'Renombrada', + renameFailed: 'Error al renombrar', + pinned: 'Fijada', + results: 'Resultados', + allPinned: 'Todo aquí está fijado. Desfija un chat para mostrarlo en recientes.', + pinHint: 'Mayús-clic para fijar un chat · arrastra para reordenar', + loadMore: 'Cargar más', + noWorkspace: 'Sin espacio de trabajo', + ungroup: 'Mostrar sesiones como lista única', + groupByWorkspace: 'Agrupar sesiones por espacio de trabajo', + loadStep: 'Cargar', + moreLabel: 'más', + nothingArchivedTitle: 'Nada archivado', + deletePermanentlyTitle: 'Eliminar permanentemente', + defaultProjectDirTitle: 'Directorio de proyecto predeterminado', + loadingArchived: 'Cargando sesiones archivadas…', + restored: 'Restaurada', + projectDirUpdated: 'Directorio de proyecto predeterminado actualizado', + loadFailed: 'No se pudieron cargar las sesiones archivadas', + unarchiveFailed: 'Error al desarchivar', + deleteFailed: 'Error al eliminar', + archiveHint: 'Archiva un chat para ocultarlo aquí.', + updateDirFailed: 'No se pudo actualizar el directorio predeterminado', + clearDirFailed: 'No se pudo limpiar el directorio predeterminado', + }, + mcp: { + title: 'Servidores MCP', + addServer: 'Añadir servidor', + noServers: 'No hay servidores MCP configurados.', + loading: 'Cargando servidores MCP…', + servers: 'Servidores MCP', + count => `${count} configurados`, + newServer: 'Nuevo servidor', + reloadMCP: 'Recargar MCP', + reloading: 'Recargando...', + noServersDesc: 'Añade un servidor STDIO o HTTP para exponer herramientas MCP.', + name: 'Nombre', + namePlaceholder: 'sistema-de-archivos', + serverJSON: 'JSON del servidor', + editServer: 'Editar servidor', + saveServer: 'Guardar servidor', + saving: 'Guardando...', + remove: 'Eliminar', + disabled: 'desactivado', + nameRequired: 'Nombre obligatorio', + nameRequiredDesc: 'Asigna una clave de configuración a este servidor MCP.', + invalidJson: 'La configuración del servidor debe ser un objeto JSON', + invalidJsonDesc: 'JSON MCP no válido', + saved: 'Servidor MCP guardado', + name => `${name} se aplica después de recargar MCP.`, + saveFailed: 'Error al guardar', + removeFailed: 'Error al eliminar', + gatewayUnavailable: 'Gateway no disponible', + gatewayUnavailableDesc: 'Reconecta el Gateway antes de recargar MCP.', + reloadedTitle: 'Herramientas MCP recargadas', + reloadedDesc: 'Los nuevos esquemas de herramientas se aplican a nuevos turnos.', + reloadFailed: 'Error al recargar MCP', + giveConfigKey: 'Asigna una clave de configuración a este servidor MCP.', + reconnectGateway: 'Reconecta el Gateway antes de recargar MCP.', + newSchemas: 'Los nuevos esquemas de herramientas se aplican a nuevos turnos.', + loadingServers: 'Cargando servidores MCP...', + serverName: 'Nombre', + serversTitle: 'Servidores MCP', + noServersTitle: 'Sin servidores MCP', + failedToLoad: 'Error al cargar la configuración MCP', + invalidJsonShort: 'JSON MCP no válido', + serverSaved: 'Servidor MCP guardado', + toolsReloaded: 'Herramientas MCP recargadas', + emptyDesc: 'Añade un servidor STDIO o HTTP para exponer herramientas MCP.', + }, + tools: { + title: 'Herramientas y skills', + noTools: 'No hay herramientas disponibles.', + }, + nav: { + home: 'Inicio', + chat: 'Chat', + settings: 'Configuración', + files: 'Archivos', + terminal: 'Terminal', + }, + header: { + search: 'Buscar o escribir un comando…', + }, + model: { + auxTask: { + vision: 'Visión', + visionHint: 'Análisis de imágenes', + web_extract: 'Extracción web', + web_extractHint: 'Resumen de páginas', + compression: 'Compresión', + compressionHint: 'Compactación de contexto', + session_search: 'Búsqueda de sesiones', + session_searchHint: 'Consultas de recuperación', + skills_hub: 'Hub de skills', + skills_hubHint: 'Búsqueda de skills', + approval: 'Aprobación', + approvalHint: 'Auto-aprobación inteligente', + mcp: 'MCP', + mcpHint: 'Enrutamiento de herramientas MCP', + title_generation: 'Generación de títulos', + title_generationHint: 'Títulos de sesión', + curator: 'Curador', + curatorHint: 'Revisión de uso de skills', + }, + mainModel: 'Modelo principal', + mainDesc: 'Se aplica a sesiones nuevas. Usa el selector de modelos en el compositor para cambiar el chat activo sobre la marcha.', + providerPlaceholder: 'Proveedor', + modelPlaceholder: 'Modelo', + apply: 'Aplicar', + applying: 'Aplicando…', + auxiliaryModels: 'Modelos auxiliares', + auxiliaryDesc: 'Las tareas auxiliares se ejecutan en el modelo principal por defecto. Asigna un modelo dedicado a cualquier tarea para anularlo.', + resetAllToMain: 'Restablecer todo al principal', + setToMain: 'Usar modelo principal', + change: 'Cambiar', + cancel: 'Cancelar', + autoUseMain: 'auto · usar modelo principal', + providerDefault: '(predeterminado del proveedor)', + loading: 'Cargando configuración del modelo…', + options: 'Opciones', + thinking: 'Pensamiento', + fast: 'Rápido', + effort: 'Esfuerzo', + noOptions: 'Sin opciones para este modelo', + optionUpdateFailed: 'Error al actualizar la opción del modelo', + fastModeUpdateFailed: 'Error al actualizar el modo rápido', + effortMinimal: 'Mínimo', + effortLow: 'Bajo', + effortMedium: 'Medio', + effortHigh: 'Alto', + effortMax: 'Máximo', + switch: 'Cambiar modelo', + unknown: '(desconocido)', + filterPlaceholder: 'Filtrar proveedores y modelos...', + persistGlobal: 'Persistir globalmente', + persistGlobalSession: 'Persistir globalmente (de lo contrario solo esta sesión)', + couldNotLoad: 'No se pudieron cargar los modelos', + proLockedDesc: 'Los modelos Pro requieren una suscripción de pago de Nous.', + priceTooltip: 'Precio de entrada/salida por millón de tokens', + freePrice: 'Gratis', + currentLabel: 'actual:', + addProviderBtn: 'Añadir proveedor', + }, + updates: { + checking: 'Buscando actualizaciones…', + available: 'Actualización disponible', + downloading: 'Descargando…', + installing: 'Instalando…', + restart: 'Reiniciar para actualizar', + stageGettingReady: 'Preparando…', + stageDownloading: 'Descargando…', + stageAlmostThere: 'Ya casi…', + stageFinishingUp: 'Terminando…', + stageRestarting: 'Reiniciando Hermes…', + stageManual: 'Actualizar desde tu terminal', + stageError: 'Actualización pausada', + updatingHermes: 'Actualizando Hermes…', + lookingForUpdates: 'Buscando actualizaciones…', + couldntCheck: 'No se pudo buscar actualizaciones', + updateNotAvailable: 'Actualización no disponible', + checkConnection: 'Comprueba tu conexión e inténtalo de nuevo.', + onLatest: 'Estás ejecutando la última versión.', + allSet: 'Todo listo', + newUpdateAvailable: 'Nueva actualización disponible', + readyToInstall: 'Una nueva versión de Hermes está lista para instalar.', + updateNow: 'Actualizar ahora', + maybeLater: 'Quizás más tarde', + count => `+ ${count} cambio más incluido.`, + count => `+ ${count} cambios más incluidos.`, + updateFromTerminal: 'Actualizar desde tu terminal', + terminalDesc: 'Instalaste Hermes desde la línea de comandos, así que las actualizaciones también se ejecutan allí. Pega esto en tu terminal:', + copied: 'Copiado', + copy: 'Copiar', + pickupNewVersion: 'Hermes detectará la nueva versión la próxima vez que lo inicies.', + done: 'Hecho', + updaterDesc: 'El actualizador de Hermes tomará el control en su propia ventana y reabrirá Hermes cuando termine.', + closeToApply: 'Hermes se cerrará para aplicar la actualización.', + updateDidntFinish: 'La actualización no terminó', + nothingLost: 'No te preocupes — no se ha perdido nada. Puedes intentarlo de nuevo ahora.', + notNow: 'Ahora no', + }, + errors: { + generic: 'Algo salió mal.', + notFound: 'Página no encontrada.', + noPermission: 'No tienes permiso para acceder a esto.', + somethingBroke: 'Algo se rompió en la interfaz', + viewCrashedDesc: 'La vista encontró un error inesperado. Tus chats y configuraciones están a salvo — inténtalo de nuevo o recarga la ventana.', + noProviders: 'No hay proveedores autenticados.', + }, + tool: { + toolCall: 'Llamada a herramienta', + result: 'Resultado', + error: 'Error', + timeout: 'Tiempo agotado', + cancelled: 'Cancelado', + running: 'En ejecución', + recovered: 'Recuperado', + done: 'Hecho', + output: 'Salida de la herramienta', + searchResults: 'Resultados de búsqueda', + rawResponse: 'Respuesta sin procesar', + stdout: 'salida estándar', + stderr: 'error estándar', + copyActivity: 'Copiar actividad', + recoveredAfter: 'Recuperado después de 1 paso fallido', + count => `Recuperado después de ${count} pasos fallidos`, + oneStepFailed: '1 paso fallido', + count => `${count} pasos fallidos`, + }, + composer: { + startingHermes: 'Iniciando Hermes...', + sendFollowUp: 'Enviar seguimiento', + message: 'Mensaje', + editingQueued: 'Editando turno en cola en el compositor', + attach: 'Adjuntar', + files: 'Archivos…', + folder: 'Carpeta…', + images: 'Imágenes…', + pasteImage: 'Pegar imagen', + url: 'URL…', + promptSnippets: 'Fragmentos de prompt', + promptSnippetsDesc: 'Elige un prompt de inicio para colocarlo en el compositor.', + voiceStart: 'Iniciar conversación por voz', + queue: 'Poner en cola', + speaking: 'Hablando', + transcribing: 'Transcribiendo', + muted: 'Silenciado', + listening: 'Escuchando', + unmuteMic: 'Activar micrófono', + muteMic: 'Silenciar micrófono', + stopListening: 'Dejar de escuchar y enviar', + endVoice: 'Finalizar conversación por voz', + end: 'Finalizar', + stopDictation: 'Detener dictado', + transcribingDictation: 'Transcribiendo dictado', + voiceDictation: 'Dictado por voz', + addContext: 'Añadir contexto', + }, + models: { + title: 'Modelos', + search: 'Buscar modelos', + addProvider: 'Añadir proveedor…', + }, + install: { + title: 'Hermes necesita una instalación única', + desc: 'La instalación automática de primer inicio no está disponible en', + descEnd: 'todavía. Abre Terminal y ejecuta el comando de abajo, luego vuelve a iniciar esta aplicación. Los siguientes inicios omitirán este paso.', + installCommand: 'Comando de instalación', + copyCommand: 'Copiar comando', + viewDocs: 'Ver documentación de instalación', + willInstallTo: 'Se instalará en', + iRanIt: 'Ya lo ejecuté -- reintentar', + failed: 'Instalación fallida', + settingUp: 'Configurando Hermes Agent', + finishingUp: 'Terminando', + failedDesc: 'Uno de los pasos de instalación falló. En Windows, esto puede ocurrir si otra instancia de Hermes CLI o de escritorio está en ejecución. Detén todas las instancias de Hermes en ejecución y reintenta. Revisa los detalles abajo o el registro de escritorio para ver la transcripción completa.', + setupDesc: 'Esta es una configuración única. El instalador de Hermes está descargando dependencias y configurando tu máquina. Los siguientes inicios omitirán este paso.', + fetchingManifest: 'Obteniendo manifiesto del instalador...', + error: 'Error', + showOutput: 'Mostrar salida del instalador', + hideOutput: 'Ocultar salida del instalador', + noOutput: 'Aún no hay salida.', + cancelInstall: 'Cancelar instalación', + cancelling: 'Cancelando...', + copyOutput: 'Copiar salida', + copied: '¡Copiado!', + reloadRetry: 'Recargar y reintentar', + saveLogs: 'Transcripción completa guardada en', + stepsComplete: 'pasos completados', + nowLabel: 'ahora', + line: 'línea', + lines: 'líneas', + }, + previewConsole: { + resizeLabel: 'Redimensionar consola de vista previa', + noMessages: 'Aún no hay mensajes en la consola.', + }, + boot: { + ipcUnavailable: 'El puente IPC de escritorio no está disponible.', + backendExited: 'El proceso en segundo plano de Hermes terminó durante el inicio.', + backendStoppedTitle: 'Backend detenido', + backendStoppedMessage: 'El proceso en segundo plano de Hermes terminó.', + startingConnection: 'Iniciando conexión de escritorio', + connectingGateway: 'Conectando Gateway de escritorio en vivo', + loadingConfig: 'Cargando configuración de Hermes', + loadingSessions: 'Cargando sesiones recientes', + desktopBootFailed: 'Error al iniciar el escritorio', + couldNotStart: 'Hermes no pudo iniciarse', + recoveryDesc: 'El Gateway en segundo plano no se inició. Prueba uno de los pasos de recuperación de abajo — nada de esto elimina tus chats o configuraciones.', + retry: 'Reintentar', + repairInstall: 'Reparar instalación', + useLocalGateway: 'Usar Gateway local', + openLogs: 'Abrir registros', + repairHint: 'La reparación vuelve a ejecutar el instalador y puede tardar unos minutos en una máquina nueva.', + showLogs: 'Mostrar registros recientes', + hideLogs: 'Ocultar registros recientes', + }, + urlDialog: { + title: 'Adjuntar una URL', + description: 'Hermes obtendrá la página y la incluirá como contexto para este turno.', + placeholder: 'https://ejemplo.com/articulo', + hint: 'Incluye la URL completa, p.ej.', + attach: 'Adjuntar', + }, + titlebar: { + hideSidebar: 'Ocultar barra lateral', + showSidebar: 'Mostrar barra lateral', + search: 'Buscar', + searchTitle: 'Buscar sesiones, vistas y acciones', + hideRightSidebar: 'Ocultar barra lateral derecha', + showRightSidebar: 'Mostrar barra lateral derecha', + unmuteHaptics: 'Activar hápticos', + muteHaptics: 'Silenciar hápticos', + openSettings: 'Abrir configuración', + profiles: 'Perfiles', + profilesDesc: 'Entornos avanzados de Hermes para personas, configuración, skills y SOUL.md separados.', + manageProfiles: 'Gestionar perfiles', + language: 'Idioma', + languageDesc: 'Elige un idioma para la interfaz.', + }, + pagination: { + ariaLabel: 'paginación', + prevAria: 'Ir a la página anterior', + prev: 'Anterior', + nextAria: 'Ir a la página siguiente', + next: 'Siguiente', + }, + bootstrap: { + pending: 'Pendiente', + running: 'Instalando', + done: 'Hecho', + skipped: 'Omitido', + failed: 'Fallido', + }, + sidebar: { + sheetTitle: 'Barra lateral', + sheetDesc: 'Muestra la barra lateral en móvil.', + toggle: 'Alternar barra lateral', + }, + clarify: { + hermesIsAsking: 'Hermes está preguntando', + loadingQuestion: 'Cargando pregunta…', + otherTypeAnswer: 'Otro (escribe tu respuesta)', + placeholderAnswer: 'Escribe tu respuesta…', + cmdEnterToSend: '⌘/Ctrl + Enter para enviar', + back: 'Atrás', + skip: 'Saltar', + couldNotSend: 'No se pudo enviar la respuesta de aclaración', + n => `1–${n} para elegir`, + }, + intro: { + fallback1h: '¿Qué vamos a mover hoy?', + fallback1b: 'Envía un bug, rama, plan o idea aproximada. Inspeccionaré el repositorio y lo convertiré en el siguiente paso concreto.', + fallback2h: '¿Qué tienes en mente?', + fallback2b: 'Trae el código, la pregunta o la parte bloqueada. Leeré la situación antes de hacer cambios.', + fallback3h: '¿Qué debería mirar Hermes?', + fallback3b: 'Envía la tarea, la ruta fallida o el plan a medias. Te ayudaré a convertirlo en acción.', + fallback4h: '¿Por dónde empezamos?', + fallback4b: 'Trae el problema, el objetivo o el archivo. Inspeccionaré primero y mantendré el siguiente paso concreto.', + fallback5h: '¿Qué necesita atención?', + fallback5b: 'Envía el contexto que tengas. Te ayudaré a convertirlo en un plan o una solución.', + personality: { + label => `El modo ${label} está activado. ¿En qué deberíamos trabajar?`, + body1: 'Envía la tarea, archivo o idea aproximada. Usaré tu voz configurada y mantendré el trabajo basado en este repositorio.', + label => `¿Qué necesita ver ${label} Hermes?`, + body2: 'Trae el contexto o la parte bloqueada. Me adaptaré a tu personalidad configurada.', + label => `El modo ${label} está listo.`, + body3: 'Envía el problema, archivo o idea. Seguiré la personalidad que has configurado.', + label => `¿Qué debería abordar ${label} Hermes?`, + body4: 'Deja la tarea aquí. Mantendré el trabajo basado en el repositorio.', + heading5: '¿Por dónde comenzamos?', + label => `Dame el contexto y responderé en modo ${label}.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'No se encontraron artefactos', + }, + agents: { + spawnTree: 'Árbol de agentes', + liveSubagentActivity: 'Actividad en vivo de subagentes para el turno actual.', + noLiveSubagents: 'Sin subagentes activos', + files: 'Archivos', + label: 'Agentes', + open: 'Abrir agentes', + close: 'Cerrar agentes', + subagent: 'subagente', + subagents: 'subagentes', + failed: 'fallido', + running: 'en ejecución', + }, + provider: { + desc: { + nousPortal: 'Anulación de URL base del Portal Nous', + openRouter: 'Clave API de OpenRouter (para visión, ayudantes de extracción web y MoA)', + google: 'Clave API de Google AI Studio (también reconocida como GEMINI_API_KEY)', + gemini: 'ID de proyecto GCP para niveles Gemini de pago (el nivel gratuito se aprovisiona automáticamente)', + anthropic: 'Clave API de Anthropic', + deepseek: 'URL base personalizada de la API de DeepSeek (avanzado)', + xai: 'Anulación de URL base de xAI', + huggingface: 'Anulación de URL base de Hugging Face Inference Providers', + kimi: 'Clave API de Kimi / Moonshot China', + minimax: 'Anulación de URL base de MiniMax (China)', + minimaxCn: 'Clave API de MiniMax China', + dashscope: 'URL base personalizada de DashScope (predeterminado: endpoint compatible con OpenAI coding-intl)', + glm: 'Clave API de GLM (Z.AI)', + nvidia: 'Anulación de URL base de NVIDIA NIM (p.ej. http://localhost:8000/v1 para NIM local)', + opencodeGo: 'Clave API de OpenCode Go', + opencodeZen: 'Clave API de OpenCode Zen', + xiaomi: 'Anulación de URL base de Xiaomi MiMo (predeterminado: https://api.xiaomimimo.com/v1)', + kiloCode: 'Clave API de Kilo Code', + aiGateway: 'Clave API de AI Gateway (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'Clave API de ElevenLabs', + openai: 'Clave API de OpenAI (para procesamiento de voz mediante proxy)', + mistral: 'Clave API de Mistral (para STT/TTS)', + groq: 'Clave API de Groq (para STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'URL de API de Firecrawl para instancias autoalojadas (opcional)', + fal: 'FAL_KEY', + nous: 'Anulación de URL base del Portal Nous', + openrouter: 'Clave API de OpenRouter (para visión, ayudantes de extracción web y MoA)', + lmstudio: 'Anulación de URL base de Z.AI / GLM', + zai: 'URL base de Azure Foundry (configurar mediante \'hermes model\' para configuración específica de endpoint)', + stepfun: 'Anulación de URL base de StepFun Step Plan', + arcee: 'Anulación de URL base de Arcee AI', + gmi: 'Anulación de URL base de GMI Cloud', + qwenportal: 'Anulación de URL base de Qwen Portal (predeterminado: https://portal.qwen.ai/v1)', + opencodego: 'Anulación de URL base de OpenCode Go', + ollamacloud: 'Anulación de URL base de Ollama Cloud (predeterminado: https://ollama.com/v1)', + awsbedrock: 'Perfil nombrado de AWS para autenticación Bedrock (de ~/.aws/credentials)', + exa: 'Clave API de Exa para búsqueda web y contenidos con IA nativa', + parallel: 'Clave API de Parallel para búsqueda web y extracción con IA nativa', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/fr.ts b/apps/desktop/src/i18n/fr.ts new file mode 100644 index 000000000000..6efde3cb2ab8 --- /dev/null +++ b/apps/desktop/src/i18n/fr.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const fr = defineLocale( +{ + appearance: { + title: 'Apparence', + description: 'Préférences d\'affichage propres au bureau. Le mode contrôle la luminosité ; le thème contrôle la palette d\'accent et le style de la surface de discussion.', + colorMode: 'Mode de couleur', + colorModeDesc: 'Choisis un mode fixe ou laisse Hermes suivre le réglage de ton système.', + theme: { + nous: 'Nous', + nousDesc: 'Neutres vitreux avec accents bleus Nous', + midnight: 'Minuit', + midnightDesc: 'Bleu-violet profond avec accents froids', + ember: 'Braise', + emberDesc: 'Cramoisi et bronze chauds — ambiance forge', + mono: 'Mono', + monoDesc: 'Niveaux de gris épurés — minimal et concentré', + cyberpunk: 'Cyberpunk', + cyberpunkDesc: 'Vert néon sur noir — terminal matrix', + slate: 'Ardoise', + slateDesc: 'Bleu ardoise froid — thème développeur concentré', + }, + themeDesc: 'Choisis une palette de couleurs pour la surface de discussion et les accents de l\'interface.', + mode: { + light: 'Clair', + lightDesc: 'Surfaces de bureau lumineuses', + dark: 'Sombre', + darkDesc: 'Espace de travail sans éblouissement', + system: 'Système', + systemDesc: 'Suivre l\'apparence du système', + }, + language: 'Langue', + languageDesc: 'Choisis la langue de l\'interface ou laisse Hermes suivre le réglage de ton système.', + toolCallDisplay: 'Affichage des appels d\'outils', + toolCallDisplayDesc: 'Produit masque les données brutes des outils ; Technique affiche tout.', + toolViewProduct: 'Produit', + toolViewTechnical: 'Technique', + toolViewProductDesc: 'Activité des outils lisible avec résumés concis.', + toolViewTechnicalDesc: 'Inclure les arguments/résultats bruts et les détails de bas niveau.', + }, + settings: { + title: 'Paramètres', + appearance: 'Apparence', + model: 'Modèle', + gateway: 'Passerelle', + sessions: 'Sessions', + tools: 'Outils & Skills', + section: { + chat: 'Discussion', + workspace: 'Espace de travail', + safety: 'Sécurité', + memory: 'Mémoire & Contexte', + voice: 'Voix', + advanced: 'Avancé', + }, + mcp: 'Serveurs MCP', + config: 'Configuration', + keys: 'Clés API', + about: 'À propos', + closeSettings: 'Fermer les paramètres', + archivedChats: 'Discussions archivées', + exportConfig: 'Exporter la configuration', + importConfig: 'Importer la configuration', + resetDefaults: 'Réinitialiser par défaut', + llmProviders: 'Fournisseurs LLM', + searchPlaceholder: { + about: 'À propos d\'Hermes Desktop', + config: 'Rechercher dans les paramètres…', + gateway: 'Connexion à la passerelle…', + keys: 'Rechercher des clés API…', + mcp: 'Rechercher des serveurs MCP…', + sessions: 'Rechercher des sessions archivées…', + }, + }, + chat: { + placeholder: 'Pose-moi une question…', + send: 'Envoyer', + stop: 'Arrêter', + thinking: 'Réflexion…', + noSession: 'Aucune session active. Lance une nouvelle conversation.', + loadingSession: 'Chargement de la session', + loadingResponse: 'Hermes charge une réponse', + branchInNewChat: 'Brancher dans une nouvelle discussion', + readAloud: 'Lire à voix haute', + preparingAudio: 'Préparation de l\'audio...', + stopReading: 'Arrêter la lecture', + editMessage: 'Modifier le message', + editableCheckpoint: 'Point de contrôle modifiable', + restoreCheckpoint: 'Restaurer le point de contrôle', + goForward: 'Avancer', + restorePrevCheckpoint: 'Restaurer le point de contrôle précédent', + restoreNextCheckpoint: 'Restaurer le point de contrôle suivant', + composerTip: 'Astuce : tape @ pour référencer des fichiers en ligne.', + reconnecting: 'Reconnexion à Hermes…', + }, + commandCenter: { + title: 'Centre de commande', + noSessions: 'Aucune session pour le moment.', + loadingStatus: 'Chargement du statut…', + recentLogs: 'Logs récents', + dailyTokens: 'Tokens quotidiens', + noActivity: 'Aucune activité quotidienne.', + noModelUsage: 'Aucune utilisation de modèle pour le moment.', + noSkillActivity: 'Aucune activité de skill pour le moment.', + sessionsPanel: 'Panneau des sessions', + systemPanel: 'Panneau système', + usagePanel: 'Panneau d\'utilisation', + navigate: 'Naviguer', + noMatchingResults: 'Aucun résultat correspondant trouvé.', + noSessionsYet: 'Aucune session pour le moment.', + unpinSession: 'Désépingler la session', + pinSession: 'Épingler la session', + exportSession: 'Exporter la session', + deleteSession: 'Supprimer la session', + gatewayRunning: 'Passerelle de messagerie en cours', + gatewayStopped: 'Passerelle de messagerie arrêtée', + restartMsg: 'Redémarrer la messagerie', + updateHermes: 'Mettre à jour Hermes', + noLogsLoaded: 'Aucun log chargé pour le moment.', + closeLabel: 'Fermer le centre de commande', + searchPlaceholder: 'Rechercher des sessions, vues et actions', + statSessions: 'Sessions', + statApiCalls: 'Appels API', + statTokens: 'Tokens entrée/sortie', + statEstCost: 'Coût estimé', + cost => `réel ${cost}`, + loadingUsage: 'Chargement de l\'utilisation...', + count => `Aucune utilisation dans les ${count} derniers jours.`, + retry: 'Réessayer', + tokenInput: 'entrée', + tokenOutput: 'sortie', + noDailyActivity: 'Aucune activité quotidienne.', + topModels: 'Modèles principaux', + topSkills: 'Skills principaux', + actionsLabel: 'actions', + systemRunning: 'en cours', + systemDone: 'terminé', + systemFailed: 'échoué', + open: 'Ouvrir le Centre de commande', + close: 'Fermer le Centre de commande', + }, + common: { + loading: 'Chargement…', + save: 'Enregistrer', + cancel: 'Annuler', + close: 'Fermer', + delete: 'Supprimer', + confirm: 'Confirmer', + search: 'Rechercher…', + clearSearch: 'Effacer la recherche', + copy: 'Copier', + refresh: 'Actualiser', + moreActions: 'Plus d\'actions', + tryAgain: 'Réessayer', + }, + onboarding: { + welcome: 'Bienvenue sur Hermes', + getStarted: 'Commence par choisir un fournisseur et un modèle.', + skip: 'Passer', + continue: 'Continuer', + finish: 'Terminer', + setupTitle: 'Configurons Hermes Agent ensemble', + setupDesc: 'Connecte un fournisseur de modèle pour commencer à discuter. La plupart des options se font en un clic.', + preparing: 'Démarrage d\'Hermes…', + installing: 'Hermes termine l\'installation. Cela prend généralement moins d\'une minute au premier lancement.', + lookingUp: 'Recherche des fournisseurs...', + otherProviders: 'Autres fournisseurs', + collapse: 'Réduire', + iHaveKey: 'J\'ai une clé API', + recommended: 'Recommandé', + connected: 'Connecté', + backToSignIn: 'Retour à la connexion', + getKey: 'Obtenir une clé', + pasteKey: 'Coller la clé API', + connect: 'Se connecter', + connecting: 'Connexion en cours', + copyCode: 'Copier', + startSignIn: 'Démarrage de la connexion pour', + verifyingCode: 'Vérification de ton code avec', + pickingModel: 'connecté. Sélection d\'un modèle par défaut...', + signInFailed: 'Échec de la connexion. Réessaie.', + pickDifferent: 'Choisir un autre fournisseur', + signInTitle: 'Se connecter avec', + step1: 'Nous avons ouvert', + step1End: 'dans ton navigateur.', + step2: 'Autorise Hermes sur cette page.', + step3: 'Copie le code d\'autorisation et colle-le ci-dessous.', + pasteCode: 'Coller le code d\'autorisation', + reopenAuth: 'Rouvrir la page d\'autorisation', + cancel: 'Annuler', + browserDesc: 'Nous avons ouvert', + browserDescEnd: 'dans ton navigateur. Autorise Hermes sur cette page et tu seras connecté automatiquement — rien à copier ni coller.', + waitingAuth: 'En attente de ton autorisation...', + reopenSignIn: 'Rouvrir la page de connexion', + externalDesc: 'se connecte via son propre CLI. Exécute cette commande dans un terminal, puis reviens et choisis « Je me suis connecté » :', + iSignedIn: 'Je me suis connecté', + enterCode: 'Nous avons ouvert', + enterCodeEnd: 'dans ton navigateur. Saisis ce code sur cette page :', + reopenVerification: 'Rouvrir la page de vérification', + defaultModel: 'Modèle par défaut', + freeTier: 'Niveau gratuit', + pro: 'Pro', + change: 'Modifier', + startChatting: 'Commencer à discuter', + docs: 'docs', + close: 'Fermer', + savingError: 'Impossible d\'enregistrer l\'identifiant.', + openRouter: 'OpenRouter', + }, + file: { + browser: 'Explorateur de fichiers', + noFiles: 'Aucun fichier pour le moment.', + }, + terminal: { + title: 'Terminal', + newTab: 'Nouvel onglet', + closeTab: 'Fermer l\'onglet', + }, + skills: { + title: 'Skills', + search: 'Rechercher des skills…', + noResults: 'Aucun skill trouvé.', + tools: 'Skills & Outils', + }, + profiles: { + title: 'Profils', + noProfilesYet: 'Aucun profil pour le moment.', + selectProfile: 'Sélectionne un profil pour voir ses détails.', + deleteProfile: 'Supprimer le profil ?', + soulMd: 'SOUL.md', + unsavedChanges: 'Modifications non enregistrées', + newProfile: 'Nouveau profil', + cloneFromDefault: 'Cloner depuis le profil par défaut', + renameProfile: 'Renommer le profil', + }, + cron: { + title: 'Tâches Cron', + noJobs: 'Aucune tâche planifiée.', + deleteCronJob: 'Supprimer la tâche cron ?', + optional: 'Optionnel', + label: 'Cron', + open: 'Ouvrir les tâches cron', + }, + messaging: { + title: 'Messagerie', + recommended: 'Recommandé', + recommendedTelegram: 'Recommandé. IDs numériques séparés par des virgules depuis @userinfobot. Sans cela, n\'importe qui peut DM ton bot.', + recommendedDiscord: 'Recommandé. IDs utilisateur Discord séparés par des virgules.', + recommendedSlack: 'Recommandé. IDs utilisateur Slack séparés par des virgules.', + recommendedMattermost: 'Recommandé. IDs utilisateur Mattermost séparés par des virgules.', + recommendedMatrix: 'Recommandé. IDs utilisateur séparés par des virgules au format @utilisateur:serveur.', + recommendedSignal: 'Recommandé. Identifiants Signal séparés par des virgules.', + recommendedWhatsApp: 'Recommandé. Numéros de téléphone ou IDs WhatsApp séparés par des virgules.', + gatewayStopped: 'Passerelle de messagerie arrêtée', + getCredentials: 'Obtenir tes identifiants', + required: 'Requis', + unsavedChanges: 'Modifications non enregistrées', + saved: 'Enregistré', + }, + about: { + version: 'Version', + checkUpdates: 'Vérifier les mises à jour', + upToDate: 'Hermes est à jour.', + updateAvailable: 'Une mise à jour est disponible.', + license: 'Licence MIT', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'Version indisponible', + updates: 'Mises à jour', + checkNow: 'Vérifier maintenant', + checking: 'Vérification…', + seeWhatsNew: 'Voir les nouveautés', + releaseNotes: 'Notes de version', + autoUpdates: 'Mises à jour automatiques', + autoUpdatesDesc: 'Hermes vérifie les mises à jour automatiquement en arrière-plan et te prévient quand une mise à jour est prête.', + selfUpdateUnsupported: 'Cette version ne peut pas se mettre à jour depuis l\'application.', + cannotReachServer: 'Impossible de joindre le serveur de mises à jour.', + installingUpdate: 'Une mise à jour est en cours d\'installation.', + count => `Une nouvelle mise à jour est prête (${count} modification incluse).`, + count => `Une nouvelle mise à jour est prête (${count} modifications incluses).`, + onLatest: 'Tu utilises la dernière version.', + tapCheckNow: 'Clique sur « Vérifier maintenant » pour chercher des mises à jour.', + time => `Dernière vérification ${time}`, + justNow: 'à l\'instant', + never: 'jamais', + count => `il y a ${count} min`, + count => `il y a ${count} heures`, + count => `il y a ${count} jours`, + (branch, sha) => `Branche ${branch} · Commit ${sha}`, + }, + keys: { + title: 'Clés API', + noKeys: 'Aucune clé API configurée.', + addKey: 'Ajouter une clé', + loading: 'Chargement des clés API et identifiants…', + docs: 'Docs', + openDocs: 'Ouvrir la documentation du fournisseur', + hideValue: 'Masquer la valeur', + revealValue: 'Afficher la valeur', + set: 'Définie', + notSet: 'Non définie', + replace: 'Remplacer', + replaceValue: 'Remplacer la valeur actuelle', + enterValue: 'Saisir la valeur', + saving: 'Enregistrement', + save: 'Enregistrer', + cancel: 'Annuler', + clearValue: 'Effacer la valeur', + (count, total) => `${count} sur ${total} configurées`, + (count, total) => `${count} sur ${total} définies`, + count => `${count} définies`, + count => `${count} clés`, + otherProviders: 'Autres fournisseurs', + categoryTools: 'Outils', + categoryMessaging: 'Messagerie', + categorySettings: 'Paramètres', + openProviderDocs: 'Ouvrir la documentation du fournisseur', + showAdvanced: 'Afficher les options avancées', + loadFailed: 'Échec du chargement des clés API', + credentialSaved: 'Identifiant enregistré', + credentialRemoved: 'Identifiant supprimé', + }, + config: { + title: 'Configuration', + edit: 'Modifier la configuration', + reload: 'Recharger la configuration', + notSet: 'Non défini', + commaSeparated: 'valeurs séparées par des virgules', + on: 'Activé', + off: 'Désactivé', + none: 'Aucun', + emptyOption: '(aucun)', + loading: 'Chargement de la configuration Hermes…', + noMatching: 'Aucun paramètre correspondant', + noMatchingDesc: 'Essaie un autre terme de recherche ou choisis une autre section.', + count => `${count} résultat`, + count => `${count} résultats`, + saving: 'Enregistrement…', + label: { + defaultModel: 'Modèle par défaut', + contextWindow: 'Fenêtre de contexte', + fallbackModels: 'Modèles de secours', + enabledToolsets: 'Outils activés', + timezone: 'Fuseau horaire', + personality: 'Personnalité', + reasoningBlocks: 'Blocs de raisonnement', + maxAgentSteps: 'Étapes max de l\'agent', + imageAttachments: 'Pièces jointes image', + workingDirectory: 'Répertoire de travail', + executionBackend: 'Backend d\'exécution', + commandTimeout: 'Délai d\'expiration des commandes', + persistentShell: 'Shell persistant', + envPassthrough: 'Passage des variables d\'env', + fileReadLimit: 'Limite de lecture de fichier', + terminalOutputLimit: 'Limite de sortie du terminal', + filePageLimit: 'Limite de page de fichier', + lineLengthLimit: 'Limite de longueur de ligne', + codeExecutionMode: 'Mode d\'exécution de code', + approvalMode: 'Mode d\'approbation', + approvalTimeout: 'Délai d\'expiration d\'approbation', + confirmMcpReloads: 'Confirmer les rechargements MCP', + commandAllowlist: 'Liste blanche de commandes', + redactSecrets: 'Masquer les secrets', + allowPrivateUrls: 'Autoriser les URLs privées', + browserPrivateUrls: 'URLs privées du navigateur', + localBrowserForPrivateUrls: 'Navigateur local pour URLs privées', + fileCheckpoints: 'Points de contrôle de fichiers', + checkpointLimit: 'Limite de points de contrôle', + voiceShortcut: 'Raccourci vocal', + maxRecordingLength: 'Durée max d\'enregistrement', + readResponsesAloud: 'Lire les réponses à voix haute', + speechToText: 'Reconnaissance vocale', + speechToTextProvider: 'Fournisseur de reconnaissance vocale', + localTranscriptionModel: 'Modèle de transcription local', + transcriptionLanguage: 'Langue de transcription', + elevenlabsSttModel: 'Modèle STT ElevenLabs', + elevenlabsLanguage: 'Langue ElevenLabs', + tagAudioEvents: 'Baliser les événements audio', + speakerDiarization: 'Diarisation des locuteurs', + textToSpeechProvider: 'Fournisseur de synthèse vocale', + edgeVoice: 'Voix Edge', + openaiTtsModel: 'Modèle TTS OpenAI', + openaiVoice: 'Voix OpenAI', + elevenlabsVoice: 'Voix ElevenLabs', + elevenlabsModel: 'Modèle ElevenLabs', + persistentMemory: 'Mémoire persistante', + userProfile: 'Profil utilisateur', + memoryBudget: 'Budget mémoire', + profileBudget: 'Budget du profil', + memoryProvider: 'Fournisseur de mémoire', + contextEngine: 'Moteur de contexte', + autoCompression: 'Compression automatique', + compressionThreshold: 'Seuil de compression', + compressionTarget: 'Cible de compression', + protectedRecentMessages: 'Messages récents protégés', + apiRetries: 'Tentatives API', + serviceTier: 'Niveau de service', + toolUseEnforcement: 'Obligation d\'utilisation d\'outils', + subagentModel: 'Modèle des sous-agents', + subagentProvider: 'Fournisseur des sous-agents', + subagentTurnLimit: 'Limite de tours des sous-agents', + parallelSubagents: 'Sous-agents parallèles', + subagentTimeout: 'Délai d\'expiration des sous-agents', + subagentReasoningEffort: 'Effort de raisonnement des sous-agents', + }, + desc: { + defaultModel: 'Utilisé pour les nouvelles discussions sauf si tu choisis un autre modèle dans l\'éditeur.', + contextWindow: 'Laisser à 0 pour utiliser la fenêtre de contexte détectée du modèle sélectionné.', + fallbackModels: 'Entrées fournisseur:modèle de secours à essayer si le modèle par défaut échoue.', + personality: 'Style d\'assistant par défaut pour les nouvelles sessions.', + timezone: 'Utilisé quand Hermes a besoin de contexte de temps local. Vide utilise le fuseau horaire du système.', + reasoningBlocks: 'Afficher les sections de raisonnement quand le backend les fournit.', + imageAttachments: 'Contrôle comment les pièces jointes image sont envoyées au modèle.', + workingDirectory: 'Dossier de projet par défaut pour le travail des outils et du terminal.', + codeExecutionMode: 'À quel point l\'exécution de code est limitée au projet actuel.', + persistentShell: 'Conserver l\'état du shell entre les commandes quand le backend le supporte.', + envPassthrough: 'Variables d\'environnement à transmettre lors de l\'exécution des outils.', + fileReadLimit: 'Nombre maximum de caractères qu\'Hermes peut lire dans une seule demande de fichier.', + approvalMode: 'Comment Hermes gère les commandes qui nécessitent une approbation explicite.', + approvalTimeout: 'Durée d\'attente des demandes d\'approbation avant expiration.', + redactSecrets: 'Masquer les secrets détectés du contenu visible par le modèle lorsque c\'est possible.', + fileCheckpoints: 'Créer des sauvegardes de restauration avant les modifications de fichiers.', + persistentMemory: 'Enregistrer des souvenirs durables qui peuvent aider les sessions futures.', + userProfile: 'Maintenir un profil compact des préférences utilisateur.', + contextEngine: 'Stratégie pour gérer les longues conversations proches de la limite de contexte.', + autoCompression: 'Résumer le contexte plus ancien quand les conversations deviennent volumineuses.', + readResponsesAloud: 'Lire automatiquement les réponses de l\'assistant à voix haute.', + speechToText: 'Activer la transcription vocale locale ou via un fournisseur.', + elevenlabsLanguage: 'Code de langue ISO-639-3 optionnel. Vide laisse ElevenLabs détecter automatiquement.', + maxAgentSteps: 'Limite supérieure de tours d\'appel d\'outils avant qu\'Hermes n\'arrête une exécution.', + }, + }, + gateway: { + title: 'Passerelle', + start: 'Démarrer la passerelle', + stop: 'Arrêter la passerelle', + restart: 'Redémarrer la passerelle', + running: 'En cours', + stopped: 'Arrêtée', + loading: 'Chargement des paramètres de la passerelle…', + unavailable: 'Paramètres de la passerelle indisponibles', + unavailableDesc: 'Le pont IPC du bureau n\'expose pas les paramètres de la passerelle.', + connection: 'Connexion à la passerelle', + envOverride: 'surcharge par variable d\'env', + desc: 'Hermes Desktop démarre sa propre passerelle locale par défaut. Utilise une passerelle distante quand tu veux que cette application contrôle un backend Hermes déjà en cours d\'exécution sur une autre machine ou derrière un proxy de confiance.', + envOverrideTitle: 'Des variables d\'environnement contrôlent cette session bureau.', + (urlVar, tokenVar) => `Désactive ${urlVar} et ${tokenVar} pour utiliser le paramètre enregistré ci-dessous.`, + localTitle: 'Passerelle locale', + localDesc: 'Démarre un backend Hermes privé sur localhost. C\'est le mode par défaut et cela fonctionne hors ligne.', + remoteTitle: 'Passerelle distante', + remoteDesc: 'Connecte cette interface bureau à un backend Hermes distant en utilisant son jeton de session.', + remoteUrl: 'URL distante', + remoteUrlDesc: 'URL de base du backend du tableau de bord distant. Les préfixes de chemin sont supportés, par exemple /hermes.', + remoteUrlPlaceholder: 'https://passerelle.exemple.com/hermes', + sessionToken: 'Jeton de session', + sessionTokenDesc: 'Le jeton de session du tableau de bord utilisé pour l\'accès REST et WebSocket. Laisse vide pour conserver le jeton enregistré.', + sessionTokenPlaceholder: 'Coller le jeton de session', + preview => `Jeton existant ${preview}`, + tokenSaved: 'enregistré', + testRemote: 'Tester la connexion distante', + saveRestart: 'Enregistrer pour le prochain redémarrage', + saveReconnect: 'Enregistrer et reconnecter', + diagnostics: 'Diagnostics', + diagnosticsDesc: 'Affiche desktop.log dans ton gestionnaire de fichiers — utile quand la passerelle ne démarre pas.', + openLogs: 'Ouvrir les logs', + connected: 'Connecté', + connecting: 'Connexion en cours', + disconnected: 'Déconnecté', + inferenceReady: 'Inférence prête', + inferenceNotReady: 'Inférence non prête', + checkingInference: 'Vérification de l\'inférence', + openSystemPanel: 'Ouvrir le panneau système', + connectionLabel: 'Connexion :', + recentActivity: 'Activité récente', + viewAllLogs: 'Voir tous les logs →', + messagingPlatforms: 'Plateformes de messagerie', + label: 'Passerelle', + inferenceStatus: 'Statut d\'inférence de la passerelle', + enterUrlFirst: 'Saisis une URL distante et un jeton de session avant de changer', + enterUrlFirstTest: 'Saisis une URL distante et un jeton de session avant de tester', + }, + sessions: { + title: 'Sessions', + search: 'Rechercher des sessions…', + noResults: 'Aucune session trouvée.', + export: 'Exporter', + delete: 'Supprimer la session', + loading: 'Chargement…', + defaultProjectDir: 'Dossier de projet par défaut', + defaultProjectDirDesc: 'Les nouvelles sessions démarrent dans ce dossier sauf si tu en choisis un autre. Laisse vide pour utiliser ton dossier personnel.', + fallback => `Par défaut : ${fallback}.`, + notSet: 'Non défini', + change: 'Modifier', + choose: 'Choisir', + clear: 'Effacer', + archivedTitle: 'Sessions archivées', + archivedDesc: 'Les discussions archivées sont masquées de la barre latérale mais conservent tous leurs messages. Ctrl/⌘-clic sur une discussion dans la barre latérale pour l\'archiver.', + nothingArchived: 'Rien d\'archivé', + noSearchMatch: 'Aucune discussion archivée ne correspond à ta recherche.', + archiveToHide: 'Archive une discussion pour la masquer ici.', + unarchive: 'Désarchiver', + deletePermanently: 'Supprimer définitivement', + count => `${count} messages`, + new: 'Nouvelle session', + running: 'Session en cours', + actions: 'Actions de session', + reorder: 'Réorganiser', + pin: 'Épingler', + unpin: 'Désépingler', + copyId: 'Copier l\'ID', + rename: 'Renommer', + archive: 'Archiver', + renameDialog: 'Renommer la session', + renameDesc: 'Donne un titre mémorable à cette discussion. Laisse vide pour effacer.', + untitled: 'Session sans titre', + renamed: 'Renommée', + renameFailed: 'Échec du renommage', + pinned: 'Épinglée', + results: 'Résultats', + allPinned: 'Tout ici est épinglé. Désépingle une discussion pour l\'afficher dans les récentes.', + pinHint: 'Shift-clic sur une discussion pour épingler · glisser pour réorganiser', + loadMore: 'Charger plus', + noWorkspace: 'Aucun espace de travail', + ungroup: 'Afficher les sessions en liste unique', + groupByWorkspace: 'Grouper les sessions par espace de travail', + loadStep: 'Charger', + moreLabel: 'plus', + nothingArchivedTitle: 'Rien d\'archivé', + deletePermanentlyTitle: 'Supprimer définitivement', + defaultProjectDirTitle: 'Dossier de projet par défaut', + loadingArchived: 'Chargement des sessions archivées…', + restored: 'Restaurée', + projectDirUpdated: 'Dossier de projet par défaut mis à jour', + loadFailed: 'Impossible de charger les sessions archivées', + unarchiveFailed: 'Échec de la désarchivage', + deleteFailed: 'Échec de la suppression', + archiveHint: 'Archive une discussion pour la masquer ici.', + updateDirFailed: 'Impossible de mettre à jour le dossier par défaut', + clearDirFailed: 'Impossible d\'effacer le dossier par défaut', + }, + mcp: { + title: 'Serveurs MCP', + addServer: 'Ajouter un serveur', + noServers: 'Aucun serveur MCP configuré.', + loading: 'Chargement des serveurs MCP…', + servers: 'Serveurs MCP', + count => `${count} configurés`, + newServer: 'Nouveau serveur', + reloadMCP: 'Recharger MCP', + reloading: 'Rechargement...', + noServersDesc: 'Ajoute un serveur stdio ou HTTP pour exposer des outils MCP.', + name: 'Nom', + namePlaceholder: 'systeme-de-fichiers', + serverJSON: 'JSON du serveur', + editServer: 'Modifier le serveur', + saveServer: 'Enregistrer le serveur', + saving: 'Enregistrement...', + remove: 'Supprimer', + disabled: 'désactivé', + nameRequired: 'Nom requis', + nameRequiredDesc: 'Donne une clé de configuration à ce serveur MCP.', + invalidJson: 'La configuration du serveur doit être un objet JSON', + invalidJsonDesc: 'JSON MCP invalide', + saved: 'Serveur MCP enregistré', + name => `${name} s'applique après rechargement MCP.`, + saveFailed: 'Échec de l\'enregistrement', + removeFailed: 'Échec de la suppression', + gatewayUnavailable: 'Passerelle indisponible', + gatewayUnavailableDesc: 'Reconnecte la passerelle avant de recharger MCP.', + reloadedTitle: 'Outils MCP rechargés', + reloadedDesc: 'Les nouveaux schémas d\'outils s\'appliquent aux nouveaux tours.', + reloadFailed: 'Échec du rechargement MCP', + giveConfigKey: 'Donne une clé de configuration à ce serveur MCP.', + reconnectGateway: 'Reconnecte la passerelle avant de recharger MCP.', + newSchemas: 'Les nouveaux schémas d\'outils s\'appliquent aux nouveaux tours.', + loadingServers: 'Chargement des serveurs MCP...', + serverName: 'Nom', + serversTitle: 'Serveurs MCP', + noServersTitle: 'Aucun serveur MCP', + failedToLoad: 'Échec du chargement de la configuration MCP', + invalidJsonShort: 'JSON MCP invalide', + serverSaved: 'Serveur MCP enregistré', + toolsReloaded: 'Outils MCP rechargés', + emptyDesc: 'Ajoute un serveur stdio ou HTTP pour exposer des outils MCP.', + }, + tools: { + title: 'Outils & Skills', + noTools: 'Aucun outil disponible.', + }, + nav: { + home: 'Accueil', + chat: 'Discussion', + settings: 'Paramètres', + files: 'Fichiers', + terminal: 'Terminal', + }, + header: { + search: 'Rechercher ou taper une commande…', + }, + model: { + auxTask: { + vision: 'Vision', + visionHint: 'Analyse d\'images', + web_extract: 'Extraction web', + web_extractHint: 'Résumé de page', + compression: 'Compression', + compressionHint: 'Compactage du contexte', + session_search: 'Recherche de sessions', + session_searchHint: 'Requêtes de rappel', + skills_hub: 'Hub de skills', + skills_hubHint: 'Recherche de skills', + approval: 'Approbation', + approvalHint: 'Approbation auto intelligente', + mcp: 'MCP', + mcpHint: 'Routage d\'outils MCP', + title_generation: 'Génération de titre', + title_generationHint: 'Titres de session', + curator: 'Curateur', + curatorHint: 'Revue d\'utilisation des skills', + }, + mainModel: 'Modèle principal', + mainDesc: 'S\'applique aux nouvelles sessions. Utilise le sélecteur de modèle dans l\'éditeur pour changer à chaud la discussion active.', + providerPlaceholder: 'Fournisseur', + modelPlaceholder: 'Modèle', + apply: 'Appliquer', + applying: 'Application…', + auxiliaryModels: 'Modèles auxiliaires', + auxiliaryDesc: 'Les tâches auxiliaires utilisent le modèle principal par défaut. Attribue un modèle dédié à une tâche pour le remplacer.', + resetAllToMain: 'Tout réinitialiser au modèle principal', + setToMain: 'Définir sur le modèle principal', + change: 'Modifier', + cancel: 'Annuler', + autoUseMain: 'auto · utiliser le modèle principal', + providerDefault: '(défaut du fournisseur)', + loading: 'Chargement de la configuration du modèle…', + options: 'Options', + thinking: 'Réflexion', + fast: 'Rapide', + effort: 'Effort', + noOptions: 'Aucune option pour ce modèle', + optionUpdateFailed: 'Échec de la mise à jour de l\'option du modèle', + fastModeUpdateFailed: 'Échec de la mise à jour du mode rapide', + effortMinimal: 'Minimal', + effortLow: 'Faible', + effortMedium: 'Moyen', + effortHigh: 'Élevé', + effortMax: 'Max', + switch: 'Changer de modèle', + unknown: '(inconnu)', + filterPlaceholder: 'Filtrer les fournisseurs et modèles...', + persistGlobal: 'Persister globalement', + persistGlobalSession: 'Persister globalement (sinon cette session uniquement)', + couldNotLoad: 'Impossible de charger les modèles', + proLockedDesc: 'Les modèles Pro nécessitent un abonnement Nous payant.', + priceTooltip: 'Prix entrée / sortie par million de tokens', + freePrice: 'Gratuit', + currentLabel: 'actuel :', + addProviderBtn: 'Ajouter un fournisseur', + }, + updates: { + checking: 'Vérification des mises à jour…', + available: 'Mise à jour disponible', + downloading: 'Téléchargement…', + installing: 'Installation…', + restart: 'Redémarrer pour mettre à jour', + stageGettingReady: 'Préparation…', + stageDownloading: 'Téléchargement…', + stageAlmostThere: 'Presque terminé…', + stageFinishingUp: 'Finalisation…', + stageRestarting: 'Redémarrage d\'Hermes…', + stageManual: 'Mettre à jour depuis ton terminal', + stageError: 'Mise à jour en pause', + updatingHermes: 'Mise à jour d\'Hermes…', + lookingForUpdates: 'Recherche de mises à jour…', + couldntCheck: 'Impossible de vérifier les mises à jour', + updateNotAvailable: 'Mise à jour non disponible', + checkConnection: 'Vérifie ta connexion et réessaie.', + onLatest: 'Tu utilises la dernière version.', + allSet: 'Tout est bon', + newUpdateAvailable: 'Nouvelle mise à jour disponible', + readyToInstall: 'Une nouvelle version d\'Hermes est prête à être installée.', + updateNow: 'Mettre à jour maintenant', + maybeLater: 'Peut-être plus tard', + count => `+ ${count} modification supplémentaire incluse.`, + count => `+ ${count} modifications supplémentaires incluses.`, + updateFromTerminal: 'Mettre à jour depuis ton terminal', + terminalDesc: 'Tu as installé Hermes depuis la ligne de commande, donc les mises à jour s\'exécutent aussi là-bas. Colle ceci dans ton terminal :', + copied: 'Copié', + copy: 'Copier', + pickupNewVersion: 'Hermes prendra la nouvelle version au prochain lancement.', + done: 'Terminé', + updaterDesc: 'L\'outil de mise à jour Hermes prendra le relais dans sa propre fenêtre et rouvrira Hermes une fois terminé.', + closeToApply: 'Hermes va se fermer pour appliquer la mise à jour.', + updateDidntFinish: 'La mise à jour ne s\'est pas terminée', + nothingLost: 'Pas d\'inquiétude — rien n\'a été perdu. Tu peux réessayer maintenant.', + notNow: 'Pas maintenant', + }, + errors: { + generic: 'Une erreur s\'est produite.', + notFound: 'Page introuvable.', + noPermission: 'Tu n\'as pas la permission d\'accéder à ceci.', + somethingBroke: 'Quelque chose a cassé dans l\'interface', + viewCrashedDesc: 'La vue a rencontré une erreur inattendue. Tes discussions et paramètres sont en sécurité — réessaie ou recharge la fenêtre.', + noProviders: 'Aucun fournisseur authentifié.', + }, + tool: { + toolCall: 'Appel d\'outil', + result: 'Résultat', + error: 'Erreur', + timeout: 'Expiré', + cancelled: 'Annulé', + running: 'En cours', + recovered: 'Récupéré', + done: 'Terminé', + output: 'Sortie de l\'outil', + searchResults: 'Résultats de recherche', + rawResponse: 'Réponse brute', + stdout: 'sortie standard', + stderr: 'erreur standard', + copyActivity: 'Copier l\'activité', + recoveredAfter: 'Récupéré après 1 étape échouée', + count => `Récupéré après ${count} étapes échouées`, + oneStepFailed: '1 étape a échoué', + count => `${count} étapes ont échoué`, + }, + composer: { + startingHermes: 'Démarrage d\'Hermes...', + sendFollowUp: 'Envoyer un suivi', + message: 'Message', + editingQueued: 'Édition du tour en attente dans l\'éditeur', + attach: 'Joindre', + files: 'Fichiers…', + folder: 'Dossier…', + images: 'Images…', + pasteImage: 'Coller une image', + url: 'URL…', + promptSnippets: 'Extraits de prompt', + promptSnippetsDesc: 'Choisis un prompt de démarrage à déposer dans l\'éditeur.', + voiceStart: 'Démarrer une conversation vocale', + queue: 'Mettre en file d\'attente', + speaking: 'En train de parler', + transcribing: 'Transcription en cours', + muted: 'Micro coupé', + listening: 'À l\'écoute', + unmuteMic: 'Réactiver le micro', + muteMic: 'Couper le micro', + stopListening: 'Arrêter l\'écoute et envoyer', + endVoice: 'Terminer la conversation vocale', + end: 'Terminer', + stopDictation: 'Arrêter la dictée', + transcribingDictation: 'Transcription de la dictée', + voiceDictation: 'Dictée vocale', + addContext: 'Ajouter du contexte', + }, + models: { + title: 'Modèles', + search: 'Rechercher des modèles', + addProvider: 'Ajouter un fournisseur…', + }, + install: { + title: 'Hermes a besoin d\'une installation unique', + desc: 'L\'installation automatique au premier lancement n\'est pas disponible sur', + descEnd: 'pour le moment. Ouvre Terminal et exécute la commande ci-dessous, puis relance cette application. Les lancements suivants passeront cette étape.', + installCommand: 'Commande d\'installation', + copyCommand: 'Copier la commande', + viewDocs: 'Voir la documentation d\'installation', + willInstallTo: 'Sera installé dans', + iRanIt: 'Je l\'ai exécutée — réessayer', + failed: 'Échec de l\'installation', + settingUp: 'Configuration d\'Hermes Agent', + finishingUp: 'Finalisation', + failedDesc: 'Une des étapes d\'installation a échoué. Sur Windows, cela peut arriver si une autre instance du CLI ou du bureau Hermes est en cours d\'exécution. Arrête toutes les instances Hermes en cours, puis réessaie. Consulte les détails ci-dessous ou le log du bureau pour la transcription complète.', + setupDesc: 'Il s\'agit d\'une configuration unique. L\'installateur Hermes télécharge les dépendances et configure ta machine. Les lancements suivants passeront cette étape.', + fetchingManifest: 'Récupération du manifeste d\'installation...', + error: 'Erreur', + showOutput: 'Afficher la sortie de l\'installateur', + hideOutput: 'Masquer la sortie de l\'installateur', + noOutput: 'Aucune sortie pour le moment.', + cancelInstall: 'Annuler l\'installation', + cancelling: 'Annulation...', + copyOutput: 'Copier la sortie', + copied: 'Copié !', + reloadRetry: 'Recharger et réessayer', + saveLogs: 'Transcription complète enregistrée dans', + stepsComplete: 'étapes terminées', + nowLabel: 'maintenant', + line: 'ligne', + lines: 'lignes', + }, + previewConsole: { + resizeLabel: 'Redimensionner la console d\'aperçu', + noMessages: 'Aucun message console pour le moment.', + }, + boot: { + ipcUnavailable: 'Le pont IPC du bureau est indisponible.', + backendExited: 'Le processus en arrière-plan d\'Hermes s\'est arrêté pendant le démarrage.', + backendStoppedTitle: 'Backend arrêté', + backendStoppedMessage: 'Le processus en arrière-plan d\'Hermes s\'est arrêté.', + startingConnection: 'Démarrage de la connexion bureau', + connectingGateway: 'Connexion à la passerelle bureau en direct', + loadingConfig: 'Chargement des paramètres Hermes', + loadingSessions: 'Chargement des sessions récentes', + desktopBootFailed: 'Échec du démarrage du bureau', + couldNotStart: 'Hermes n\'a pas pu démarrer', + recoveryDesc: 'La passerelle en arrière-plan ne s\'est pas lancée. Essaie une des étapes de récupération ci-dessous — rien ici ne supprime tes discussions ou paramètres.', + retry: 'Réessayer', + repairInstall: 'Réparer l\'installation', + useLocalGateway: 'Utiliser la passerelle locale', + openLogs: 'Ouvrir les logs', + repairHint: 'La réparation réexécute l\'installateur et peut prendre quelques minutes sur une machine neuve.', + showLogs: 'Afficher les logs récents', + hideLogs: 'Masquer les logs récents', + }, + urlDialog: { + title: 'Joindre une URL', + description: 'Hermes va récupérer la page et l\'inclure comme contexte pour ce tour.', + placeholder: 'https://exemple.com/article', + hint: 'Inclus l\'URL complète, par ex.', + attach: 'Joindre', + }, + titlebar: { + hideSidebar: 'Masquer la barre latérale', + showSidebar: 'Afficher la barre latérale', + search: 'Rechercher', + searchTitle: 'Rechercher des sessions, vues et actions', + hideRightSidebar: 'Masquer la barre latérale droite', + showRightSidebar: 'Afficher la barre latérale droite', + unmuteHaptics: 'Réactiver le retour haptique', + muteHaptics: 'Couper le retour haptique', + openSettings: 'Ouvrir les paramètres', + profiles: 'Profils', + profilesDesc: 'Environnements Hermes avancés pour des personas, configurations, skills et SOUL.md séparés.', + manageProfiles: 'Gérer les profils', + language: 'Langue', + languageDesc: 'Choisissez une langue d\'affichage pour l\'interface.', + }, + pagination: { + ariaLabel: 'pagination', + prevAria: 'Aller à la page précédente', + prev: 'Précédent', + nextAria: 'Aller à la page suivante', + next: 'Suivant', + }, + bootstrap: { + pending: 'En attente', + running: 'Installation en cours', + done: 'Terminé', + skipped: 'Ignoré', + failed: 'Échoué', + }, + sidebar: { + sheetTitle: 'Barre latérale', + sheetDesc: 'Affiche la barre latérale mobile.', + toggle: 'Basculer la barre latérale', + }, + clarify: { + hermesIsAsking: 'Hermes demande', + loadingQuestion: 'Chargement de la question…', + otherTypeAnswer: 'Autre (tape ta réponse)', + placeholderAnswer: 'Tape ta réponse…', + cmdEnterToSend: '⌘/Ctrl + Entrée pour envoyer', + back: 'Retour', + skip: 'Passer', + couldNotSend: 'Impossible d\'envoyer la réponse de clarification', + n => `1–${n} pour choisir`, + }, + intro: { + fallback1h: 'Qu\'est-ce qu\'on fait avancer aujourd\'hui ?', + fallback1b: 'Envoie un bug, une branche, un plan ou une idée approximative. Je vais inspecter le dépôt et en faire la prochaine étape concrète.', + fallback2h: 'Qu\'est-ce qui te préoccupe ?', + fallback2b: 'Apporte le code, la question ou le point bloquant. Je lirai le contexte avant de faire des modifications.', + fallback3h: 'Qu\'est-ce qu\'Hermes devrait examiner ?', + fallback3b: 'Envoie la tâche, le chemin qui échoue ou le plan à moitié formé. Je t\'aiderai à le transformer en action.', + fallback4h: 'Par où commencer ?', + fallback4b: 'Apporte le problème, l\'objectif ou le fichier. J\'inspecterai d\'abord et garderai la prochaine étape concrète.', + fallback5h: 'Qu\'est-ce qui a besoin d\'attention ?', + fallback5b: 'Envoie le contexte que tu as. Je t\'aiderai à en faire un plan ou une correction.', + personality: { + label => `Le mode ${label} est activé. Sur quoi doit-on travailler ?`, + body1: 'Envoie la tâche, le fichier ou l\'idée approximative. J\'utiliserai ta voix configurée et garderai le travail ancré dans ce dépôt.', + label => `Qu'est-ce que ${label} Hermes doit voir ?`, + body2: 'Apporte le contexte ou le point bloquant. Je m\'adapterai à ta personnalité configurée.', + label => `Le mode ${label} est prêt.`, + body3: 'Envoie le problème, le fichier ou l\'idée. Je suivrai la personnalité que tu as configurée.', + label => `Qu'est-ce que ${label} Hermes doit attaquer ?`, + body4: 'Dépose la tâche ici. Je garderai le travail ancré dans le dépôt.', + heading5: 'Par où commencer ?', + label => `Donne-moi le contexte et je répondrai en mode ${label}.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'Aucun artefact trouvé', + }, + agents: { + spawnTree: 'Arbre de spawn', + liveSubagentActivity: 'Activité des sous-agents en direct pour le tour actuel.', + noLiveSubagents: 'Aucun sous-agent actif', + files: 'Fichiers', + label: 'Agents', + open: 'Ouvrir les agents', + close: 'Fermer les agents', + subagent: 'sous-agent', + subagents: 'sous-agents', + failed: 'échoué', + running: 'en cours', + }, + provider: { + desc: { + nousPortal: 'Surcharge de l\'URL de base du portail Nous', + openRouter: 'Clé API OpenRouter (pour les assistants de vision, de scraping web et MoA)', + google: 'Clé API Google AI Studio (également reconnue comme GEMINI_API_KEY)', + gemini: 'ID de projet GCP pour les niveaux Gemini payants (le niveau gratuit s\'approvisionne automatiquement)', + anthropic: 'Clé API Anthropic', + deepseek: 'URL de base personnalisée de l\'API DeepSeek (avancé)', + xai: 'Surcharge de l\'URL de base xAI', + huggingface: 'Surcharge de l\'URL de base Hugging Face Inference Providers', + kimi: 'Clé API Kimi / Moonshot Chine', + minimax: 'Surcharge de l\'URL de base MiniMax (Chine)', + minimaxCn: 'Clé API MiniMax Chine', + dashscope: 'URL de base DashScope personnalisée (défaut : endpoint OpenAI-compat coding-intl)', + glm: 'Clé API GLM (Z.AI)', + nvidia: 'Surcharge de l\'URL de base NVIDIA NIM (ex. http://localhost:8000/v1 pour NIM local)', + opencodeGo: 'Clé API OpenCode Go', + opencodeZen: 'Clé API OpenCode Zen', + xiaomi: 'Surcharge de l\'URL de base Xiaomi MiMo (défaut : https://api.xiaomimimo.com/v1)', + kiloCode: 'Clé API Kilo Code', + aiGateway: 'Clé API AI Gateway (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'Clé API ElevenLabs', + openai: 'Clé API OpenAI (pour le traitement vocal via proxy)', + mistral: 'Clé API Mistral (pour STT/TTS)', + groq: 'Clé API Groq (pour STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'URL de l\'API Firecrawl pour les instances auto-hébergées (optionnel)', + fal: 'FAL_KEY', + nous: 'Surcharge de l\'URL de base du portail Nous', + openrouter: 'Clé API OpenRouter (pour les assistants de vision, de scraping web et MoA)', + lmstudio: 'Surcharge de l\'URL de base Z.AI / GLM', + zai: 'URL de base Azure Foundry (définie via \'hermes model\' pour une configuration spécifique à l\'endpoint)', + stepfun: 'Surcharge de l\'URL de base StepFun Step Plan', + arcee: 'Surcharge de l\'URL de base Arcee AI', + gmi: 'Surcharge de l\'URL de base GMI Cloud', + qwenportal: 'Surcharge de l\'URL de base Qwen Portal (défaut : https://portal.qwen.ai/v1)', + opencodego: 'Surcharge de l\'URL de base OpenCode Go', + ollamacloud: 'Surcharge de l\'URL de base Ollama Cloud (défaut : https://ollama.com/v1)', + awsbedrock: 'Profil nommé AWS pour l\'authentification Bedrock (depuis ~/.aws/credentials)', + exa: 'Clé API Exa pour la recherche web et l\'extraction de contenu IA', + parallel: 'Clé API Parallel pour la recherche web et l\'extraction IA', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/hi.ts b/apps/desktop/src/i18n/hi.ts new file mode 100644 index 000000000000..7151fe0bb590 --- /dev/null +++ b/apps/desktop/src/i18n/hi.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const hi = defineLocale( +{ + appearance: { + title: 'दिखावट', + description: 'ये केवल डेस्कटॉप प्रदर्शन प्राथमिकताएँ हैं। मोड चमक को नियंत्रित करता है; थीम एक्सेंट पैलेट और चैट सतह की स्टाइलिंग को नियंत्रित करती है।', + colorMode: 'रंग मोड', + colorModeDesc: 'एक निश्चित मोड चुनें या Hermes को आपकी सिस्टम सेटिंग का अनुसरण करने दें।', + theme: { + nous: 'Nous', + nousDesc: 'Nous नीले एक्सेंट के साथ ग्लास न्यूट्रल', + midnight: 'मिडनाइट', + midnightDesc: 'ठंडे एक्सेंट के साथ गहरा नीला-बैंगनी', + ember: 'एम्बर', + emberDesc: 'गर्म क्रिमसन और कांस्य — फोर्ज जैसा अनुभव', + mono: 'मोनो', + monoDesc: 'साफ ग्रेस्केल — न्यूनतम और केंद्रित', + cyberpunk: 'साइबरपंक', + cyberpunkDesc: 'काले पर नीयन हरा — मैट्रिक्स टर्मिनल', + slate: 'स्लेट', + slateDesc: 'ठंडा स्लेट नीला — डेवलपर के लिए केंद्रित थीम', + }, + themeDesc: 'चैट सतह और इंटरफ़ेस एक्सेंट के लिए रंग पैलेट चुनें।', + mode: { + light: 'लाइट', + lightDesc: 'चमकदार डेस्कटॉप सतह', + dark: 'डार्क', + darkDesc: 'कम चमक वाला कार्यक्षेत्र', + system: 'सिस्टम', + systemDesc: 'OS की दिखावट का अनुसरण करें', + }, + language: 'भाषा', + languageDesc: 'UI भाषा चुनें या Hermes को आपकी सिस्टम सेटिंग का अनुसरण करने दें।', + toolCallDisplay: 'टूल कॉल प्रदर्शन', + toolCallDisplayDesc: 'Product कच्चे टूल पेलोड को छिपाता है; Technical पूर्ण इनपुट/आउटपुट दिखाता है।', + toolViewProduct: 'Product', + toolViewTechnical: 'Technical', + toolViewProductDesc: 'संक्षिप्त सारांश के साथ मानव-अनुकूल टूल गतिविधि।', + toolViewTechnicalDesc: 'कच्चे टूल आर्ग और परिणाम और निम्न-स्तरीय विवरण शामिल करें।', + }, + settings: { + title: 'सेटिंग्स', + appearance: 'दिखावट', + model: 'मॉडल', + gateway: 'गेटवे', + sessions: 'सत्र', + tools: 'टूल्स और स्किल्स', + section: { + chat: 'चैट', + workspace: 'कार्यक्षेत्र', + safety: 'सुरक्षा', + memory: 'मेमोरी और संदर्भ', + voice: 'आवाज़', + advanced: 'उन्नत', + }, + mcp: 'MCP सर्वर', + config: 'कॉन्फ़िग', + keys: 'API कुंजियाँ', + about: 'के बारे में', + closeSettings: 'सेटिंग्स बंद करें', + archivedChats: 'संग्रहीत चैट', + exportConfig: 'कॉन्फ़िग निर्यात करें', + importConfig: 'कॉन्फ़िग आयात करें', + resetDefaults: 'डिफ़ॉल्ट पर रीसेट करें', + llmProviders: 'LLM प्रदाता', + searchPlaceholder: { + about: 'Hermes Desktop के बारे में', + config: 'सेटिंग्स खोजें…', + gateway: 'गेटवे कनेक्शन…', + keys: 'API कुंजियाँ खोजें…', + mcp: 'MCP सर्वर खोजें…', + sessions: 'संग्रहीत सत्र खोजें…', + }, + }, + chat: { + placeholder: 'मुझसे कुछ भी पूछें…', + send: 'भेजें', + stop: 'रोकें', + thinking: 'सोच रहा है…', + noSession: 'कोई सक्रिय सत्र नहीं। नई बातचीत शुरू करें।', + loadingSession: 'सत्र लोड हो रहा है', + loadingResponse: 'Hermes प्रतिक्रिया लोड कर रहा है', + branchInNewChat: 'नई चैट में शाखा बनाएँ', + readAloud: 'ज़ोर से पढ़ें', + preparingAudio: 'ऑडियो तैयार हो रहा है...', + stopReading: 'पढ़ना बंद करें', + editMessage: 'संदेश संपादित करें', + editableCheckpoint: 'संपादन योग्य चेकपॉइंट', + restoreCheckpoint: 'चेकपॉइंट पुनर्स्थापित करें', + goForward: 'आगे बढ़ें', + restorePrevCheckpoint: 'पिछला चेकपॉइंट पुनर्स्थापित करें', + restoreNextCheckpoint: 'अगला चेकपॉइंट पुनर्स्थापित करें', + composerTip: 'सुझाव: फ़ाइलों को इनलाइन संदर्भित करने के लिए @ टाइप करें।', + reconnecting: 'Hermes से पुनः कनेक्ट हो रहा है…', + }, + commandCenter: { + title: 'कमांड सेंटर', + noSessions: 'अभी तक कोई सत्र नहीं।', + loadingStatus: 'स्थिति लोड हो रही है…', + recentLogs: 'हाल के लॉग', + dailyTokens: 'दैनिक टोकन', + noActivity: 'कोई दैनिक गतिविधि नहीं।', + noModelUsage: 'अभी तक कोई मॉडल उपयोग नहीं।', + noSkillActivity: 'अभी तक कोई स्किल गतिविधि नहीं।', + sessionsPanel: 'सत्र पैनल', + systemPanel: 'सिस्टम पैनल', + usagePanel: 'उपयोग पैनल', + navigate: 'नेविगेट करें', + noMatchingResults: 'कोई मेल खाता परिणाम नहीं मिला।', + noSessionsYet: 'अभी तक कोई सत्र नहीं।', + unpinSession: 'सत्र अनपिन करें', + pinSession: 'सत्र पिन करें', + exportSession: 'सत्र निर्यात करें', + deleteSession: 'सत्र हटाएँ', + gatewayRunning: 'मैसेजिंग गेटवे चल रहा है', + gatewayStopped: 'मैसेजिंग गेटवे रुका हुआ', + restartMsg: 'मैसेजिंग पुनः आरंभ करें', + updateHermes: 'Hermes अपडेट करें', + noLogsLoaded: 'अभी तक कोई लॉग लोड नहीं।', + closeLabel: 'कमांड सेंटर बंद करें', + searchPlaceholder: 'सत्र, व्यू और कार्रवाइयाँ खोजें', + statSessions: 'सत्र', + statApiCalls: 'API कॉल', + statTokens: 'टोकन इन/आउट', + statEstCost: 'अनुमानित लागत', + cost => `वास्तविक ${cost}`, + loadingUsage: 'उपयोग लोड हो रहा है...', + count => `पिछले ${count} दिनों में कोई उपयोग नहीं।`, + retry: 'पुनः प्रयास करें', + tokenInput: 'इनपुट', + tokenOutput: 'आउटपुट', + noDailyActivity: 'कोई दैनिक गतिविधि नहीं।', + topModels: 'शीर्ष मॉडल', + topSkills: 'शीर्ष स्किल्स', + actionsLabel: 'कार्रवाइयाँ', + systemRunning: 'चल रहा है', + systemDone: 'पूर्ण', + systemFailed: 'विफल', + open: 'कमांड सेंटर खोलें', + close: 'कमांड सेंटर बंद करें', + }, + common: { + loading: 'लोड हो रहा है…', + save: 'सहेजें', + cancel: 'रद्द करें', + close: 'बंद करें', + delete: 'हटाएँ', + confirm: 'पुष्टि करें', + search: 'खोजें…', + clearSearch: 'खोज साफ़ करें', + copy: 'कॉपी करें', + refresh: 'ताज़ा करें', + moreActions: 'अधिक कार्रवाइयाँ', + tryAgain: 'पुनः प्रयास करें', + }, + onboarding: { + welcome: 'Hermes में आपका स्वागत है', + getStarted: 'प्रदाता और मॉडल चुनकर शुरुआत करें।', + skip: 'छोड़ें', + continue: 'जारी रखें', + finish: 'समाप्त करें', + setupTitle: 'आइए आपको Hermes Agent के साथ सेटअप करें', + setupDesc: 'चैटिंग शुरू करने के लिए मॉडल प्रदाता कनेक्ट करें। अधिकांश विकल्प एक क्लिक में हो जाते हैं।', + preparing: 'Hermes शुरू हो रहा है…', + installing: 'Hermes इंस्टॉल पूरा कर रहा है। पहली बार चलने पर आमतौर पर एक मिनट से कम लगता है।', + lookingUp: 'प्रदाताओं की खोज हो रही है...', + otherProviders: 'अन्य प्रदाता', + collapse: 'संकुचित करें', + iHaveKey: 'मेरे पास API कुंजी है', + recommended: 'अनुशंसित', + connected: 'कनेक्टेड', + backToSignIn: 'साइन इन पर वापस जाएँ', + getKey: 'कुंजी प्राप्त करें', + pasteKey: 'API कुंजी पेस्ट करें', + connect: 'कनेक्ट करें', + connecting: 'कनेक्ट हो रहा है', + copyCode: 'कॉपी करें', + startSignIn: 'के लिए साइन इन शुरू हो रहा है', + verifyingCode: 'के साथ आपका कोड सत्यापित हो रहा है', + pickingModel: 'कनेक्टेड। डिफ़ॉल्ट मॉडल चुना जा रहा है...', + signInFailed: 'साइन इन विफल। पुनः प्रयास करें।', + pickDifferent: 'कोई अन्य प्रदाता चुनें', + signInTitle: 'के साथ साइन इन करें', + step1: 'हमने खोला', + step1End: 'आपके ब्राउज़र में।', + step2: 'वहाँ Hermes को अधिकृत करें।', + step3: 'प्राधिकरण कोड कॉपी करें और नीचे पेस्ट करें।', + pasteCode: 'प्राधिकरण कोड पेस्ट करें', + reopenAuth: 'प्राधिकरण पृष्ठ पुनः खोलें', + cancel: 'रद्द करें', + browserDesc: 'हमने खोला', + browserDescEnd: 'आपके ब्राउज़र में। वहाँ Hermes को अधिकृत करें और आप स्वचालित रूप से कनेक्ट हो जाएँगे — कॉपी या पेस्ट करने की ज़रूरत नहीं।', + waitingAuth: 'आपके अधिकृत करने की प्रतीक्षा हो रही है...', + reopenSignIn: 'साइन इन पृष्ठ पुनः खोलें', + externalDesc: 'अपने CLI के माध्यम से साइन इन करता है। टर्मिनल में यह कमांड चलाएँ, फिर वापस आकर "मैंने साइन इन कर लिया" चुनें:', + iSignedIn: 'मैंने साइन इन कर लिया', + enterCode: 'हमने खोला', + enterCodeEnd: 'आपके ब्राउज़र में। वहाँ यह कोड दर्ज करें:', + reopenVerification: 'सत्यापन पृष्ठ पुनः खोलें', + defaultModel: 'डिफ़ॉल्ट मॉडल', + freeTier: 'मुफ़्त स्तर', + pro: 'प्रो', + change: 'बदलें', + startChatting: 'चैटिंग शुरू करें', + docs: 'दस्तावेज़', + close: 'बंद करें', + savingError: 'क्रेडेंशियल सहेज नहीं सका।', + openRouter: 'OpenRouter', + }, + file: { + browser: 'फ़ाइल ब्राउज़र', + noFiles: 'अभी तक कोई फ़ाइल नहीं।', + }, + terminal: { + title: 'टर्मिनल', + newTab: 'नया टैब', + closeTab: 'टैब बंद करें', + }, + skills: { + title: 'स्किल्स', + search: 'स्किल्स खोजें…', + noResults: 'कोई स्किल नहीं मिली।', + tools: 'स्किल्स और टूल्स', + }, + profiles: { + title: 'प्रोफ़ाइल', + noProfilesYet: 'अभी तक कोई प्रोफ़ाइल नहीं।', + selectProfile: 'विवरण देखने के लिए प्रोफ़ाइल चुनें।', + deleteProfile: 'प्रोफ़ाइल हटाएँ?', + soulMd: 'SOUL.md', + unsavedChanges: 'सहेजे न गए बदलाव', + newProfile: 'नई प्रोफ़ाइल', + cloneFromDefault: 'डिफ़ॉल्ट से क्लोन करें', + renameProfile: 'प्रोफ़ाइल का नाम बदलें', + }, + cron: { + title: 'क्रॉन जॉब्स', + noJobs: 'कोई निर्धारित जॉब नहीं।', + deleteCronJob: 'क्रॉन जॉब हटाएँ?', + optional: 'वैकल्पिक', + label: 'क्रॉन', + open: 'क्रॉन जॉब्स खोलें', + }, + messaging: { + title: 'मैसेजिंग', + recommended: 'अनुशंसित', + recommendedTelegram: 'अनुशंसित। @userinfobot से अल्पविराम से अलग संख्यात्मक ID। इसके बिना, कोई भी आपके बॉट को DM कर सकता है।', + recommendedDiscord: 'अनुशंसित। अल्पविराम से अलग Discord उपयोगकर्ता ID।', + recommendedSlack: 'अनुशंसित। अल्पविराम से अलग Slack उपयोगकर्ता ID।', + recommendedMattermost: 'अनुशंसित। अल्पविराम से अलग Mattermost उपयोगकर्ता ID।', + recommendedMatrix: 'अनुशंसित। @user:server प्रारूप में अल्पविराम से अलग उपयोगकर्ता ID।', + recommendedSignal: 'अनुशंसित। अल्पविराम से अलग Signal पहचानकर्ता।', + recommendedWhatsApp: 'अनुशंसित। अल्पविराम से अलग फ़ोन नंबर या WhatsApp ID।', + gatewayStopped: 'मैसेजिंग गेटवे रुका हुआ', + getCredentials: 'अपने क्रेडेंशियल प्राप्त करें', + required: 'आवश्यक', + unsavedChanges: 'सहेजे न गए बदलाव', + saved: 'सहेजा गया', + }, + about: { + version: 'संस्करण', + checkUpdates: 'अपडेट जाँचें', + upToDate: 'Hermes नवीनतम संस्करण पर है।', + updateAvailable: 'एक अपडेट उपलब्ध है।', + license: 'MIT लाइसेंस', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'संस्करण अनुपलब्ध', + updates: 'अपडेट', + checkNow: 'अभी जाँचें', + checking: 'जाँच हो रही है…', + seeWhatsNew: 'देखें नया क्या है', + releaseNotes: 'रिलीज़ नोट्स', + autoUpdates: 'स्वचालित अपडेट', + autoUpdatesDesc: 'Hermes पृष्ठभूमि में स्वचालित रूप से अपडेट की जाँच करता है और जब कोई तैयार होता है तो आपको सूचित करता है।', + selfUpdateUnsupported: 'यह बिल्ड ऐप के भीतर से खुद को अपडेट नहीं कर सकता।', + cannotReachServer: 'हम अपडेट सर्वर तक नहीं पहुँच सके।', + installingUpdate: 'अभी एक अपडेट इंस्टॉल हो रहा है।', + count => `एक नया अपडेट तैयार है (${count} बदलाव शामिल)।`, + count => `एक नया अपडेट तैयार है (${count} बदलाव शामिल)।`, + onLatest: 'आप नवीनतम संस्करण पर हैं।', + tapCheckNow: 'अपडेट खोजने के लिए "अभी जाँचें" पर टैप करें।', + time => `अंतिम जाँच ${time}`, + justNow: 'अभी-अभी', + never: 'कभी नहीं', + count => `${count} मिनट पहले`, + count => `${count} घंटे पहले`, + count => `${count} दिन पहले`, + (branch, sha) => `शाखा ${branch} · कमिट ${sha}`, + }, + keys: { + title: 'API कुंजियाँ', + noKeys: 'कोई API कुंजी कॉन्फ़िगर नहीं की गई।', + addKey: 'कुंजी जोड़ें', + loading: 'API कुंजियाँ और क्रेडेंशियल लोड हो रहे हैं…', + docs: 'दस्तावेज़', + openDocs: 'प्रदाता दस्तावेज़ खोलें', + hideValue: 'मान छिपाएँ', + revealValue: 'मान दिखाएँ', + set: 'सेट', + notSet: 'सेट नहीं', + replace: 'बदलें', + replaceValue: 'वर्तमान मान बदलें', + enterValue: 'मान दर्ज करें', + saving: 'सहेजा जा रहा है', + save: 'सहेजें', + cancel: 'रद्द करें', + clearValue: 'मान हटाएँ', + (count, total) => `${count} में से ${total} कॉन्फ़िगर`, + (count, total) => `${count} में से ${total} सेट`, + count => `${count} सेट`, + count => `${count} कुंजियाँ`, + otherProviders: 'अन्य प्रदाता', + categoryTools: 'टूल्स', + categoryMessaging: 'मैसेजिंग', + categorySettings: 'सेटिंग्स', + openProviderDocs: 'प्रदाता दस्तावेज़ खोलें', + showAdvanced: 'उन्नत दिखाएँ', + loadFailed: 'API कुंजियाँ लोड करने में विफल', + credentialSaved: 'क्रेडेंशियल सहेजा गया', + credentialRemoved: 'क्रेडेंशियल हटाया गया', + }, + config: { + title: 'कॉन्फ़िगरेशन', + edit: 'कॉन्फ़िग संपादित करें', + reload: 'कॉन्फ़िग पुनः लोड करें', + notSet: 'सेट नहीं', + commaSeparated: 'अल्पविराम से अलग किए गए मान', + on: 'चालू', + off: 'बंद', + none: 'कोई नहीं', + emptyOption: '(कोई नहीं)', + loading: 'Hermes कॉन्फ़िगरेशन लोड हो रहा है…', + noMatching: 'कोई मेल खाती सेटिंग नहीं', + noMatchingDesc: 'कोई अन्य खोज शब्द आज़माएँ या कोई अन्य अनुभाग चुनें।', + count => `${count} परिणाम`, + count => `${count} परिणाम`, + saving: 'सहेजा जा रहा है…', + label: { + defaultModel: 'डिफ़ॉल्ट मॉडल', + contextWindow: 'संदर्भ विंडो', + fallbackModels: 'फ़ॉलबैक मॉडल', + enabledToolsets: 'सक्षम टूलसेट', + timezone: 'समय क्षेत्र', + personality: 'व्यक्तित्व', + reasoningBlocks: 'तर्क ब्लॉक', + maxAgentSteps: 'अधिकतम एजेंट चरण', + imageAttachments: 'छवि संलग्नक', + workingDirectory: 'कार्य निर्देशिका', + executionBackend: 'निष्पादन बैकएंड', + commandTimeout: 'कमांड समय सीमा', + persistentShell: 'स्थायी शेल', + envPassthrough: 'एनवायरनमेंट पासथ्रू', + fileReadLimit: 'फ़ाइल पढ़ने की सीमा', + terminalOutputLimit: 'टर्मिनल आउटपुट सीमा', + filePageLimit: 'फ़ाइल पृष्ठ सीमा', + lineLengthLimit: 'पंक्ति लंबाई सीमा', + codeExecutionMode: 'कोड निष्पादन मोड', + approvalMode: 'अनुमोदन मोड', + approvalTimeout: 'अनुमोदन समय सीमा', + confirmMcpReloads: 'MCP पुनः लोड की पुष्टि करें', + commandAllowlist: 'कमांड अनुमति सूची', + redactSecrets: 'गुप्त जानकारी छिपाएँ', + allowPrivateUrls: 'निजी URL की अनुमति दें', + browserPrivateUrls: 'ब्राउज़र निजी URL', + localBrowserForPrivateUrls: 'निजी URL के लिए स्थानीय ब्राउज़र', + fileCheckpoints: 'फ़ाइल चेकपॉइंट्स', + checkpointLimit: 'चेकपॉइंट सीमा', + voiceShortcut: 'ध्वनि शॉर्टकट', + maxRecordingLength: 'अधिकतम रिकॉर्डिंग लंबाई', + readResponsesAloud: 'प्रतिक्रियाएँ ज़ोर से पढ़ें', + speechToText: 'स्पीच टू टेक्स्ट', + speechToTextProvider: 'स्पीच-टू-टेक्स्ट प्रदाता', + localTranscriptionModel: 'स्थानीय ट्रांसक्रिप्शन मॉडल', + transcriptionLanguage: 'ट्रांसक्रिप्शन भाषा', + elevenlabsSttModel: 'ElevenLabs STT मॉडल', + elevenlabsLanguage: 'ElevenLabs भाषा', + tagAudioEvents: 'ऑडियो इवेंट टैग करें', + speakerDiarization: 'वक्ता डायराइज़ेशन', + textToSpeechProvider: 'टेक्स्ट-टू-स्पीच प्रदाता', + edgeVoice: 'Edge आवाज़', + openaiTtsModel: 'OpenAI TTS मॉडल', + openaiVoice: 'OpenAI आवाज़', + elevenlabsVoice: 'ElevenLabs आवाज़', + elevenlabsModel: 'ElevenLabs मॉडल', + persistentMemory: 'स्थायी मेमोरी', + userProfile: 'उपयोगकर्ता प्रोफ़ाइल', + memoryBudget: 'मेमोरी बजट', + profileBudget: 'प्रोफ़ाइल बजट', + memoryProvider: 'मेमोरी प्रदाता', + contextEngine: 'संदर्भ इंजन', + autoCompression: 'ऑटो-संपीड़न', + compressionThreshold: 'संपीड़न सीमा', + compressionTarget: 'संपीड़न लक्ष्य', + protectedRecentMessages: 'संरक्षित हालिया संदेश', + apiRetries: 'API पुनर्प्रयास', + serviceTier: 'सेवा स्तर', + toolUseEnforcement: 'टूल-उपयोग प्रवर्तन', + subagentModel: 'सबएजेंट मॉडल', + subagentProvider: 'सबएजेंट प्रदाता', + subagentTurnLimit: 'सबएजेंट टर्न सीमा', + parallelSubagents: 'समानांतर सबएजेंट', + subagentTimeout: 'सबएजेंट समय सीमा', + subagentReasoningEffort: 'सबएजेंट तर्क प्रयास', + }, + desc: { + defaultModel: 'नई चैट के लिए उपयोग किया जाता है जब तक आप कंपोज़र में कोई अन्य मॉडल न चुनें।', + contextWindow: 'चयनित मॉडल की पहचानी गई संदर्भ विंडो का उपयोग करने के लिए 0 पर छोड़ें।', + fallbackModels: 'यदि डिफ़ॉल्ट मॉडल विफल हो जाए तो प्रयास करने के लिए बैकअप provider:model प्रविष्टियाँ।', + personality: 'नए सत्रों के लिए डिफ़ॉल्ट सहायक शैली।', + timezone: 'जब Hermes को स्थानीय समय संदर्भ की आवश्यकता हो तब उपयोग किया जाता है। खाली छोड़ने पर सिस्टम समय क्षेत्र का उपयोग होता है।', + reasoningBlocks: 'जब बैकएंड प्रदान करे तब तर्क अनुभाग दिखाएँ।', + imageAttachments: 'नियंत्रित करता है कि छवि संलग्नक मॉडल को कैसे भेजे जाएँ।', + workingDirectory: 'टूल और टर्मिनल कार्य के लिए डिफ़ॉल्ट प्रोजेक्ट फ़ोल्डर।', + codeExecutionMode: 'कोड निष्पादन वर्तमान प्रोजेक्ट तक कितनी सख्ती से सीमित है।', + persistentShell: 'जब बैकएंड समर्थन करे तब कमांड के बीच शेल स्थिति बनाए रखें।', + envPassthrough: 'टूल निष्पादन में पास करने के लिए एनवायरनमेंट वेरिएबल।', + fileReadLimit: 'अधिकतम अक्षर जो Hermes एक फ़ाइल अनुरोध से पढ़ सकता है।', + approvalMode: 'Hermes उन कमांड को कैसे संभालता है जिन्हें स्पष्ट अनुमोदन की आवश्यकता होती है।', + approvalTimeout: 'अनुमोदन प्रॉम्प्ट समय समाप्त होने से पहले कितनी देर प्रतीक्षा करते हैं।', + redactSecrets: 'जब संभव हो तो मॉडल-दृश्य सामग्री से पहचाने गए गुप्त डेटा को छिपाएँ।', + fileCheckpoints: 'फ़ाइल संपादन से पहले रोलबैक स्नैपशॉट बनाएँ।', + persistentMemory: 'स्थायी यादें सहेजें जो भविष्य के सत्रों में मदद कर सकती हैं।', + userProfile: 'उपयोगकर्ता प्राथमिकताओं की एक संक्षिप्त प्रोफ़ाइल बनाए रखें।', + contextEngine: 'संदर्भ सीमा के निकट लंबी बातचीत प्रबंधित करने की रणनीति।', + autoCompression: 'जब बातचीत बड़ी हो जाए तो पुराने संदर्भ का सारांश बनाएँ।', + readResponsesAloud: 'सहायक प्रतिक्रियाएँ स्वचालित रूप से बोलें।', + speechToText: 'स्थानीय या प्रदाता-समर्थित स्पीच ट्रांसक्रिप्शन सक्षम करें।', + elevenlabsLanguage: 'वैकल्पिक ISO-639-3 भाषा कोड। खाली छोड़ने पर ElevenLabs ऑटो-डिटेक्ट करता है।', + maxAgentSteps: 'Hermes के रन रोकने से पहले टूल-कॉलिंग टर्न की ऊपरी सीमा।', + }, + }, + gateway: { + title: 'गेटवे', + start: 'गेटवे शुरू करें', + stop: 'गेटवे रोकें', + restart: 'गेटवे पुनः आरंभ करें', + running: 'चल रहा है', + stopped: 'रुका हुआ', + loading: 'गेटवे सेटिंग्स लोड हो रही हैं…', + unavailable: 'गेटवे सेटिंग्स अनुपलब्ध', + unavailableDesc: 'डेस्कटॉप IPC ब्रिज गेटवे सेटिंग्स प्रदान नहीं करता।', + connection: 'गेटवे कनेक्शन', + envOverride: 'env ओवरराइड', + desc: 'Hermes Desktop डिफ़ॉल्ट रूप से अपना स्थानीय गेटवे शुरू करता है। जब आप चाहते हैं कि यह ऐप किसी अन्य मशीन या विश्वसनीय प्रॉक्सी के पीछे पहले से चल रहे Hermes बैकएंड को नियंत्रित करे तो रिमोट गेटवे का उपयोग करें।', + envOverrideTitle: 'एनवायरनमेंट वेरिएबल इस डेस्कटॉप सत्र को नियंत्रित कर रहे हैं।', + (urlVar, tokenVar) => `नीचे सहेजी गई सेटिंग का उपयोग करने के लिए ${urlVar} और ${tokenVar} को अनसेट करें।`, + localTitle: 'स्थानीय गेटवे', + localDesc: 'लोकलहोस्ट पर एक निजी Hermes बैकएंड शुरू करें। यह डिफ़ॉल्ट है और ऑफ़लाइन काम करता है।', + remoteTitle: 'रिमोट गेटवे', + remoteDesc: 'इस डेस्कटॉप शेल को सत्र टोकन का उपयोग करके रिमोट Hermes बैकएंड से कनेक्ट करें।', + remoteUrl: 'रिमोट URL', + remoteUrlDesc: 'रिमोट डैशबोर्ड बैकएंड के लिए बेस URL। पथ उपसर्ग समर्थित हैं, उदाहरण के लिए /hermes।', + remoteUrlPlaceholder: 'https://gateway.example.com/hermes', + sessionToken: 'सत्र टोकन', + sessionTokenDesc: 'REST और WebSocket एक्सेस के लिए उपयोग किया जाने वाला डैशबोर्ड सत्र टोकन। सहेजे गए टोकन को रखने के लिए खाली छोड़ें।', + sessionTokenPlaceholder: 'सत्र टोकन पेस्ट करें', + preview => `मौजूदा टोकन ${preview}`, + tokenSaved: 'सहेजा गया', + testRemote: 'रिमोट परीक्षण करें', + saveRestart: 'अगले पुनः आरंभ के लिए सहेजें', + saveReconnect: 'सहेजें और पुनः कनेक्ट करें', + diagnostics: 'निदान', + diagnosticsDesc: 'अपने फ़ाइल प्रबंधक में desktop.log दिखाएँ — जब गेटवे शुरू होने में विफल रहता है तो उपयोगी।', + openLogs: 'लॉग खोलें', + connected: 'कनेक्टेड', + connecting: 'कनेक्ट हो रहा है', + disconnected: 'डिस्कनेक्टेड', + inferenceReady: 'इन्फ़रेंस तैयार', + inferenceNotReady: 'इन्फ़रेंस तैयार नहीं', + checkingInference: 'इन्फ़रेंस जाँच हो रही है', + openSystemPanel: 'सिस्टम पैनल खोलें', + connectionLabel: 'कनेक्शन:', + recentActivity: 'हाल की गतिविधि', + viewAllLogs: 'सभी लॉग देखें →', + messagingPlatforms: 'मैसेजिंग प्लेटफ़ॉर्म', + label: 'गेटवे', + inferenceStatus: 'गेटवे इन्फ़रेंस स्थिति', + enterUrlFirst: 'स्विच करने से पहले रिमोट URL और सत्र टोकन दर्ज करें', + enterUrlFirstTest: 'परीक्षण करने से पहले रिमोट URL और सत्र टोकन दर्ज करें', + }, + sessions: { + title: 'सत्र', + search: 'सत्र खोजें…', + noResults: 'कोई सत्र नहीं मिला।', + export: 'निर्यात करें', + delete: 'सत्र हटाएँ', + loading: 'लोड हो रहा है…', + defaultProjectDir: 'डिफ़ॉल्ट प्रोजेक्ट निर्देशिका', + defaultProjectDirDesc: 'नए सत्र इस फ़ोल्डर में शुरू होते हैं जब तक आप कोई अन्य न चुनें। अपनी होम निर्देशिका का उपयोग करने के लिए इसे खाली छोड़ें।', + fallback => `डिफ़ॉल्ट ${fallback} है।`, + notSet: 'सेट नहीं', + change: 'बदलें', + choose: 'चुनें', + clear: 'हटाएँ', + archivedTitle: 'संग्रहीत सत्र', + archivedDesc: 'संग्रहीत चैट साइडबार से छिपी रहती हैं लेकिन उनके सभी संदेश सुरक्षित रहते हैं। साइडबार में किसी चैट को Ctrl/⌘-क्लिक करके संग्रहीत करें।', + nothingArchived: 'कुछ भी संग्रहीत नहीं', + noSearchMatch: 'आपकी खोज से मेल खाती कोई संग्रहीत चैट नहीं।', + archiveToHide: 'यहाँ छिपाने के लिए चैट को संग्रहीत करें।', + unarchive: 'अनआर्काइव करें', + deletePermanently: 'स्थायी रूप से हटाएँ', + count => `${count} संदेश`, + new: 'नया सत्र', + running: 'सत्र चल रहा है', + actions: 'सत्र कार्रवाइयाँ', + reorder: 'पुनर्क्रमित करें', + pin: 'पिन करें', + unpin: 'अनपिन करें', + copyId: 'ID कॉपी करें', + rename: 'नाम बदलें', + archive: 'संग्रहीत करें', + renameDialog: 'सत्र का नाम बदलें', + renameDesc: 'इस चैट को एक यादगार शीर्षक दें। हटाने के लिए खाली छोड़ें।', + untitled: 'शीर्षकहीन सत्र', + renamed: 'नाम बदला गया', + renameFailed: 'नाम बदलना विफल', + pinned: 'पिन किया गया', + results: 'परिणाम', + allPinned: 'यहाँ सब कुछ पिन किया गया है। हालिया में दिखाने के लिए चैट को अनपिन करें।', + pinHint: 'पिन करने के लिए Shift-क्लिक करें · पुनर्क्रमित करने के लिए खींचें', + loadMore: 'और लोड करें', + noWorkspace: 'कोई कार्यक्षेत्र नहीं', + ungroup: 'सत्रों को एकल सूची में दिखाएँ', + groupByWorkspace: 'सत्रों को कार्यक्षेत्र के अनुसार समूहित करें', + loadStep: 'लोड करें', + moreLabel: 'और', + nothingArchivedTitle: 'कुछ भी संग्रहीत नहीं', + deletePermanentlyTitle: 'स्थायी रूप से हटाएँ', + defaultProjectDirTitle: 'डिफ़ॉल्ट प्रोजेक्ट निर्देशिका', + loadingArchived: 'संग्रहीत सत्र लोड हो रहे हैं…', + restored: 'पुनर्स्थापित', + projectDirUpdated: 'डिफ़ॉल्ट प्रोजेक्ट निर्देशिका अपडेट की गई', + loadFailed: 'संग्रहीत सत्र लोड नहीं कर सका', + unarchiveFailed: 'अनआर्काइव विफल', + deleteFailed: 'हटाना विफल', + archiveHint: 'यहाँ छिपाने के लिए चैट को संग्रहीत करें।', + updateDirFailed: 'डिफ़ॉल्ट निर्देशिका अपडेट नहीं कर सका', + clearDirFailed: 'डिफ़ॉल्ट निर्देशिका साफ़ नहीं कर सका', + }, + mcp: { + title: 'MCP सर्वर', + addServer: 'सर्वर जोड़ें', + noServers: 'कोई MCP सर्वर कॉन्फ़िगर नहीं।', + loading: 'MCP सर्वर लोड हो रहे हैं…', + servers: 'MCP सर्वर', + count => `${count} कॉन्फ़िगर`, + newServer: 'नया सर्वर', + reloadMCP: 'MCP पुनः लोड करें', + reloading: 'पुनः लोड हो रहा है...', + noServersDesc: 'MCP टूल्स प्रदान करने के लिए stdio या HTTP सर्वर जोड़ें।', + name: 'नाम', + namePlaceholder: 'filesystem', + serverJSON: 'सर्वर JSON', + editServer: 'सर्वर संपादित करें', + saveServer: 'सर्वर सहेजें', + saving: 'सहेजा जा रहा है...', + remove: 'हटाएँ', + disabled: 'अक्षम', + nameRequired: 'नाम आवश्यक है', + nameRequiredDesc: 'इस MCP सर्वर को एक कॉन्फ़िग कुंजी दें।', + invalidJson: 'सर्वर कॉन्फ़िग एक JSON ऑब्जेक्ट होना चाहिए', + invalidJsonDesc: 'अमान्य MCP JSON', + saved: 'MCP सर्वर सहेजा गया', + name => `${name} MCP पुनः लोड के बाद लागू होता है।`, + saveFailed: 'सहेजना विफल', + removeFailed: 'हटाना विफल', + gatewayUnavailable: 'गेटवे अनुपलब्ध', + gatewayUnavailableDesc: 'MCP पुनः लोड करने से पहले गेटवे को पुनः कनेक्ट करें।', + reloadedTitle: 'MCP टूल्स पुनः लोड हो गए', + reloadedDesc: 'नए टूल स्कीमा नए टर्न पर लागू होते हैं।', + reloadFailed: 'MCP पुनः लोड विफल', + giveConfigKey: 'इस MCP सर्वर को एक कॉन्फ़िग कुंजी दें।', + reconnectGateway: 'MCP पुनः लोड करने से पहले गेटवे को पुनः कनेक्ट करें।', + newSchemas: 'नए टूल स्कीमा नए टर्न पर लागू होते हैं।', + loadingServers: 'MCP सर्वर लोड हो रहे हैं...', + serverName: 'नाम', + serversTitle: 'MCP सर्वर', + noServersTitle: 'कोई MCP सर्वर नहीं', + failedToLoad: 'MCP कॉन्फ़िग लोड करने में विफल', + invalidJsonShort: 'अमान्य MCP JSON', + serverSaved: 'MCP सर्वर सहेजा गया', + toolsReloaded: 'MCP टूल्स पुनः लोड हो गए', + emptyDesc: 'MCP टूल्स प्रदान करने के लिए stdio या HTTP सर्वर जोड़ें।', + }, + tools: { + title: 'टूल्स और स्किल्स', + noTools: 'कोई टूल उपलब्ध नहीं।', + }, + nav: { + home: 'होम', + chat: 'चैट', + settings: 'सेटिंग्स', + files: 'फ़ाइलें', + terminal: 'टर्मिनल', + }, + header: { + search: 'खोजें या कमांड टाइप करें…', + }, + model: { + auxTask: { + vision: 'विज़न', + visionHint: 'छवि विश्लेषण', + web_extract: 'वेब एक्सट्रैक्ट', + web_extractHint: 'पृष्ठ सारांश', + compression: 'संपीड़न', + compressionHint: 'संदर्भ संकुचन', + session_search: 'सत्र खोज', + session_searchHint: 'स्मरण क्वेरी', + skills_hub: 'स्किल्स हब', + skills_hubHint: 'स्किल खोज', + approval: 'अनुमोदन', + approvalHint: 'स्मार्ट ऑटो-अप्रूव', + mcp: 'MCP', + mcpHint: 'MCP टूल रूटिंग', + title_generation: 'शीर्षक निर्माण', + title_generationHint: 'सत्र शीर्षक', + curator: 'क्यूरेटर', + curatorHint: 'स्किल-उपयोग समीक्षा', + }, + mainModel: 'मुख्य मॉडल', + mainDesc: 'नए सत्रों पर लागू होता है। सक्रिय चैट को तुरंत बदलने के लिए कंपोज़र में मॉडल पिकर का उपयोग करें।', + providerPlaceholder: 'प्रदाता', + modelPlaceholder: 'मॉडल', + apply: 'लागू करें', + applying: 'लागू हो रहा है…', + auxiliaryModels: 'सहायक मॉडल', + auxiliaryDesc: 'सहायक कार्य डिफ़ॉल्ट रूप से मुख्य मॉडल पर चलते हैं। ओवरराइड करने के लिए किसी कार्य को समर्पित मॉडल असाइन करें।', + resetAllToMain: 'सभी को मुख्य पर रीसेट करें', + setToMain: 'मुख्य पर सेट करें', + change: 'बदलें', + cancel: 'रद्द करें', + autoUseMain: 'ऑटो · मुख्य मॉडल का उपयोग करें', + providerDefault: '(प्रदाता डिफ़ॉल्ट)', + loading: 'मॉडल कॉन्फ़िगरेशन लोड हो रहा है…', + options: 'विकल्प', + thinking: 'चिंतन', + fast: 'तेज़', + effort: 'प्रयास', + noOptions: 'इस मॉडल के लिए कोई विकल्प नहीं', + optionUpdateFailed: 'मॉडल विकल्प अपडेट विफल', + fastModeUpdateFailed: 'फ़ास्ट मोड अपडेट विफल', + effortMinimal: 'न्यूनतम', + effortLow: 'कम', + effortMedium: 'मध्यम', + effortHigh: 'उच्च', + effortMax: 'अधिकतम', + switch: 'मॉडल बदलें', + unknown: '(अज्ञात)', + filterPlaceholder: 'प्रदाता और मॉडल फ़िल्टर करें...', + persistGlobal: 'वैश्विक रूप से स्थायी करें', + persistGlobalSession: 'वैश्विक रूप से स्थायी करें (अन्यथा केवल यह सत्र)', + couldNotLoad: 'मॉडल लोड नहीं कर सका', + proLockedDesc: 'प्रो मॉडल के लिए सशुल्क Nous सदस्यता आवश्यक है।', + priceTooltip: 'प्रति मिलियन टोकन इनपुट / आउटपुट मूल्य', + freePrice: 'मुफ़्त', + currentLabel: 'वर्तमान:', + addProviderBtn: 'प्रदाता जोड़ें', + }, + updates: { + checking: 'अपडेट की जाँच हो रही है…', + available: 'अपडेट उपलब्ध', + downloading: 'डाउनलोड हो रहा है…', + installing: 'इंस्टॉल हो रहा है…', + restart: 'अपडेट करने के लिए पुनः आरंभ करें', + stageGettingReady: 'तैयार हो रहा है…', + stageDownloading: 'डाउनलोड हो रहा है…', + stageAlmostThere: 'बस होने ही वाला है…', + stageFinishingUp: 'समाप्त हो रहा है…', + stageRestarting: 'Hermes पुनः आरंभ हो रहा है…', + stageManual: 'अपने टर्मिनल से अपडेट करें', + stageError: 'अपडेट रुक गया', + updatingHermes: 'Hermes अपडेट हो रहा है…', + lookingForUpdates: 'अपडेट खोजे जा रहे हैं…', + couldntCheck: 'अपडेट की जाँच नहीं कर सका', + updateNotAvailable: 'अपडेट उपलब्ध नहीं', + checkConnection: 'अपना कनेक्शन जाँचें और पुनः प्रयास करें।', + onLatest: 'आप नवीनतम संस्करण चला रहे हैं।', + allSet: 'आप पूरी तरह तैयार हैं', + newUpdateAvailable: 'नया अपडेट उपलब्ध', + readyToInstall: 'Hermes का एक नया संस्करण इंस्टॉल करने के लिए तैयार है।', + updateNow: 'अभी अपडेट करें', + maybeLater: 'शायद बाद में', + count => `+ ${count} और बदलाव शामिल।`, + count => `+ ${count} और बदलाव शामिल।`, + updateFromTerminal: 'अपने टर्मिनल से अपडेट करें', + terminalDesc: 'आपने Hermes को कमांड लाइन से इंस्टॉल किया था, इसलिए अपडेट भी वहीं चलते हैं। इसे अपने टर्मिनल में पेस्ट करें:', + copied: 'कॉपी हो गया', + copy: 'कॉपी करें', + pickupNewVersion: 'अगली बार लॉन्च करने पर Hermes नया संस्करण ले लेगा।', + done: 'पूर्ण', + updaterDesc: 'Hermes अपडेटर अपनी विंडो में कार्यभार संभालेगा और समाप्त होने पर Hermes को पुनः खोलेगा।', + closeToApply: 'अपडेट लागू करने के लिए Hermes बंद हो जाएगा।', + updateDidntFinish: 'अपडेट पूरा नहीं हुआ', + nothingLost: 'चिंता न करें — कुछ भी खोया नहीं। आप अभी पुनः प्रयास कर सकते हैं।', + notNow: 'अभी नहीं', + }, + errors: { + generic: 'कुछ गलत हो गया।', + notFound: 'पृष्ठ नहीं मिला।', + noPermission: 'आपके पास इसे एक्सेस करने की अनुमति नहीं है।', + somethingBroke: 'इंटरफ़ेस में कुछ टूट गया', + viewCrashedDesc: 'व्यू में एक अप्रत्याशित त्रुटि आई। आपकी चैट और सेटिंग्स सुरक्षित हैं - पुनः प्रयास करें, या विंडो को पुनः लोड करें।', + noProviders: 'कोई प्रमाणित प्रदाता नहीं।', + }, + tool: { + toolCall: 'टूल कॉल', + result: 'परिणाम', + error: 'त्रुटि', + timeout: 'समय समाप्त', + cancelled: 'रद्द किया गया', + running: 'चल रहा है', + recovered: 'पुनर्प्राप्त', + done: 'पूर्ण', + output: 'टूल आउटपुट', + searchResults: 'खोज परिणाम', + rawResponse: 'कच्ची प्रतिक्रिया', + stdout: 'stdout', + stderr: 'stderr', + copyActivity: 'गतिविधि कॉपी करें', + recoveredAfter: '1 विफल चरण के बाद पुनर्प्राप्त', + count => `${count} विफल चरणों के बाद पुनर्प्राप्त`, + oneStepFailed: '1 चरण विफल', + count => `${count} चरण विफल`, + }, + composer: { + startingHermes: 'Hermes शुरू हो रहा है...', + sendFollowUp: 'अनुवर्ती भेजें', + message: 'संदेश', + editingQueued: 'कंपोज़र में कतारबद्ध टर्न संपादित हो रहा है', + attach: 'संलग्न करें', + files: 'फ़ाइलें…', + folder: 'फ़ोल्डर…', + images: 'छवियाँ…', + pasteImage: 'छवि पेस्ट करें', + url: 'URL…', + promptSnippets: 'प्रॉम्प्ट स्निपेट्स', + promptSnippetsDesc: 'कंपोज़र में डालने के लिए एक स्टार्टर प्रॉम्प्ट चुनें।', + voiceStart: 'ध्वनि वार्तालाप शुरू करें', + queue: 'संदेश कतारबद्ध करें', + speaking: 'बोल रहा है', + transcribing: 'ट्रांसक्राइब हो रहा है', + muted: 'म्यूट', + listening: 'सुन रहा है', + unmuteMic: 'माइक्रोफ़ोन अनम्यूट करें', + muteMic: 'माइक्रोफ़ोन म्यूट करें', + stopListening: 'सुनना बंद करें और भेजें', + endVoice: 'ध्वनि वार्तालाप समाप्त करें', + end: 'समाप्त', + stopDictation: 'डिक्टेशन बंद करें', + transcribingDictation: 'डिक्टेशन ट्रांसक्राइब हो रहा है', + voiceDictation: 'ध्वनि डिक्टेशन', + addContext: 'संदर्भ जोड़ें', + }, + models: { + title: 'मॉडल', + search: 'मॉडल खोजें', + addProvider: 'प्रदाता जोड़ें…', + }, + install: { + title: 'Hermes को एक बार इंस्टॉल करने की आवश्यकता है', + desc: 'स्वचालित पहली-लॉन्च इंस्टॉल अभी उपलब्ध नहीं है', + descEnd: 'पर। टर्मिनल खोलें और नीचे दिया गया कमांड चलाएँ, फिर इस ऐप को पुनः लॉन्च करें। बाद के लॉन्च इस चरण को छोड़ देंगे।', + installCommand: 'इंस्टॉल कमांड', + copyCommand: 'कमांड कॉपी करें', + viewDocs: 'इंस्टॉल दस्तावेज़ देखें', + willInstallTo: 'यहाँ इंस्टॉल होगा', + iRanIt: 'मैंने इसे चला लिया -- पुनः प्रयास करें', + failed: 'इंस्टॉलेशन विफल', + settingUp: 'Hermes Agent सेटअप हो रहा है', + finishingUp: 'समाप्त हो रहा है', + failedDesc: 'इंस्टॉल चरणों में से एक विफल रहा। Windows पर, ऐसा तब हो सकता है जब कोई अन्य Hermes CLI या डेस्कटॉप इंस्टेंस चल रहा हो। किसी भी चल रहे Hermes इंस्टेंस को रोकें, फिर पुनः प्रयास करें। पूर्ण ट्रांसक्रिप्ट के लिए नीचे विवरण या डेस्कटॉप लॉग देखें।', + setupDesc: 'यह एक बार का सेटअप है। Hermes इंस्टॉलर निर्भरताएँ डाउनलोड कर रहा है और आपकी मशीन को कॉन्फ़िगर कर रहा है। बाद के लॉन्च इस चरण को छोड़ देंगे।', + fetchingManifest: 'इंस्टॉलर मैनिफ़ेस्ट प्राप्त हो रहा है...', + error: 'त्रुटि', + showOutput: 'इंस्टॉलर आउटपुट दिखाएँ', + hideOutput: 'इंस्टॉलर आउटपुट छिपाएँ', + noOutput: 'अभी तक कोई आउटपुट नहीं।', + cancelInstall: 'इंस्टॉल रद्द करें', + cancelling: 'रद्द हो रहा है...', + copyOutput: 'आउटपुट कॉपी करें', + copied: 'कॉपी हो गया!', + reloadRetry: 'पुनः लोड करें और पुनः प्रयास करें', + saveLogs: 'पूर्ण ट्रांसक्रिप्ट यहाँ सहेजा गया', + stepsComplete: 'चरण पूर्ण', + nowLabel: 'अभी', + line: 'पंक्ति', + lines: 'पंक्तियाँ', + }, + previewConsole: { + resizeLabel: 'प्रीव्यू कंसोल का आकार बदलें', + noMessages: 'अभी तक कोई कंसोल संदेश नहीं।', + }, + boot: { + ipcUnavailable: 'डेस्कटॉप IPC ब्रिज अनुपलब्ध है।', + backendExited: 'स्टार्टअप के दौरान Hermes पृष्ठभूमि प्रक्रिया समाप्त हो गई।', + backendStoppedTitle: 'बैकएंड रुक गया', + backendStoppedMessage: 'Hermes पृष्ठभूमि प्रक्रिया समाप्त हो गई।', + startingConnection: 'डेस्कटॉप कनेक्शन शुरू हो रहा है', + connectingGateway: 'लाइव डेस्कटॉप गेटवे से कनेक्ट हो रहा है', + loadingConfig: 'Hermes सेटिंग्स लोड हो रही हैं', + loadingSessions: 'हाल के सत्र लोड हो रहे हैं', + desktopBootFailed: 'डेस्कटॉप बूट विफल', + couldNotStart: 'Hermes शुरू नहीं हो सका', + recoveryDesc: 'पृष्ठभूमि गेटवे शुरू नहीं हुआ। नीचे दिए गए पुनर्प्राप्ति चरणों में से एक आज़माएँ — यहाँ कुछ भी आपकी चैट या सेटिंग्स को नहीं हटाता।', + retry: 'पुनः प्रयास करें', + repairInstall: 'इंस्टॉल मरम्मत करें', + useLocalGateway: 'स्थानीय गेटवे का उपयोग करें', + openLogs: 'लॉग खोलें', + repairHint: 'मरम्मत इंस्टॉलर को पुनः चलाती है और नई मशीन पर कुछ मिनट लग सकते हैं।', + showLogs: 'हाल के लॉग दिखाएँ', + hideLogs: 'हाल के लॉग छिपाएँ', + }, + urlDialog: { + title: 'URL संलग्न करें', + description: 'Hermes पृष्ठ प्राप्त करेगा और इसे इस टर्न के लिए संदर्भ के रूप में शामिल करेगा।', + placeholder: 'https://example.com/post', + hint: 'पूर्ण URL शामिल करें, जैसे', + attach: 'संलग्न करें', + }, + titlebar: { + hideSidebar: 'साइडबार छिपाएँ', + showSidebar: 'साइडबार दिखाएँ', + search: 'खोजें', + searchTitle: 'सत्र, व्यू और कार्रवाइयाँ खोजें', + hideRightSidebar: 'दायाँ साइडबार छिपाएँ', + showRightSidebar: 'दायाँ साइडबार दिखाएँ', + unmuteHaptics: 'हैप्टिक्स अनम्यूट करें', + muteHaptics: 'हैप्टिक्स म्यूट करें', + openSettings: 'सेटिंग्स खोलें', + profiles: 'प्रोफ़ाइल', + profilesDesc: 'अलग-अलग व्यक्तित्व, कॉन्फ़िग, स्किल्स और SOUL.md के लिए उन्नत Hermes वातावरण।', + manageProfiles: 'प्रोफ़ाइल प्रबंधित करें', + language: 'भाषा', + languageDesc: 'इंटरफ़ेस के लिए प्रदर्शन भाषा चुनें।', + }, + pagination: { + ariaLabel: 'पृष्ठांकन', + prevAria: 'पिछले पृष्ठ पर जाएँ', + prev: 'पिछला', + nextAria: 'अगले पृष्ठ पर जाएँ', + next: 'अगला', + }, + bootstrap: { + pending: 'लंबित', + running: 'इंस्टॉल हो रहा है', + done: 'पूर्ण', + skipped: 'छोड़ा गया', + failed: 'विफल', + }, + sidebar: { + sheetTitle: 'साइडबार', + sheetDesc: 'मोबाइल साइडबार प्रदर्शित करता है।', + toggle: 'साइडबार टॉगल करें', + }, + clarify: { + hermesIsAsking: 'Hermes पूछ रहा है', + loadingQuestion: 'प्रश्न लोड हो रहा है…', + otherTypeAnswer: 'अन्य (अपना उत्तर टाइप करें)', + placeholderAnswer: 'अपना उत्तर टाइप करें…', + cmdEnterToSend: 'भेजने के लिए ⌘/Ctrl + Enter', + back: 'वापस', + skip: 'छोड़ें', + couldNotSend: 'स्पष्टीकरण प्रतिक्रिया नहीं भेज सका', + n => `चुनने के लिए 1–${n}`, + }, + intro: { + fallback1h: 'आज हम क्या आगे बढ़ा रहे हैं?', + fallback1b: 'बग, शाखा, योजना या मोटा विचार भेजें। मैं रिपो की जाँच करूँगा और इसे अगले ठोस कदम में बदलूँगा।', + fallback2h: 'आपके दिमाग में क्या है?', + fallback2b: 'कोड, प्रश्न या अटका हुआ भाग लाएँ। बदलाव करने से पहले मैं स्थिति समझूँगा।', + fallback3h: 'Hermes को क्या देखना चाहिए?', + fallback3b: 'कार्य, विफल पथ या अधूरी योजना भेजें। मैं इसे कार्रवाई में बदलने में मदद करूँगा।', + fallback4h: 'हमें कहाँ से शुरू करना चाहिए?', + fallback4b: 'समस्या, लक्ष्य या फ़ाइल लाएँ। मैं पहले जाँच करूँगा और अगला कदम ठोस रखूँगा।', + fallback5h: 'किस पर ध्यान देने की ज़रूरत है?', + fallback5b: 'आपके पास जो संदर्भ है वह भेजें। मैं इसे योजना या समाधान में बदलने में मदद करूँगा।', + personality: { + label => `${label} मोड चालू है। हमें किस पर काम करना चाहिए?`, + body1: 'कार्य, फ़ाइल या मोटा विचार भेजें। मैं आपकी कॉन्फ़िगर की गई आवाज़ का उपयोग करूँगा और काम को इस रिपो में आधारित रखूँगा।', + label => `${label} Hermes को क्या देखना चाहिए?`, + body2: 'संदर्भ या अटका हुआ भाग लाएँ। मैं आपके कॉन्फ़िगर किए गए व्यक्तित्व के अनुसार ढल जाऊँगा।', + label => `${label} मोड तैयार है।`, + body3: 'समस्या, फ़ाइल या विचार भेजें। मैं आपके कॉन्फ़िगर किए गए व्यक्तित्व का अनुसरण करूँगा।', + label => `${label} Hermes को क्या निपटाना चाहिए?`, + body4: 'कार्य यहाँ डालें। मैं काम को रिपो में आधारित रखूँगा।', + heading5: 'हमें कहाँ से शुरू करना चाहिए?', + label => `मुझे संदर्भ दें और मैं ${label} मोड में उत्तर दूँगा।`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'कोई आर्टिफ़ैक्ट नहीं मिला', + }, + agents: { + spawnTree: 'स्पॉन ट्री', + liveSubagentActivity: 'वर्तमान टर्न के लिए लाइव सबएजेंट गतिविधि।', + noLiveSubagents: 'कोई लाइव सबएजेंट नहीं', + files: 'फ़ाइलें', + label: 'एजेंट', + open: 'एजेंट खोलें', + close: 'एजेंट बंद करें', + subagent: 'सबएजेंट', + subagents: 'सबएजेंट', + failed: 'विफल', + running: 'चल रहा है', + }, + provider: { + desc: { + nousPortal: 'Nous Portal बेस URL ओवरराइड', + openRouter: 'OpenRouter API कुंजी (विज़न, वेब स्क्रैपिंग सहायक और MoA के लिए)', + google: 'Google AI Studio API कुंजी (GEMINI_API_KEY के रूप में भी पहचानी जाती है)', + gemini: 'सशुल्क Gemini स्तरों के लिए GCP प्रोजेक्ट ID (मुफ़्त स्तर ऑटो-प्रोविज़न होता है)', + anthropic: 'Anthropic API कुंजी', + deepseek: 'कस्टम DeepSeek API बेस URL (उन्नत)', + xai: 'xAI बेस URL ओवरराइड', + huggingface: 'Hugging Face Inference Providers बेस URL ओवरराइड', + kimi: 'Kimi / Moonshot China API कुंजी', + minimax: 'MiniMax (China) बेस URL ओवरराइड', + minimaxCn: 'MiniMax China API कुंजी', + dashscope: 'कस्टम DashScope बेस URL (डिफ़ॉल्ट: coding-intl OpenAI-संगत एंडपॉइंट)', + glm: 'GLM API कुंजी (Z.AI)', + nvidia: 'NVIDIA NIM बेस URL ओवरराइड (जैसे स्थानीय NIM के लिए http://localhost:8000/v1)', + opencodeGo: 'OpenCode Go API कुंजी', + opencodeZen: 'OpenCode Zen API कुंजी', + xiaomi: 'Xiaomi MiMo बेस URL ओवरराइड (डिफ़ॉल्ट: https://api.xiaomimimo.com/v1)', + kiloCode: 'Kilo Code API कुंजी', + aiGateway: 'AI Gateway API कुंजी (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'ElevenLabs API कुंजी', + openai: 'OpenAI API कुंजी (प्रॉक्सी के माध्यम से ध्वनि प्रसंस्करण के लिए)', + mistral: 'Mistral API कुंजी (STT/TTS के लिए)', + groq: 'Groq API कुंजी (STT के लिए)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'स्व-होस्टेड इंस्टेंस के लिए Firecrawl API URL (वैकल्पिक)', + fal: 'FAL_KEY', + nous: 'Nous Portal बेस URL ओवरराइड', + openrouter: 'OpenRouter API कुंजी (विज़न, वेब स्क्रैपिंग सहायक और MoA के लिए)', + lmstudio: 'Z.AI / GLM बेस URL ओवरराइड', + zai: 'Azure Foundry बेस URL (एंडपॉइंट-विशिष्ट कॉन्फ़िग के लिए \'hermes model\' के माध्यम से सेट करें)', + stepfun: 'StepFun Step Plan बेस URL ओवरराइड', + arcee: 'Arcee AI बेस URL ओवरराइड', + gmi: 'GMI Cloud बेस URL ओवरराइड', + qwenportal: 'Qwen Portal बेस URL ओवरराइड (डिफ़ॉल्ट: https://portal.qwen.ai/v1)', + opencodego: 'OpenCode Go बेस URL ओवरराइड', + ollamacloud: 'Ollama Cloud बेस URL ओवरराइड (डिफ़ॉल्ट: https://ollama.com/v1)', + awsbedrock: 'Bedrock प्रमाणीकरण के लिए AWS नामित प्रोफ़ाइल (~/.aws/credentials से)', + exa: 'AI-नेटिव वेब खोज और सामग्री के लिए Exa API कुंजी', + parallel: 'AI-नेटिव वेब खोज और एक्सट्रैक्ट के लिए Parallel API कुंजी', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/it.ts b/apps/desktop/src/i18n/it.ts new file mode 100644 index 000000000000..f9d4471e2563 --- /dev/null +++ b/apps/desktop/src/i18n/it.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const it = defineLocale( +{ + appearance: { + title: 'Aspetto', + description: 'Queste sono preferenze di visualizzazione solo desktop. La modalità controlla la luminosità; il tema controlla la tavolozza degli accenti e lo stile della superficie di chat.', + colorMode: 'Modalità Colore', + colorModeDesc: 'Scegli una modalità fissa o lascia che Hermes segua l\'impostazione di sistema.', + theme: { + nous: 'Nous', + nousDesc: 'Neutrali trasparenti con accenti blu Nous', + midnight: 'Mezzanotte', + midnightDesc: 'Blu-viola profondo con accenti freddi', + ember: 'Brace', + emberDesc: 'Cremisi e bronzo caldi — atmosfera da fucina', + mono: 'Mono', + monoDesc: 'Scala di grigi pulita — minimale e focalizzato', + cyberpunk: 'Cyberpunk', + cyberpunkDesc: 'Verde neon su nero — terminale matrix', + slate: 'Ardesia', + slateDesc: 'Blu ardesia freddo — tema focalizzato per sviluppatori', + }, + themeDesc: 'Scegli una tavolozza di colori per la superficie di chat e gli accenti dell\'interfaccia.', + mode: { + light: 'Chiaro', + lightDesc: 'Superfici desktop luminose', + dark: 'Scuro', + darkDesc: 'Ambiente di lavoro a basso abbagliamento', + system: 'Sistema', + systemDesc: 'Segui l\'aspetto del sistema operativo', + }, + language: 'Lingua', + languageDesc: 'Scegli la lingua dell\'interfaccia o lascia che Hermes segua l\'impostazione di sistema.', + toolCallDisplay: 'Visualizzazione Chiamate Strumento', + toolCallDisplayDesc: 'Prodotto nasconde i payload grezzi; Tecnico mostra input/output completi.', + toolViewProduct: 'Prodotto', + toolViewTechnical: 'Tecnico', + toolViewProductDesc: 'Attività strumento leggibile con riassunti concisi.', + toolViewTechnicalDesc: 'Includi argomenti/risultati grezzi e dettagli di basso livello.', + }, + settings: { + title: 'Impostazioni', + appearance: 'Aspetto', + model: 'Modello', + gateway: 'Gateway', + sessions: 'Sessioni', + tools: 'Strumenti e Competenze', + section: { + chat: 'Chat', + workspace: 'Area di lavoro', + safety: 'Sicurezza', + memory: 'Memoria e Contesto', + voice: 'Voce', + advanced: 'Avanzate', + }, + mcp: 'Server MCP', + config: 'Configurazione', + keys: 'Chiavi API', + about: 'Informazioni', + closeSettings: 'Chiudi impostazioni', + archivedChats: 'Chat Archiviate', + exportConfig: 'Esporta configurazione', + importConfig: 'Importa configurazione', + resetDefaults: 'Ripristina predefiniti', + llmProviders: 'Provider LLM', + searchPlaceholder: { + about: 'Informazioni su Hermes Desktop', + config: 'Cerca impostazioni…', + gateway: 'Connessione gateway…', + keys: 'Cerca chiavi API…', + mcp: 'Cerca server MCP…', + sessions: 'Cerca sessioni archiviate…', + }, + }, + chat: { + placeholder: 'Chiedimi qualsiasi cosa…', + send: 'Invia', + stop: 'Ferma', + thinking: 'Pensando…', + noSession: 'Nessuna sessione attiva. Avvia una nuova conversazione.', + composerTip: 'Suggerimento: digita @ per riferire file inline.', + loadingSession: 'Caricamento sessione', + loadingResponse: 'Hermes sta caricando una risposta', + branchInNewChat: 'Dirama in nuova chat', + readAloud: 'Leggi ad alta voce', + preparingAudio: 'Preparazione audio...', + stopReading: 'Ferma lettura', + editMessage: 'Modifica messaggio', + editableCheckpoint: 'Checkpoint modificabile', + restoreCheckpoint: 'Ripristina checkpoint', + goForward: 'Vai avanti', + restorePrevCheckpoint: 'Ripristina checkpoint precedente', + restoreNextCheckpoint: 'Ripristina checkpoint successivo', + reconnecting: 'Riconnessione a Hermes…', + }, + commandCenter: { + title: 'Centro Comandi', + noSessions: 'Nessuna sessione ancora.', + loadingStatus: 'Caricamento stato…', + recentLogs: 'Log recenti', + dailyTokens: 'Token giornalieri', + noActivity: 'Nessuna attività giornaliera.', + noModelUsage: 'Nessun utilizzo modello ancora.', + noSkillActivity: 'Nessuna attività competenze ancora.', + sessionsPanel: 'Pannello sessioni', + systemPanel: 'Pannello sistema', + usagePanel: 'Pannello utilizzo', + navigate: 'Naviga', + noMatchingResults: 'Nessun risultato corrispondente.', + noSessionsYet: 'Nessuna sessione ancora.', + unpinSession: 'Rimuovi sessione', + pinSession: 'Fissa sessione', + exportSession: 'Esporta sessione', + deleteSession: 'Elimina sessione', + gatewayRunning: 'Gateway messaggistica in esecuzione', + gatewayStopped: 'Gateway messaggistica fermo', + restartMsg: 'Riavvia messaggistica', + updateHermes: 'Aggiorna Hermes', + noLogsLoaded: 'Nessun log caricato ancora.', + closeLabel: 'Chiudi centro comandi', + searchPlaceholder: 'Cerca sessioni, viste e azioni', + statSessions: 'Sessioni', + statApiCalls: 'Chiamate API', + statTokens: 'Token in/out', + statEstCost: 'Costo stimato', + cost => `effettivo ${cost}`, + loadingUsage: 'Caricamento utilizzo...', + count => `Nessun utilizzo negli ultimi ${count} giorni.`, + retry: 'Riprova', + tokenInput: 'input', + tokenOutput: 'output', + noDailyActivity: 'Nessuna attività giornaliera.', + topModels: 'Modelli principali', + topSkills: 'Competenze principali', + actionsLabel: 'azioni', + systemRunning: 'in esecuzione', + systemDone: 'completato', + systemFailed: 'fallito', + open: 'Apri Centro Comandi', + close: 'Chiudi Centro Comandi', + }, + common: { + loading: 'Caricamento…', + save: 'Salva', + cancel: 'Annulla', + close: 'Chiudi', + delete: 'Elimina', + confirm: 'Conferma', + search: 'Cerca…', + clearSearch: 'Pulisci ricerca', + copy: 'Copia', + refresh: 'Aggiorna', + moreActions: 'Altre azioni', + tryAgain: 'Riprova', + }, + onboarding: { + welcome: 'Benvenuto in Hermes', + getStarted: 'Inizia scegliendo un provider e un modello.', + skip: 'Salta', + continue: 'Continua', + finish: 'Fine', + setupTitle: 'Configuriamo Hermes Agent', + setupDesc: 'Collega un provider di modelli per iniziare a chattare. La maggior parte delle opzioni richiede un clic.', + preparing: 'Avvio di Hermes…', + installing: 'Hermes sta completando l\'installazione. Di solito richiede meno di un minuto al primo avvio.', + lookingUp: 'Ricerca provider...', + otherProviders: 'Altri provider', + collapse: 'Comprimi', + iHaveKey: 'Ho una chiave API', + recommended: 'Consigliato', + connected: 'Connesso', + backToSignIn: 'Torna all\'accesso', + getKey: 'Ottieni una chiave', + pasteKey: 'Incolla chiave API', + connect: 'Connetti', + connecting: 'Connessione in corso', + copyCode: 'Copia', + startSignIn: 'Avvio accesso per', + verifyingCode: 'Verifica del tuo codice con', + pickingModel: 'connesso. Scelta del modello predefinito...', + signInFailed: 'Accesso fallito. Riprova.', + pickDifferent: 'Scegli un altro provider', + signInTitle: 'Accedi con', + step1: 'Abbiamo aperto', + step1End: 'nel tuo browser.', + step2: 'Autorizza Hermes lì.', + step3: 'Copia il codice di autorizzazione e incollalo qui sotto.', + pasteCode: 'Incolla codice di autorizzazione', + reopenAuth: 'Riapri pagina di autorizzazione', + cancel: 'Annulla', + browserDesc: 'Abbiamo aperto', + browserDescEnd: 'nel tuo browser. Autorizza Hermes lì e sarai connesso automaticamente — nulla da copiare o incollare.', + waitingAuth: 'In attesa della tua autorizzazione...', + reopenSignIn: 'Riapri pagina di accesso', + externalDesc: 'effettua l\'accesso tramite la propria CLI. Esegui questo comando in un terminale, poi torna e scegli "Ho effettuato l\'accesso":', + iSignedIn: 'Ho effettuato l\'accesso', + enterCode: 'Abbiamo aperto', + enterCodeEnd: 'nel tuo browser. Inserisci questo codice lì:', + reopenVerification: 'Riapri pagina di verifica', + defaultModel: 'Modello predefinito', + freeTier: 'Piano gratuito', + pro: 'Pro', + change: 'Cambia', + startChatting: 'Inizia a chattare', + docs: 'documentazione', + close: 'Chiudi', + savingError: 'Impossibile salvare la credenziale.', + openRouter: 'OpenRouter', + }, + file: { + browser: 'Browser File', + noFiles: 'Nessun file ancora.', + }, + terminal: { + title: 'Terminale', + newTab: 'Nuova Scheda', + closeTab: 'Chiudi Scheda', + }, + skills: { + title: 'Competenze', + search: 'Cerca competenze…', + noResults: 'Nessuna competenza trovata.', + tools: 'Competenze e Strumenti', + }, + profiles: { + title: 'Profili', + noProfilesYet: 'Nessun profilo ancora.', + selectProfile: 'Seleziona un profilo per visualizzarne i dettagli.', + deleteProfile: 'Eliminare profilo?', + soulMd: 'SOUL.md', + unsavedChanges: 'Modifiche non salvate', + newProfile: 'Nuovo profilo', + cloneFromDefault: 'Clona dal predefinito', + renameProfile: 'Rinomina profilo', + }, + cron: { + title: 'Cron Job', + noJobs: 'Nessun job pianificato.', + deleteCronJob: 'Eliminare cron job?', + optional: 'Opzionale', + label: 'Cron', + open: 'Apri cron job', + }, + messaging: { + title: 'Messaggistica', + recommended: 'Consigliato', + recommendedTelegram: 'Consigliato. ID numerici separati da virgola da @userinfobot. Senza questo, chiunque può inviare DM al tuo bot.', + recommendedDiscord: 'Consigliato. ID utente Discord separati da virgola.', + recommendedSlack: 'Consigliato. ID utente Slack separati da virgola.', + recommendedMattermost: 'Consigliato. ID utente Mattermost separati da virgola.', + recommendedMatrix: 'Consigliato. ID utente separati da virgola in formato @utente:server.', + recommendedSignal: 'Consigliato. Identificatori Signal separati da virgola.', + recommendedWhatsApp: 'Consigliato. Numeri di telefono o ID WhatsApp separati da virgola.', + gatewayStopped: 'Gateway messaggistica fermo', + getCredentials: 'Ottieni le tue credenziali', + required: 'Obbligatorio', + unsavedChanges: 'Modifiche non salvate', + saved: 'Salvato', + }, + about: { + version: 'Versione', + checkUpdates: 'Verifica aggiornamenti', + upToDate: 'Hermes è aggiornato.', + updateAvailable: 'È disponibile un aggiornamento.', + license: 'Licenza MIT', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'Versione non disponibile', + updates: 'Aggiornamenti', + checkNow: 'Verifica ora', + checking: 'Verifica in corso…', + seeWhatsNew: 'Vedi le novità', + releaseNotes: 'Note di rilascio', + autoUpdates: 'Aggiornamenti automatici', + autoUpdatesDesc: 'Hermes verifica automaticamente gli aggiornamenti in background e ti avvisa quando uno è pronto.', + selfUpdateUnsupported: 'Questa build non può aggiornarsi dall\'interno dell\'app.', + cannotReachServer: 'Impossibile raggiungere il server degli aggiornamenti.', + installingUpdate: 'Un aggiornamento è in fase di installazione.', + count => `Un nuovo aggiornamento è pronto (${count} modifica inclusa).`, + count => `Un nuovo aggiornamento è pronto (${count} modifiche incluse).`, + onLatest: 'Stai usando l\'ultima versione.', + tapCheckNow: 'Tocca "Verifica ora" per cercare aggiornamenti.', + time => `Ultima verifica ${time}`, + justNow: 'proprio ora', + never: 'mai', + count => `${count} min fa`, + count => `${count} ore fa`, + count => `${count} giorni fa`, + (branch, sha) => `Branch ${branch} · Commit ${sha}`, + }, + keys: { + title: 'Chiavi API', + noKeys: 'Nessuna chiave API configurata.', + addKey: 'Aggiungi Chiave', + loading: 'Caricamento chiavi API e credenziali…', + docs: 'Documentazione', + openDocs: 'Apri documentazione provider', + hideValue: 'Nascondi valore', + revealValue: 'Mostra valore', + set: 'Imposta', + notSet: 'Non impostata', + replace: 'Sostituisci', + replaceValue: 'Sostituisci valore attuale', + enterValue: 'Inserisci valore', + saving: 'Salvataggio', + save: 'Salva', + cancel: 'Annulla', + clearValue: 'Cancella valore', + (count, total) => `${count} di ${total} configurate`, + (count, total) => `${count} di ${total} impostate`, + count => `${count} impostate`, + count => `${count} chiavi`, + otherProviders: 'Altri provider', + categoryTools: 'Strumenti', + categoryMessaging: 'Messaggistica', + categorySettings: 'Impostazioni', + showAdvanced: 'Mostra avanzate', + loadFailed: 'Caricamento chiavi API fallito', + credentialSaved: 'Credenziale salvata', + credentialRemoved: 'Credenziale rimossa', + openProviderDocs: 'Apri documentazione provider', + }, + config: { + title: 'Configurazione', + edit: 'Modifica Configurazione', + reload: 'Ricarica Configurazione', + notSet: 'Non impostato', + commaSeparated: 'valori separati da virgola', + on: 'Attivo', + off: 'Disattivo', + none: 'Nessuno', + emptyOption: '(nessuno)', + loading: 'Caricamento configurazione Hermes…', + noMatching: 'Nessuna impostazione corrispondente', + noMatchingDesc: 'Prova un termine di ricerca diverso o scegli un\'altra sezione.', + count => `${count} risultato`, + count => `${count} risultati`, + saving: 'Salvataggio…', + label: { + defaultModel: 'Modello Predefinito', + contextWindow: 'Finestra di Contesto', + fallbackModels: 'Modelli di Fallback', + enabledToolsets: 'Strumenti Abilitati', + timezone: 'Fuso Orario', + personality: 'Personalità', + reasoningBlocks: 'Blocchi di Ragionamento', + maxAgentSteps: 'Passi Massimi Agente', + imageAttachments: 'Allegati Immagine', + workingDirectory: 'Directory di Lavoro', + executionBackend: 'Backend di Esecuzione', + commandTimeout: 'Timeout Comandi', + persistentShell: 'Shell Persistente', + envPassthrough: 'Passaggio Variabili d\'Ambiente', + fileReadLimit: 'Limite Lettura File', + terminalOutputLimit: 'Limite Output Terminale', + filePageLimit: 'Limite Pagine File', + lineLengthLimit: 'Limite Lunghezza Righe', + codeExecutionMode: 'Modalità Esecuzione Codice', + approvalMode: 'Modalità Approvazione', + approvalTimeout: 'Timeout Approvazione', + confirmMcpReloads: 'Conferma Ricarica MCP', + commandAllowlist: 'Lista Comandi Consentiti', + redactSecrets: 'Oscura Segreti', + allowPrivateUrls: 'Consenti URL Privati', + browserPrivateUrls: 'Browser URL Privati', + localBrowserForPrivateUrls: 'Browser Locale per URL Privati', + fileCheckpoints: 'Checkpoint File', + checkpointLimit: 'Limite Checkpoint', + voiceShortcut: 'Scorciatoia Voce', + maxRecordingLength: 'Durata Massima Registrazione', + readResponsesAloud: 'Leggi Risposte ad Alta Voce', + speechToText: 'Riconoscimento Vocale', + speechToTextProvider: 'Provider Riconoscimento Vocale', + localTranscriptionModel: 'Modello Trascrizione Locale', + transcriptionLanguage: 'Lingua Trascrizione', + elevenlabsSttModel: 'Modello STT ElevenLabs', + elevenlabsLanguage: 'Lingua ElevenLabs', + tagAudioEvents: 'Etichetta Eventi Audio', + speakerDiarization: 'Diarizzazione Parlatori', + textToSpeechProvider: 'Provider Sintesi Vocale', + edgeVoice: 'Voce Edge', + openaiTtsModel: 'Modello TTS OpenAI', + openaiVoice: 'Voce OpenAI', + elevenlabsVoice: 'Voce ElevenLabs', + elevenlabsModel: 'Modello ElevenLabs', + persistentMemory: 'Memoria Persistente', + userProfile: 'Profilo Utente', + memoryBudget: 'Budget Memoria', + profileBudget: 'Budget Profilo', + memoryProvider: 'Provider Memoria', + contextEngine: 'Motore di Contesto', + autoCompression: 'Compressione Automatica', + compressionThreshold: 'Soglia Compressione', + compressionTarget: 'Obiettivo Compressione', + protectedRecentMessages: 'Messaggi Recenti Protetti', + apiRetries: 'Tentativi API', + serviceTier: 'Livello Servizio', + toolUseEnforcement: 'Obbligo Uso Strumenti', + subagentModel: 'Modello Subagente', + subagentProvider: 'Provider Subagente', + subagentTurnLimit: 'Limite Turni Subagente', + parallelSubagents: 'Subagenti Paralleli', + subagentTimeout: 'Timeout Subagente', + subagentReasoningEffort: 'Sforzo Ragionamento Subagente', + }, + desc: { + defaultModel: 'Usato per nuove chat a meno che non si scelga un modello diverso nel compositore.', + contextWindow: 'Lascia a 0 per usare la finestra di contesto rilevata del modello selezionato.', + fallbackModels: 'Voci provider:modello di backup da provare se il modello predefinito fallisce.', + personality: 'Stile predefinito dell\'assistente per le nuove sessioni.', + timezone: 'Usato quando Hermes ha bisogno del contesto orario locale. Vuoto usa il fuso orario di sistema.', + reasoningBlocks: 'Mostra le sezioni di ragionamento quando il backend le fornisce.', + imageAttachments: 'Controlla come gli allegati immagine vengono inviati al modello.', + workingDirectory: 'Cartella di progetto predefinita per il lavoro con strumenti e terminale.', + codeExecutionMode: 'Quanto rigorosamente l\'esecuzione del codice è limitata al progetto corrente.', + persistentShell: 'Mantieni lo stato della shell tra i comandi quando il backend lo supporta.', + envPassthrough: 'Variabili d\'ambiente da passare all\'esecuzione degli strumenti.', + fileReadLimit: 'Caratteri massimi che Hermes può leggere da una richiesta di file.', + approvalMode: 'Come Hermes gestisce i comandi che richiedono approvazione esplicita.', + approvalTimeout: 'Quanto tempo attendono i prompt di approvazione prima di scadere.', + redactSecrets: 'Nascondi i segreti rilevati dal contenuto visibile al modello quando possibile.', + fileCheckpoints: 'Crea snapshot di ripristino prima delle modifiche ai file.', + persistentMemory: 'Salva memorie durevoli che possono aiutare le sessioni future.', + userProfile: 'Mantieni un profilo compatto delle preferenze utente.', + contextEngine: 'Strategia per gestire conversazioni lunghe vicino al limite di contesto.', + autoCompression: 'Riassumi il contesto più vecchio quando le conversazioni diventano grandi.', + readResponsesAloud: 'Leggi automaticamente le risposte dell\'assistente ad alta voce.', + speechToText: 'Abilita la trascrizione vocale locale o tramite provider.', + elevenlabsLanguage: 'Codice lingua ISO-639-3 opzionale. Vuoto lascia che ElevenLabs rilevi automaticamente.', + maxAgentSteps: 'Limite superiore per i turni di chiamata strumenti prima che Hermes interrompa un\'esecuzione.', + }, + }, + gateway: { + title: 'Gateway', + start: 'Avvia Gateway', + stop: 'Ferma Gateway', + restart: 'Riavvia Gateway', + running: 'In esecuzione', + stopped: 'Fermo', + loading: 'Caricamento impostazioni gateway…', + unavailable: 'Impostazioni gateway non disponibili', + unavailableDesc: 'Il bridge IPC desktop non espone le impostazioni del gateway.', + connection: 'Connessione Gateway', + envOverride: 'sovrascrittura env', + desc: 'Hermes Desktop avvia il proprio gateway locale per impostazione predefinita. Usa un gateway remoto quando vuoi che questa app controlli un backend Hermes già in esecuzione su un\'altra macchina o dietro un proxy affidabile.', + envOverrideTitle: 'Le variabili d\'ambiente stanno controllando questa sessione desktop.', + (urlVar, tokenVar) => `Rimuovi ${urlVar} e ${tokenVar} per usare l'impostazione salvata qui sotto.`, + localTitle: 'Gateway locale', + localDesc: 'Avvia un backend Hermes privato su localhost. Questa è l\'impostazione predefinita e funziona offline.', + remoteTitle: 'Gateway remoto', + remoteDesc: 'Collega questa shell desktop a un backend Hermes remoto usando il suo token di sessione.', + remoteUrl: 'URL Remoto', + remoteUrlDesc: 'URL base per il backend dashboard remoto. I prefissi di percorso sono supportati, ad esempio /hermes.', + remoteUrlPlaceholder: 'https://gateway.example.com/hermes', + sessionToken: 'Token di sessione', + sessionTokenDesc: 'Il token di sessione dashboard usato per l\'accesso REST e WebSocket. Lascia vuoto per mantenere il token salvato.', + sessionTokenPlaceholder: 'Incolla token di sessione', + preview => `Token esistente ${preview}`, + tokenSaved: 'salvato', + testRemote: 'Test remoto', + saveRestart: 'Salva per il prossimo riavvio', + saveReconnect: 'Salva e riconnetti', + diagnostics: 'Diagnostica', + diagnosticsDesc: 'Mostra desktop.log nel tuo file manager — utile quando il gateway non si avvia.', + openLogs: 'Apri log', + connected: 'Connesso', + connecting: 'Connessione in corso', + disconnected: 'Disconnesso', + inferenceReady: 'Inferenza pronta', + inferenceNotReady: 'Inferenza non pronta', + checkingInference: 'Verifica inferenza', + openSystemPanel: 'Apri pannello di sistema', + connectionLabel: 'Connessione:', + recentActivity: 'Attività recente', + viewAllLogs: 'Vedi tutti i log →', + messagingPlatforms: 'Piattaforme di messaggistica', + enterUrlFirst: 'Inserisci un URL remoto e un token di sessione prima di cambiare', + enterUrlFirstTest: 'Inserisci un URL remoto e un token di sessione prima di testare', + label: 'Gateway', + inferenceStatus: 'Stato inferenza gateway', + }, + sessions: { + title: 'Sessioni', + search: 'Cerca sessioni…', + noResults: 'Nessuna sessione trovata.', + export: 'Esporta', + delete: 'Elimina Sessione', + loading: 'Caricamento…', + defaultProjectDir: 'Directory di progetto predefinita', + defaultProjectDirDesc: 'Le nuove sessioni iniziano in questa cartella a meno che non ne scelga un\'altra. Lascia vuoto per usare la tua home directory.', + fallback => `Predefinito: ${fallback}.`, + notSet: 'Non impostata', + change: 'Cambia', + choose: 'Scegli', + clear: 'Pulisci', + archivedTitle: 'Sessioni archiviate', + archivedDesc: 'Le chat archiviate sono nascoste dalla barra laterale ma conservano tutti i messaggi. Ctrl/⌘-clic su una chat nella barra laterale per archiviarla.', + nothingArchived: 'Niente archiviato', + noSearchMatch: 'Nessuna chat archiviata corrisponde alla ricerca.', + archiveToHide: 'Archivia una chat per nasconderla qui.', + unarchive: 'Disarchivia', + deletePermanently: 'Elimina definitivamente', + count => `${count} messaggi`, + new: 'Nuova sessione', + running: 'Sessione in esecuzione', + actions: 'Azioni sessione', + reorder: 'Riordina', + pin: 'Fissa', + unpin: 'Rimuovi', + copyId: 'Copia ID', + rename: 'Rinomina', + archive: 'Archivia', + renameDialog: 'Rinomina sessione', + renameDesc: 'Dai a questa chat un titolo memorabile. Lascia vuoto per cancellare.', + untitled: 'Sessione senza titolo', + renamed: 'Rinominata', + renameFailed: 'Rinomina fallita', + pinned: 'Fissata', + results: 'Risultati', + allPinned: 'Tutto qui è fissato. Rimuovi una chat per mostrarla nei recenti.', + pinHint: 'Shift-clic per fissare · trascina per riordinare', + loadMore: 'Carica altro', + noWorkspace: 'Nessuna area di lavoro', + ungroup: 'Mostra sessioni come lista unica', + groupByWorkspace: 'Raggruppa sessioni per area di lavoro', + loadStep: 'Carica', + moreLabel: 'altro', + nothingArchivedTitle: 'Niente archiviato', + deletePermanentlyTitle: 'Elimina definitivamente', + defaultProjectDirTitle: 'Directory di progetto predefinita', + loadingArchived: 'Caricamento sessioni archiviate…', + restored: 'Ripristinata', + projectDirUpdated: 'Directory di progetto predefinita aggiornata', + loadFailed: 'Impossibile caricare le sessioni archiviate', + unarchiveFailed: 'Disarchiviazione fallita', + deleteFailed: 'Eliminazione fallita', + archiveHint: 'Archivia una chat per nasconderla qui.', + updateDirFailed: 'Impossibile aggiornare la directory predefinita', + clearDirFailed: 'Impossibile cancellare la directory predefinita', + }, + mcp: { + title: 'Server MCP', + addServer: 'Aggiungi Server', + noServers: 'Nessun server MCP configurato.', + loading: 'Caricamento server MCP…', + servers: 'Server MCP', + count => `${count} configurati`, + newServer: 'Nuovo server', + reloadMCP: 'Ricarica MCP', + reloading: 'Ricaricamento...', + noServersDesc: 'Aggiungi un server stdio o HTTP per esporre strumenti MCP.', + name: 'Nome', + namePlaceholder: 'filesystem', + serverJSON: 'JSON Server', + editServer: 'Modifica server', + saveServer: 'Salva server', + saving: 'Salvataggio...', + remove: 'Rimuovi', + disabled: 'disabilitato', + nameRequired: 'Nome obbligatorio', + nameRequiredDesc: 'Assegna una chiave di configurazione a questo server MCP.', + invalidJson: 'La configurazione del server deve essere un oggetto JSON', + invalidJsonDesc: 'JSON MCP non valido', + saved: 'Server MCP salvato', + name => `${name} si applica dopo il ricaricamento MCP.`, + saveFailed: 'Salvataggio fallito', + removeFailed: 'Rimozione fallita', + gatewayUnavailable: 'Gateway non disponibile', + gatewayUnavailableDesc: 'Riconnetti il gateway prima di ricaricare MCP.', + reloadedTitle: 'Strumenti MCP ricaricati', + reloadedDesc: 'I nuovi schemi strumento si applicano ai nuovi turni.', + reloadFailed: 'Ricarica MCP fallita', + giveConfigKey: 'Assegna una chiave di configurazione a questo server MCP.', + reconnectGateway: 'Riconnetti il gateway prima di ricaricare MCP.', + newSchemas: 'I nuovi schemi strumento si applicano ai nuovi turni.', + loadingServers: 'Caricamento server MCP...', + serverName: 'Nome', + serversTitle: 'Server MCP', + noServersTitle: 'Nessun server MCP', + failedToLoad: 'Caricamento configurazione MCP fallito', + invalidJsonShort: 'JSON MCP non valido', + serverSaved: 'Server MCP salvato', + toolsReloaded: 'Strumenti MCP ricaricati', + emptyDesc: 'Aggiungi un server stdio o HTTP per esporre strumenti MCP.', + }, + tools: { + title: 'Strumenti e Competenze', + noTools: 'Nessuno strumento disponibile.', + }, + nav: { + home: 'Home', + chat: 'Chat', + settings: 'Impostazioni', + files: 'File', + terminal: 'Terminale', + }, + header: { + search: 'Cerca o digita un comando…', + }, + model: { + auxTask: { + vision: 'Visione', + visionHint: 'Analisi immagini', + web_extract: 'Estrazione web', + web_extractHint: 'Riassunto pagine', + compression: 'Compressione', + compressionHint: 'Compattazione contesto', + session_search: 'Ricerca sessioni', + session_searchHint: 'Query di richiamo', + skills_hub: 'Hub competenze', + skills_hubHint: 'Ricerca competenze', + approval: 'Approvazione', + approvalHint: 'Auto-approvazione intelligente', + mcp: 'MCP', + mcpHint: 'Routing strumenti MCP', + title_generation: 'Generazione titoli', + title_generationHint: 'Titoli sessione', + curator: 'Curatore', + curatorHint: 'Revisione uso competenze', + }, + mainModel: 'Modello principale', + mainDesc: 'Si applica alle nuove sessioni. Usa il selettore modello nel compositore per cambiare al volo la chat attiva.', + providerPlaceholder: 'Provider', + modelPlaceholder: 'Modello', + apply: 'Applica', + applying: 'Applicazione…', + auxiliaryModels: 'Modelli ausiliari', + auxiliaryDesc: 'Le attività ausiliarie usano il modello principale per impostazione predefinita. Assegna un modello dedicato a qualsiasi attività per sovrascrivere.', + resetAllToMain: 'Reimposta tutto al principale', + setToMain: 'Imposta al principale', + change: 'Cambia', + cancel: 'Annulla', + autoUseMain: 'auto · usa modello principale', + providerDefault: '(predefinito provider)', + loading: 'Caricamento configurazione modello…', + options: 'Opzioni', + thinking: 'Ragionamento', + fast: 'Veloce', + effort: 'Sforzo', + noOptions: 'Nessuna opzione per questo modello', + optionUpdateFailed: 'Aggiornamento opzione modello fallito', + fastModeUpdateFailed: 'Aggiornamento modalità veloce fallito', + effortMinimal: 'Minimo', + effortLow: 'Basso', + effortMedium: 'Medio', + effortHigh: 'Alto', + effortMax: 'Massimo', + switch: 'Cambia modello', + unknown: '(sconosciuto)', + filterPlaceholder: 'Filtra provider e modelli...', + persistGlobal: 'Rendi globale', + persistGlobalSession: 'Rendi globale (altrimenti solo questa sessione)', + couldNotLoad: 'Impossibile caricare i modelli', + proLockedDesc: 'I modelli Pro richiedono un abbonamento Nous a pagamento.', + priceTooltip: 'Prezzo input/output per milione di token', + freePrice: 'Gratuito', + currentLabel: 'attuale:', + addProviderBtn: 'Aggiungi provider', + }, + models: { + title: 'Modelli', + search: 'Cerca modelli', + addProvider: 'Aggiungi provider…', + }, + updates: { + checking: 'Verifica aggiornamenti…', + available: 'Aggiornamento disponibile', + downloading: 'Download in corso…', + installing: 'Installazione in corso…', + restart: 'Riavvia per aggiornare', + stageGettingReady: 'Preparazione…', + stageDownloading: 'Download in corso…', + stageAlmostThere: 'Quasi pronto…', + stageFinishingUp: 'Completamento…', + stageRestarting: 'Riavvio di Hermes…', + stageManual: 'Aggiorna dal tuo terminale', + stageError: 'Aggiornamento in pausa', + updatingHermes: 'Aggiornamento di Hermes…', + lookingForUpdates: 'Ricerca aggiornamenti…', + couldntCheck: 'Impossibile verificare gli aggiornamenti', + updateNotAvailable: 'Aggiornamento non disponibile', + checkConnection: 'Verifica la tua connessione e riprova.', + onLatest: 'Stai usando l\'ultima versione.', + allSet: 'Tutto a posto', + newUpdateAvailable: 'Nuovo aggiornamento disponibile', + readyToInstall: 'Una nuova versione di Hermes è pronta per l\'installazione.', + updateNow: 'Aggiorna ora', + maybeLater: 'Forse più tardi', + count => `+ ${count} altra modifica inclusa.`, + count => `+ ${count} altre modifiche incluse.`, + updateFromTerminal: 'Aggiorna dal tuo terminale', + terminalDesc: 'Hai installato Hermes dalla riga di comando, quindi anche gli aggiornamenti vengono eseguiti lì. Incolla questo nel tuo terminale:', + copied: 'Copiato', + copy: 'Copia', + pickupNewVersion: 'Hermes rileverà la nuova versione al prossimo avvio.', + done: 'Fatto', + updaterDesc: 'L\'aggiornatore di Hermes prenderà il controllo nella sua finestra e riaprirà Hermes al termine.', + closeToApply: 'Hermes si chiuderà per applicare l\'aggiornamento.', + updateDidntFinish: 'L\'aggiornamento non è stato completato', + nothingLost: 'Nessun problema — non è stato perso nulla. Puoi riprovare ora.', + notNow: 'Non ora', + }, + errors: { + generic: 'Qualcosa è andato storto.', + notFound: 'Pagina non trovata.', + noPermission: 'Non hai il permesso di accedere a questo.', + somethingBroke: 'Qualcosa si è rotto nell\'interfaccia', + viewCrashedDesc: 'La vista ha incontrato un errore imprevisto. Le tue chat e impostazioni sono al sicuro - riprova o ricarica la finestra.', + noProviders: 'Nessun provider autenticato.', + }, + tool: { + toolCall: 'Chiamata Strumento', + result: 'Risultato', + error: 'Errore', + timeout: 'Scaduto', + cancelled: 'Annullato', + running: 'In esecuzione', + recovered: 'Ripristinato', + done: 'Completato', + output: 'Output strumento', + searchResults: 'Risultati ricerca', + rawResponse: 'Risposta grezza', + stdout: 'stdout', + stderr: 'stderr', + copyActivity: 'Copia attività', + recoveredAfter: 'Ripristinato dopo 1 passo fallito', + count => `Ripristinato dopo ${count} passi falliti`, + oneStepFailed: '1 passo fallito', + count => `${count} passi falliti`, + }, + composer: { + startingHermes: 'Avvio di Hermes...', + sendFollowUp: 'Invia seguito', + message: 'Messaggio', + editingQueued: 'Modifica turno in coda nel compositore', + attach: 'Allega', + files: 'File…', + folder: 'Cartella…', + images: 'Immagini…', + pasteImage: 'Incolla immagine', + url: 'URL…', + promptSnippets: 'Frammenti prompt', + promptSnippetsDesc: 'Scegli un prompt iniziale da inserire nel compositore.', + voiceStart: 'Avvia conversazione vocale', + queue: 'Accoda messaggio', + speaking: 'In riproduzione', + transcribing: 'Trascrizione in corso', + muted: 'Muto', + listening: 'In ascolto', + unmuteMic: 'Riattiva microfono', + muteMic: 'Disattiva microfono', + stopListening: 'Ferma ascolto e invia', + endVoice: 'Termina conversazione vocale', + end: 'Fine', + stopDictation: 'Ferma dettatura', + transcribingDictation: 'Trascrizione dettatura in corso', + voiceDictation: 'Dettatura vocale', + addContext: 'Aggiungi contesto', + }, + previewConsole: { + resizeLabel: 'Ridimensiona console anteprima', + noMessages: 'Nessun messaggio console ancora.', + }, + urlDialog: { + title: 'Allega un URL', + description: 'Hermes recupererà la pagina e la includerà come contesto per questo turno.', + placeholder: 'https://esempio.com/articolo', + hint: 'Includi l\'URL completo, ad es.', + attach: 'Allega', + }, + boot: { + ipcUnavailable: 'Il bridge IPC desktop non è disponibile.', + backendExited: 'Il processo in background di Hermes è terminato durante l\'avvio.', + backendStoppedTitle: 'Backend fermo', + backendStoppedMessage: 'Il processo in background di Hermes è terminato.', + startingConnection: 'Avvio connessione desktop', + connectingGateway: 'Connessione gateway desktop attivo', + loadingConfig: 'Caricamento impostazioni Hermes', + loadingSessions: 'Caricamento sessioni recenti', + desktopBootFailed: 'Avvio desktop fallito', + couldNotStart: 'Hermes non è riuscito ad avviarsi', + recoveryDesc: 'Il gateway in background non si è avviato. Prova una delle seguenti procedure di ripristino — nulla qui elimina le tue chat o impostazioni.', + retry: 'Riprova', + repairInstall: 'Ripara installazione', + useLocalGateway: 'Usa gateway locale', + openLogs: 'Apri log', + repairHint: 'La riparazione riesegue il programma di installazione e può richiedere alcuni minuti su una macchina nuova.', + showLogs: 'Mostra log recenti', + hideLogs: 'Nascondi log recenti', + }, + bootstrap: { + pending: 'In attesa', + running: 'Installazione in corso', + done: 'Completato', + skipped: 'Saltato', + failed: 'Fallito', + }, + install: { + title: 'Hermes richiede un\'installazione unica', + desc: 'L\'installazione automatica al primo avvio non è disponibile su', + descEnd: 'ancora. Apri Terminale ed esegui il comando qui sotto, poi riavvia questa app. Gli avvii successivi salteranno questo passaggio.', + installCommand: 'Comando di installazione', + copyCommand: 'Copia comando', + viewDocs: 'Visualizza documentazione installazione', + willInstallTo: 'Verrà installato in', + iRanIt: 'L\'ho eseguito -- riprova', + failed: 'Installazione fallita', + settingUp: 'Configurazione di Hermes Agent', + finishingUp: 'Completamento', + failedDesc: 'Uno dei passaggi di installazione è fallito. Su Windows, questo può accadere se un\'altra CLI Hermes o istanza desktop è in esecuzione. Ferma tutte le istanze Hermes in esecuzione, poi riprova. Controlla i dettagli qui sotto o il log desktop per la trascrizione completa.', + setupDesc: 'Questa è una configurazione unica. Il programma di installazione di Hermes sta scaricando le dipendenze e configurando la tua macchina. Gli avvii successivi salteranno questo passaggio.', + fetchingManifest: 'Recupero manifesto di installazione...', + error: 'Errore', + showOutput: 'Mostra output installazione', + hideOutput: 'Nascondi output installazione', + noOutput: 'Nessun output ancora.', + cancelInstall: 'Annulla installazione', + cancelling: 'Annullamento...', + copyOutput: 'Copia output', + copied: 'Copiato!', + reloadRetry: 'Ricarica e riprova', + saveLogs: 'Trascrizione completa salvata in', + stepsComplete: 'passi completati', + nowLabel: 'ora', + line: 'riga', + lines: 'righe', + }, + titlebar: { + hideSidebar: 'Nascondi barra laterale', + showSidebar: 'Mostra barra laterale', + search: 'Cerca', + searchTitle: 'Cerca sessioni, viste e azioni', + hideRightSidebar: 'Nascondi barra laterale destra', + showRightSidebar: 'Mostra barra laterale destra', + unmuteHaptics: 'Riattiva feedback tattile', + muteHaptics: 'Disattiva feedback tattile', + openSettings: 'Apri impostazioni', + profiles: 'Profili', + profilesDesc: 'Ambienti Hermes avanzati per persone, configurazioni, competenze e SOUL.md separati.', + manageProfiles: 'Gestisci profili', + language: 'Lingua', + languageDesc: 'Scegli una lingua di visualizzazione per l\'interfaccia.', + }, + sidebar: { + sheetTitle: 'Barra laterale', + sheetDesc: 'Mostra la barra laterale mobile.', + toggle: 'Attiva/Disattiva Barra Laterale', + }, + clarify: { + hermesIsAsking: 'Hermes sta chiedendo', + loadingQuestion: 'Caricamento domanda…', + otherTypeAnswer: 'Altro (digita la risposta)', + placeholderAnswer: 'Digita la tua risposta…', + cmdEnterToSend: '⌘/Ctrl + Invio per inviare', + back: 'Indietro', + skip: 'Salta', + couldNotSend: 'Impossibile inviare la risposta di chiarimento', + n => `1–${n} per scegliere`, + }, + pagination: { + ariaLabel: 'paginazione', + prevAria: 'Vai alla pagina precedente', + prev: 'Prec', + nextAria: 'Vai alla pagina successiva', + next: 'Succ', + }, + intro: { + fallback1h: 'Cosa muoviamo oggi?', + fallback1b: 'Inviami un bug, branch, piano o idea approssimativa. Ispezionerò il repository e lo trasformerò nel prossimo passo concreto.', + fallback2h: 'A cosa stai pensando?', + fallback2b: 'Porta il codice, la domanda o la parte bloccata. Leggerò la stanza prima di fare modifiche.', + fallback3h: 'Cosa dovrebbe guardare Hermes?', + fallback3b: 'Inviami il compito, il percorso fallito o il piano a metà. Ti aiuterò a trasformarlo in azione.', + fallback4h: 'Da dove iniziamo?', + fallback4b: 'Porta il problema, l\'obiettivo o il file. Ispezionerò prima e manterrò il prossimo passo concreto.', + fallback5h: 'Cosa richiede attenzione?', + fallback5b: 'Inviami il contesto che hai. Ti aiuterò a organizzarlo in un piano o una correzione.', + personality: { + label => `La modalità ${label} è attiva. Su cosa dovremmo lavorare?`, + body1: 'Inviami il compito, il file o l\'idea approssimativa. Userò la tua voce configurata e manterrò il lavoro ancorato a questo repository.', + label => `Cosa deve vedere ${label} Hermes?`, + body2: 'Porta il contesto o la parte bloccata. Mi adatterò alla tua personalità configurata.', + label => `La modalità ${label} è pronta.`, + body3: 'Inviami il problema, il file o l\'idea. Seguirò la personalità che hai configurato.', + label => `Cosa dovrebbe affrontare ${label} Hermes?`, + body4: 'Lascia il compito qui. Manterrò il lavoro ancorato al repository.', + heading5: 'Da dove iniziamo?', + label => `Dammi il contesto e risponderò in modalità ${label}.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'Nessun artefatto trovato', + }, + agents: { + spawnTree: 'Albero di generazione', + liveSubagentActivity: 'Attività subagenti in tempo reale per il turno corrente.', + noLiveSubagents: 'Nessun subagente attivo', + files: 'File', + label: 'Agenti', + open: 'Apri agenti', + close: 'Chiudi agenti', + subagent: 'subagente', + subagents: 'subagenti', + failed: 'fallito', + running: 'in esecuzione', + }, + provider: { + desc: { + nousPortal: 'Override URL base Nous Portal', + openRouter: 'Chiave API OpenRouter (per visione, helper web scraping e MoA)', + google: 'Chiave API Google AI Studio (riconosciuta anche come GEMINI_API_KEY)', + gemini: 'ID progetto GCP per piani Gemini a pagamento (il piano gratuito si auto-provvigiona)', + anthropic: 'Chiave API Anthropic', + deepseek: 'URL base API DeepSeek personalizzato (avanzato)', + xai: 'Override URL base xAI', + huggingface: 'Override URL base Hugging Face Inference Providers', + kimi: 'Chiave API Kimi / Moonshot Cina', + minimax: 'Override URL base MiniMax (Cina)', + minimaxCn: 'Chiave API MiniMax Cina', + dashscope: 'URL base DashScope personalizzato (predefinito: endpoint compatibile OpenAI coding-intl)', + glm: 'Chiave API GLM (Z.AI)', + nvidia: 'Override URL base NVIDIA NIM (es. http://localhost:8000/v1 per NIM locale)', + opencodeGo: 'Chiave API OpenCode Go', + opencodeZen: 'Chiave API OpenCode Zen', + xiaomi: 'Override URL base Xiaomi MiMo (predefinito: https://api.xiaomimimo.com/v1)', + kiloCode: 'Chiave API Kilo Code', + aiGateway: 'Chiave API AI Gateway (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'Chiave API ElevenLabs', + openai: 'Chiave API OpenAI (per elaborazione vocale tramite proxy)', + mistral: 'Chiave API Mistral (per STT/TTS)', + groq: 'Chiave API Groq (per STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'URL API Firecrawl per istanze self-hosted (opzionale)', + fal: 'FAL_KEY', + nous: 'Override URL base Nous Portal', + openrouter: 'Chiave API OpenRouter (per visione, helper web scraping e MoA)', + lmstudio: 'Override URL base Z.AI / GLM', + zai: 'URL base Azure Foundry (imposta tramite \'hermes model\' per configurazione specifica endpoint)', + stepfun: 'Override URL base StepFun Step Plan', + arcee: 'Override URL base Arcee AI', + gmi: 'Override URL base GMI Cloud', + qwenportal: 'Override URL base Qwen Portal (predefinito: https://portal.qwen.ai/v1)', + opencodego: 'Override URL base OpenCode Go', + ollamacloud: 'Override URL base Ollama Cloud (predefinito: https://ollama.com/v1)', + awsbedrock: 'Profilo AWS nominato per autenticazione Bedrock (da ~/.aws/credentials)', + exa: 'Chiave API Exa per ricerca web e contenuti AI-nativi', + parallel: 'Chiave API Parallel per ricerca web ed estrazione AI-nativi', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/ko.ts b/apps/desktop/src/i18n/ko.ts new file mode 100644 index 000000000000..6dbdde1db973 --- /dev/null +++ b/apps/desktop/src/i18n/ko.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const ko = defineLocale( +{ + appearance: { + title: '외관', + description: '데스크톱 전용 디스플레이 설정입니다. 모드는 밝기를 제어하고, 테마는 악센트 팔레트와 채팅 화면 스타일을 제어합니다.', + colorMode: '색상 모드', + colorModeDesc: '고정 모드를 선택하거나 시스템 설정을 따르도록 합니다.', + theme: { + nous: 'Nous', + nousDesc: '글라스 뉴트럴 톤에 Nous 블루 악센트', + midnight: '미드나잇', + midnightDesc: '깊은 블루-바이올렛과 시원한 악센트', + ember: '엠버', + emberDesc: '따뜻한 크림슨과 브론즈 - 대장간 분위기', + mono: '모노', + monoDesc: '깔끔한 그레이스케일 - 미니멀하고 집중도 높은', + cyberpunk: '사이버펑크', + cyberpunkDesc: '검은 바탕에 네온 그린 - 매트릭스 터미널', + slate: '슬레이트', + slateDesc: '차분한 슬레이트 블루 - 개발자 집중 테마', + }, + themeDesc: '채팅 화면과 인터페이스 악센트에 사용할 색상 팔레트를 선택하세요.', + mode: { + light: '라이트', + lightDesc: '밝은 데스크톱 화면', + dark: '다크', + darkDesc: '눈부심이 적은 작업 공간', + system: '시스템', + systemDesc: 'OS 설정을 따릅니다', + }, + language: '언어', + languageDesc: 'UI 언어를 선택하거나 시스템 설정을 따릅니다.', + toolCallDisplay: '도구 호출 표시', + toolCallDisplayDesc: 'Product는 원시 도구 페이로드를 숨기고, Technical은 전체 입출력을 표시합니다.', + toolViewProduct: '프로덕트', + toolViewTechnical: '테크니컬', + toolViewProductDesc: '간결한 요약으로 사람 친화적인 도구 활동을 표시합니다.', + toolViewTechnicalDesc: '원시 도구 인자/결과와 저수준 세부 정보를 포함합니다.', + }, + settings: { + title: '설정', + appearance: '외관', + model: '모델', + gateway: '게이트웨이', + sessions: '세션', + tools: '도구 & 스킬', + section: { + chat: '채팅', + workspace: '작업 공간', + safety: '안전', + memory: '메모리 & 컨텍스트', + voice: '음성', + advanced: '고급', + }, + mcp: 'MCP 서버', + config: '설정', + keys: 'API 키', + about: '정보', + closeSettings: '설정 닫기', + archivedChats: '보관된 채팅', + exportConfig: '설정 내보내기', + importConfig: '설정 가져오기', + resetDefaults: '기본값으로 초기화', + llmProviders: 'LLM 제공자', + searchPlaceholder: { + about: 'Hermes Desktop 정보', + config: '설정 검색…', + gateway: '게이트웨이 연결…', + keys: 'API 키 검색…', + mcp: 'MCP 서버 검색…', + sessions: '보관된 세션 검색…', + }, + }, + chat: { + placeholder: '무엇이든 물어보세요…', + send: '보내기', + stop: '중지', + thinking: '생각 중…', + noSession: '활성 세션이 없습니다. 새 대화를 시작하세요.', + loadingSession: '세션 로딩 중', + loadingResponse: 'Hermes가 응답을 불러오는 중', + branchInNewChat: '새 채팅에서 분기', + readAloud: '소리내어 읽기', + preparingAudio: '오디오 준비 중...', + stopReading: '읽기 중지', + editMessage: '메시지 편집', + editableCheckpoint: '편집 가능한 체크포인트', + restoreCheckpoint: '체크포인트 복원', + goForward: '앞으로 가기', + restorePrevCheckpoint: '이전 체크포인트 복원', + restoreNextCheckpoint: '다음 체크포인트 복원', + composerTip: '팁: @를 입력하여 파일을 인라인으로 참조하세요.', + reconnecting: 'Hermes에 재연결 중…', + }, + commandCenter: { + title: '커맨드 센터', + noSessions: '아직 세션이 없습니다.', + loadingStatus: '상태 로딩 중…', + recentLogs: '최근 로그', + dailyTokens: '일일 토큰', + noActivity: '일일 활동이 없습니다.', + noModelUsage: '아직 모델 사용 내역이 없습니다.', + noSkillActivity: '아직 스킬 활동이 없습니다.', + sessionsPanel: '세션 패널', + systemPanel: '시스템 패널', + usagePanel: '사용량 패널', + navigate: '이동', + noMatchingResults: '일치하는 결과를 찾을 수 없습니다.', + noSessionsYet: '아직 세션이 없습니다.', + unpinSession: '세션 고정 해제', + pinSession: '세션 고정', + exportSession: '세션 내보내기', + deleteSession: '세션 삭제', + gatewayRunning: '메시징 게이트웨이 실행 중', + gatewayStopped: '메시징 게이트웨이 중지됨', + restartMsg: '메시징 재시작', + updateHermes: 'Hermes 업데이트', + noLogsLoaded: '아직 로그가 로드되지 않았습니다.', + closeLabel: '커맨드 센터 닫기', + searchPlaceholder: '세션, 뷰, 작업 검색', + statSessions: '세션', + statApiCalls: 'API 호출', + statTokens: '토큰 입/출력', + statEstCost: '예상 비용', + cost => `실제 비용 ${cost}`, + loadingUsage: '사용량 로딩 중...', + count => `지난 ${count}일 동안 사용 내역이 없습니다.`, + retry: '재시도', + tokenInput: '입력', + tokenOutput: '출력', + noDailyActivity: '일일 활동이 없습니다.', + topModels: '인기 모델', + topSkills: '인기 스킬', + actionsLabel: '작업', + systemRunning: '실행 중', + systemDone: '완료', + systemFailed: '실패', + open: '커맨드 센터 열기', + close: '커맨드 센터 닫기', + }, + common: { + loading: '로딩 중…', + save: '저장', + cancel: '취소', + close: '닫기', + delete: '삭제', + confirm: '확인', + search: '검색…', + clearSearch: '검색 지우기', + copy: '복사', + refresh: '새로고침', + moreActions: '더 많은 작업', + tryAgain: '다시 시도', + }, + onboarding: { + welcome: 'Hermes에 오신 것을 환영합니다', + getStarted: '제공자와 모델을 선택하여 시작하세요.', + skip: '건너뛰기', + continue: '계속', + finish: '완료', + setupTitle: 'Hermes Agent 설정을 시작합니다', + setupDesc: '모델 제공자를 연결하여 채팅을 시작하세요. 대부분 클릭 한 번으로 가능합니다.', + preparing: 'Hermes 시작 중…', + installing: 'Hermes 설치를 마무리 중입니다. 처음 실행 시 보통 1분 이내에 완료됩니다.', + lookingUp: '제공자 조회 중...', + otherProviders: '기타 제공자', + collapse: '접기', + iHaveKey: 'API 키가 있습니다', + recommended: '추천', + connected: '연결됨', + backToSignIn: '로그인으로 돌아가기', + getKey: '키 받기', + pasteKey: 'API 키 붙여넣기', + connect: '연결', + connecting: '연결 중', + copyCode: '복사', + startSignIn: '로그인 시작 중:', + verifyingCode: '코드 확인 중:', + pickingModel: '연결됨. 기본 모델 선택 중...', + signInFailed: '로그인 실패. 다시 시도하세요.', + pickDifferent: '다른 제공자 선택', + signInTitle: '로그인:', + step1: '브라우저에서', + step1End: '페이지를 열었습니다.', + step2: '해당 페이지에서 Hermes를 인증하세요.', + step3: '인증 코드를 복사하여 아래에 붙여넣으세요.', + pasteCode: '인증 코드 붙여넣기', + reopenAuth: '인증 페이지 다시 열기', + cancel: '취소', + browserDesc: '브라우저에서', + browserDescEnd: '페이지를 열었습니다. 해당 페이지에서 Hermes를 인증하면 자동으로 연결됩니다 — 복사하거나 붙여넣을 필요가 없습니다.', + waitingAuth: '인증을 기다리는 중...', + reopenSignIn: '로그인 페이지 다시 열기', + externalDesc: '자체 CLI를 통해 로그인합니다. 터미널에서 이 명령어를 실행한 후 돌아와서 "로그인 완료"를 선택하세요:', + iSignedIn: '로그인 완료', + enterCode: '브라우저에서', + enterCodeEnd: '페이지를 열었습니다. 이 코드를 입력하세요:', + reopenVerification: '확인 페이지 다시 열기', + defaultModel: '기본 모델', + freeTier: '무료 등급', + pro: '프로', + change: '변경', + startChatting: '채팅 시작', + docs: '문서', + close: '닫기', + savingError: '자격 증명을 저장할 수 없습니다.', + openRouter: 'OpenRouter', + }, + file: { + browser: '파일 브라우저', + noFiles: '아직 파일이 없습니다.', + }, + terminal: { + title: '터미널', + newTab: '새 탭', + closeTab: '탭 닫기', + }, + skills: { + title: '스킬', + search: '스킬 검색…', + noResults: '스킬을 찾을 수 없습니다.', + tools: '스킬 & 도구', + }, + profiles: { + title: '프로필', + noProfilesYet: '아직 프로필이 없습니다.', + selectProfile: '세부 정보를 보려면 프로필을 선택하세요.', + deleteProfile: '프로필을 삭제할까요?', + soulMd: 'SOUL.md', + unsavedChanges: '저장되지 않은 변경사항', + newProfile: '새 프로필', + cloneFromDefault: '기본값에서 복제', + renameProfile: '프로필 이름 변경', + }, + cron: { + title: '크론 작업', + noJobs: '예약된 작업이 없습니다.', + deleteCronJob: '크론 작업을 삭제할까요?', + optional: '선택 사항', + label: '크론', + open: '크론 작업 열기', + }, + messaging: { + title: '메시징', + recommended: '권장', + recommendedTelegram: '권장. @userinfobot에서 얻은 쉼표로 구분된 숫자 ID입니다. 설정하지 않으면 누구나 봇에 DM을 보낼 수 있습니다.', + recommendedDiscord: '권장. 쉼표로 구분된 Discord 사용자 ID입니다.', + recommendedSlack: '권장. 쉼표로 구분된 Slack 사용자 ID입니다.', + recommendedMattermost: '권장. 쉼표로 구분된 Mattermost 사용자 ID입니다.', + recommendedMatrix: '권장. @user:server 형식의 쉼표로 구분된 사용자 ID입니다.', + recommendedSignal: '권장. 쉼표로 구분된 Signal 식별자입니다.', + recommendedWhatsApp: '권장. 쉼표로 구분된 전화번호 또는 WhatsApp ID입니다.', + gatewayStopped: '메시징 게이트웨이 중지됨', + getCredentials: '자격 증명 가져오기', + required: '필수', + unsavedChanges: '저장되지 않은 변경사항', + saved: '저장됨', + }, + about: { + version: '버전', + checkUpdates: '업데이트 확인', + upToDate: '최신 버전입니다.', + updateAvailable: '업데이트가 있습니다.', + license: 'MIT 라이선스', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: '버전 정보 없음', + updates: '업데이트', + checkNow: '지금 확인', + checking: '확인 중…', + seeWhatsNew: '새로운 기능 보기', + releaseNotes: '릴리스 노트', + autoUpdates: '자동 업데이트', + autoUpdatesDesc: 'Hermes가 백그라운드에서 자동으로 업데이트를 확인하고 준비되면 알려드립니다.', + selfUpdateUnsupported: '이 빌드는 앱 내에서 자체 업데이트할 수 없습니다.', + cannotReachServer: '업데이트 서버에 연결할 수 없습니다.', + installingUpdate: '현재 업데이트를 설치 중입니다.', + count => `새 업데이트가 준비되었습니다 (${count}개 변경사항 포함).`, + count => `새 업데이트가 준비되었습니다 (${count}개 변경사항 포함).`, + onLatest: '최신 버전을 사용 중입니다.', + tapCheckNow: '업데이트를 확인하려면 "지금 확인"을 누르세요.', + time => `마지막 확인: ${time}`, + justNow: '방금 전', + never: '확인 안 함', + count => `${count}분 전`, + count => `${count}시간 전`, + count => `${count}일 전`, + (branch, sha) => `브랜치 ${branch} · 커밋 ${sha}`, + }, + keys: { + title: 'API 키', + noKeys: '설정된 API 키가 없습니다.', + addKey: '키 추가', + loading: 'API 키 및 자격 증명 로딩 중…', + docs: '문서', + openDocs: '제공자 문서 열기', + hideValue: '값 숨기기', + revealValue: '값 보기', + set: '설정됨', + notSet: '미설정', + replace: '교체', + replaceValue: '현재 값 교체', + enterValue: '값 입력', + saving: '저장 중', + save: '저장', + cancel: '취소', + clearValue: '값 지우기', + (total, count) => `${total}개 중 ${count}개 설정됨`, + (total, count) => `${total}개 중 ${count}개 설정됨`, + count => `${count}개 설정됨`, + count => `${count}개 키`, + otherProviders: '기타 제공자', + categoryTools: '도구', + categoryMessaging: '메시징', + categorySettings: '설정', + openProviderDocs: '제공자 문서 열기', + showAdvanced: '고급 설정 보기', + loadFailed: 'API 키 로딩 실패', + credentialSaved: '자격 증명 저장 완료', + credentialRemoved: '자격 증명 제거 완료', + }, + config: { + title: '설정', + edit: '설정 편집', + reload: '설정 다시 불러오기', + notSet: '미설정', + commaSeparated: '쉼표로 구분된 값', + on: '켜기', + off: '끄기', + none: '없음', + emptyOption: '(없음)', + loading: 'Hermes 설정 로딩 중…', + noMatching: '일치하는 설정이 없습니다', + noMatchingDesc: '다른 검색어를 시도하거나 다른 섹션을 선택하세요.', + count => `${count}개 결과`, + count => `${count}개 결과`, + saving: '저장 중…', + label: { + defaultModel: '기본 모델', + contextWindow: '컨텍스트 창', + fallbackModels: '대체 모델', + enabledToolsets: '활성화된 도구 세트', + timezone: '시간대', + personality: '페르소나', + reasoningBlocks: '추론 블록', + maxAgentSteps: '최대 에이전트 단계', + imageAttachments: '이미지 첨부', + workingDirectory: '작업 디렉터리', + executionBackend: '실행 백엔드', + commandTimeout: '명령어 시간 초과', + persistentShell: '영구 셸', + envPassthrough: '환경 변수 전달', + fileReadLimit: '파일 읽기 제한', + terminalOutputLimit: '터미널 출력 제한', + filePageLimit: '파일 페이지 제한', + lineLengthLimit: '줄 길이 제한', + codeExecutionMode: '코드 실행 모드', + approvalMode: '승인 모드', + approvalTimeout: '승인 시간 초과', + confirmMcpReloads: 'MCP 다시 불러오기 확인', + commandAllowlist: '명령어 허용 목록', + redactSecrets: '비밀 정보 가리기', + allowPrivateUrls: '비공개 URL 허용', + browserPrivateUrls: '브라우저 비공개 URL', + localBrowserForPrivateUrls: '비공개 URL용 로컬 브라우저', + fileCheckpoints: '파일 체크포인트', + checkpointLimit: '체크포인트 제한', + voiceShortcut: '음성 단축키', + maxRecordingLength: '최대 녹음 길이', + readResponsesAloud: '응답 소리내어 읽기', + speechToText: '음성-텍스트 변환', + speechToTextProvider: '음성-텍스트 변환 제공자', + localTranscriptionModel: '로컬 변환 모델', + transcriptionLanguage: '변환 언어', + elevenlabsSttModel: 'ElevenLabs STT 모델', + elevenlabsLanguage: 'ElevenLabs 언어', + tagAudioEvents: '오디오 이벤트 태그', + speakerDiarization: '화자 분리', + textToSpeechProvider: '텍스트-음성 변환 제공자', + edgeVoice: 'Edge 음성', + openaiTtsModel: 'OpenAI TTS 모델', + openaiVoice: 'OpenAI 음성', + elevenlabsVoice: 'ElevenLabs 음성', + elevenlabsModel: 'ElevenLabs 모델', + persistentMemory: '영구 메모리', + userProfile: '사용자 프로필', + memoryBudget: '메모리 예산', + profileBudget: '프로필 예산', + memoryProvider: '메모리 제공자', + contextEngine: '컨텍스트 엔진', + autoCompression: '자동 압축', + compressionThreshold: '압축 임계값', + compressionTarget: '압축 대상', + protectedRecentMessages: '보호된 최근 메시지', + apiRetries: 'API 재시도', + serviceTier: '서비스 등급', + toolUseEnforcement: '도구 사용 강제', + subagentModel: '서브에이전트 모델', + subagentProvider: '서브에이전트 제공자', + subagentTurnLimit: '서브에이전트 턴 제한', + parallelSubagents: '병렬 서브에이전트', + subagentTimeout: '서브에이전트 시간 초과', + subagentReasoningEffort: '서브에이전트 추론 노력', + }, + desc: { + defaultModel: '컴포저에서 다른 모델을 선택하지 않으면 새 채팅에 사용됩니다.', + contextWindow: '선택한 모델의 감지된 컨텍스트 창을 사용하려면 0으로 두세요.', + fallbackModels: '기본 모델이 실패할 경우 시도할 백업 provider:model 항목입니다.', + personality: '새 세션의 기본 어시스턴트 스타일입니다.', + timezone: 'Hermes가 현지 시간 컨텍스트가 필요할 때 사용됩니다. 비워두면 시스템 시간대를 사용합니다.', + reasoningBlocks: '백엔드가 추론 섹션을 제공할 때 표시합니다.', + imageAttachments: '이미지 첨부 파일이 모델로 전송되는 방식을 제어합니다.', + workingDirectory: '도구 및 터미널 작업을 위한 기본 프로젝트 폴더입니다.', + codeExecutionMode: '코드 실행이 현재 프로젝트로 얼마나 엄격하게 범위가 지정되는지 설정합니다.', + persistentShell: '백엔드가 지원할 때 명령어 간에 셸 상태를 유지합니다.', + envPassthrough: '도구 실행에 전달할 환경 변수입니다.', + fileReadLimit: 'Hermes가 한 번의 파일 요청에서 읽을 수 있는 최대 문자 수입니다.', + approvalMode: '명시적 승인이 필요한 명령어를 Hermes가 처리하는 방식입니다.', + approvalTimeout: '승인 프롬프트가 시간 초과되기까지 기다리는 시간입니다.', + redactSecrets: '가능한 경우 모델에 표시되는 콘텐츠에서 감지된 비밀 정보를 숨깁니다.', + fileCheckpoints: '파일 편집 전에 롤백 스냅샷을 생성합니다.', + persistentMemory: '향후 세션에 도움이 될 수 있는 지속적인 메모리를 저장합니다.', + userProfile: '사용자 선호도의 간결한 프로필을 유지합니다.', + contextEngine: '컨텍스트 제한 근처에서 긴 대화를 관리하기 위한 전략입니다.', + autoCompression: '대화가 길어지면 이전 컨텍스트를 요약합니다.', + readResponsesAloud: '어시스턴트 응답을 자동으로 소리내어 읽습니다.', + speechToText: '로컬 또는 제공자 지원 음성 변환을 활성화합니다.', + elevenlabsLanguage: '선택적 ISO-639-3 언어 코드입니다. 비워두면 ElevenLabs가 자동 감지합니다.', + maxAgentSteps: 'Hermes가 실행을 중지하기 전 도구 호출 턴의 상한입니다.', + }, + }, + gateway: { + title: '게이트웨이', + start: '게이트웨이 시작', + stop: '게이트웨이 중지', + restart: '게이트웨이 재시작', + running: '실행 중', + stopped: '중지됨', + loading: '게이트웨이 설정 로딩 중…', + unavailable: '게이트웨이 설정을 사용할 수 없습니다', + unavailableDesc: '데스크톱 IPC 브릿지가 게이트웨이 설정을 노출하지 않습니다.', + connection: '게이트웨이 연결', + envOverride: '환경 변수 오버라이드', + desc: 'Hermes Desktop은 기본적으로 자체 로컬 게이트웨이를 시작합니다. 다른 머신이나 신뢰할 수 있는 프록시 뒤에서 이미 실행 중인 Hermes 백엔드를 이 앱으로 제어하려면 원격 게이트웨이를 사용하세요.', + envOverrideTitle: '환경 변수가 이 데스크톱 세션을 제어하고 있습니다.', + (urlVar, tokenVar) => `아래 저장된 설정을 사용하려면 ${urlVar}와 ${tokenVar}를 해제하세요.`, + localTitle: '로컬 게이트웨이', + localDesc: 'localhost에 비공개 Hermes 백엔드를 시작합니다. 기본값이며 오프라인에서도 작동합니다.', + remoteTitle: '원격 게이트웨이', + remoteDesc: '세션 토큰을 사용하여 이 데스크톱 셸을 원격 Hermes 백엔드에 연결합니다.', + remoteUrl: '원격 URL', + remoteUrlDesc: '원격 대시보드 백엔드의 기본 URL입니다. /hermes와 같은 경로 접두사를 지원합니다.', + remoteUrlPlaceholder: 'https://gateway.example.com/hermes', + sessionToken: '세션 토큰', + sessionTokenDesc: 'REST 및 WebSocket 접근에 사용되는 대시보드 세션 토큰입니다. 저장된 토큰을 유지하려면 빈 칸으로 두세요.', + sessionTokenPlaceholder: '세션 토큰 붙여넣기', + preview => `기존 토큰 ${preview}`, + tokenSaved: '저장됨', + testRemote: '원격 테스트', + saveRestart: '다음 재시작에 저장', + saveReconnect: '저장 후 재연결', + diagnostics: '진단', + diagnosticsDesc: '파일 관리자에서 desktop.log를 확인하세요 — 게이트웨이 시작 실패 시 유용합니다.', + openLogs: '로그 열기', + connected: '연결됨', + connecting: '연결 중', + disconnected: '연결 끊김', + inferenceReady: '추론 준비 완료', + inferenceNotReady: '추론 준비 안 됨', + checkingInference: '추론 확인 중', + openSystemPanel: '시스템 패널 열기', + connectionLabel: '연결:', + recentActivity: '최근 활동', + viewAllLogs: '모든 로그 보기 →', + messagingPlatforms: '메시징 플랫폼', + label: '게이트웨이', + inferenceStatus: '게이트웨이 추론 상태', + enterUrlFirst: '전환하기 전에 원격 URL과 세션 토큰을 입력하세요', + enterUrlFirstTest: '테스트하기 전에 원격 URL과 세션 토큰을 입력하세요', + }, + sessions: { + title: '세션', + search: '세션 검색…', + noResults: '세션을 찾을 수 없습니다.', + export: '내보내기', + delete: '세션 삭제', + loading: '로딩 중…', + defaultProjectDir: '기본 프로젝트 디렉터리', + defaultProjectDirDesc: '다른 폴더를 선택하지 않으면 새 세션이 이 폴더에서 시작됩니다. 설정하지 않으면 홈 디렉터리를 사용합니다.', + fallback => `기본값: ${fallback}.`, + notSet: '미설정', + change: '변경', + choose: '선택', + clear: '지우기', + archivedTitle: '보관된 세션', + archivedDesc: '보관된 채팅은 사이드바에서 숨겨지지만 모든 메시지는 유지됩니다. 사이드바에서 채팅을 Ctrl/⌘-클릭하여 보관하세요.', + nothingArchived: '보관된 항목 없음', + noSearchMatch: '검색과 일치하는 보관된 채팅이 없습니다.', + archiveToHide: '채팅을 보관하여 여기에 숨기세요.', + unarchive: '보관 해제', + deletePermanently: '영구 삭제', + count => `메시지 ${count}개`, + new: '새 세션', + running: '세션 실행 중', + actions: '세션 작업', + reorder: '순서 변경', + pin: '고정', + unpin: '고정 해제', + copyId: 'ID 복사', + rename: '이름 변경', + archive: '보관', + renameDialog: '세션 이름 변경', + renameDesc: '이 채팅에 기억하기 쉬운 제목을 지정하세요. 비우면 제목이 지워집니다.', + untitled: '제목 없음', + renamed: '이름 변경됨', + renameFailed: '이름 변경 실패', + pinned: '고정됨', + results: '결과', + allPinned: '여기 모든 항목이 고정되었습니다. 최근 항목에 표시하려면 채팅 고정을 해제하세요.', + pinHint: 'Shift-클릭으로 채팅 고정 · 드래그로 순서 변경', + loadMore: '더 보기', + noWorkspace: '작업 공간 없음', + ungroup: '세션을 단일 목록으로 표시', + groupByWorkspace: '작업 공간별로 세션 그룹화', + loadStep: '불러오기', + moreLabel: '더 보기', + nothingArchivedTitle: '보관된 항목 없음', + deletePermanentlyTitle: '영구 삭제', + defaultProjectDirTitle: '기본 프로젝트 디렉터리', + loadingArchived: '보관된 세션 로딩 중…', + restored: '복원됨', + projectDirUpdated: '기본 프로젝트 디렉터리 업데이트됨', + loadFailed: '보관된 세션을 불러올 수 없습니다', + unarchiveFailed: '보관 해제 실패', + deleteFailed: '삭제 실패', + archiveHint: '채팅을 보관하여 여기에 숨기세요.', + updateDirFailed: '기본 디렉터리를 업데이트할 수 없습니다', + clearDirFailed: '기본 디렉터리를 지울 수 없습니다', + }, + mcp: { + title: 'MCP 서버', + addServer: '서버 추가', + noServers: '설정된 MCP 서버가 없습니다.', + loading: 'MCP 서버 로딩 중…', + servers: 'MCP 서버', + count => `${count}개 설정됨`, + newServer: '새 서버', + reloadMCP: 'MCP 다시 불러오기', + reloading: '다시 불러오는 중...', + noServersDesc: 'stdio 또는 HTTP 서버를 추가하여 MCP 도구를 노출하세요.', + name: '이름', + namePlaceholder: 'filesystem', + serverJSON: '서버 JSON', + editServer: '서버 편집', + saveServer: '서버 저장', + saving: '저장 중...', + remove: '제거', + disabled: '비활성화됨', + nameRequired: '이름 필수', + nameRequiredDesc: '이 MCP 서버에 설정 키를 지정하세요.', + invalidJson: '서버 설정은 JSON 객체여야 합니다', + invalidJsonDesc: '유효하지 않은 MCP JSON', + saved: 'MCP 서버 저장 완료', + name => `${name}은(는) MCP 다시 불러오기 후 적용됩니다.`, + saveFailed: '저장 실패', + removeFailed: '제거 실패', + gatewayUnavailable: '게이트웨이를 사용할 수 없음', + gatewayUnavailableDesc: 'MCP를 다시 불러오기 전에 게이트웨이를 다시 연결하세요.', + reloadedTitle: 'MCP 도구 다시 불러오기 완료', + reloadedDesc: '새 도구 스키마가 새 턴에 적용됩니다.', + reloadFailed: 'MCP 다시 불러오기 실패', + giveConfigKey: '이 MCP 서버에 설정 키를 지정하세요.', + reconnectGateway: 'MCP를 다시 불러오기 전에 게이트웨이를 다시 연결하세요.', + newSchemas: '새 도구 스키마가 새 턴에 적용됩니다.', + loadingServers: 'MCP 서버 로딩 중...', + serverName: '이름', + serversTitle: 'MCP 서버', + noServersTitle: 'MCP 서버 없음', + failedToLoad: 'MCP 설정 로딩 실패', + invalidJsonShort: '유효하지 않은 MCP JSON', + serverSaved: 'MCP 서버 저장 완료', + toolsReloaded: 'MCP 도구 다시 불러오기 완료', + emptyDesc: 'stdio 또는 HTTP 서버를 추가하여 MCP 도구를 노출하세요.', + }, + tools: { + title: '도구 & 스킬', + noTools: '사용 가능한 도구가 없습니다.', + }, + nav: { + home: '홈', + chat: '채팅', + settings: '설정', + files: '파일', + terminal: '터미널', + }, + header: { + search: '검색 또는 명령어 입력…', + }, + model: { + auxTask: { + vision: '비전', + visionHint: '이미지 분석', + web_extract: '웹 추출', + web_extractHint: '페이지 요약', + compression: '압축', + compressionHint: '컨텍스트 압축', + session_search: '세션 검색', + session_searchHint: '리콜 쿼리', + skills_hub: '스킬 허브', + skills_hubHint: '스킬 검색', + approval: '승인', + approvalHint: '스마트 자동 승인', + mcp: 'MCP', + mcpHint: 'MCP 도구 라우팅', + title_generation: '제목 생성', + title_generationHint: '세션 제목', + curator: '큐레이터', + curatorHint: '스킬 사용 검토', + }, + mainModel: '메인 모델', + mainDesc: '새 세션에 적용됩니다. 컴포저의 모델 선택기를 사용하여 활성 채팅을 즉시 전환할 수 있습니다.', + providerPlaceholder: '제공자', + modelPlaceholder: '모델', + apply: '적용', + applying: '적용 중…', + auxiliaryModels: '보조 모델', + auxiliaryDesc: '도우미 작업은 기본적으로 메인 모델에서 실행됩니다. 특정 작업에 전용 모델을 할당하여 오버라이드할 수 있습니다.', + resetAllToMain: '모두 메인으로 초기화', + setToMain: '메인으로 설정', + change: '변경', + cancel: '취소', + autoUseMain: '자동 · 메인 모델 사용', + providerDefault: '(제공자 기본값)', + loading: '모델 설정 로딩 중…', + options: '옵션', + thinking: '생각', + fast: '빠른 모드', + effort: '노력', + noOptions: '이 모델에 대한 옵션 없음', + optionUpdateFailed: '모델 옵션 업데이트 실패', + fastModeUpdateFailed: '빠른 모드 업데이트 실패', + effortMinimal: '최소', + effortLow: '낮음', + effortMedium: '중간', + effortHigh: '높음', + effortMax: '최대', + switch: '모델 전환', + unknown: '(알 수 없음)', + filterPlaceholder: '제공자 및 모델 필터...', + persistGlobal: '전역으로 유지', + persistGlobalSession: '전역으로 유지 (그렇지 않으면 이 세션에만 적용)', + couldNotLoad: '모델을 불러올 수 없습니다', + proLockedDesc: 'Pro 모델은 유료 Nous 구독이 필요합니다.', + priceTooltip: '백만 토큰당 입력 / 출력 가격', + freePrice: '무료', + currentLabel: '현재:', + addProviderBtn: '제공자 추가', + }, + updates: { + checking: '업데이트 확인 중…', + available: '업데이트 있음', + downloading: '다운로드 중…', + installing: '설치 중…', + restart: '재시작하여 업데이트', + stageGettingReady: '준비 중…', + stageDownloading: '다운로드 중…', + stageAlmostThere: '거의 완료…', + stageFinishingUp: '마무리 중…', + stageRestarting: 'Hermes 재시작 중…', + stageManual: '터미널에서 업데이트', + stageError: '업데이트 일시 중지', + updatingHermes: 'Hermes 업데이트 중…', + lookingForUpdates: '업데이트 확인 중…', + couldntCheck: '업데이트를 확인할 수 없습니다', + updateNotAvailable: '사용 가능한 업데이트 없음', + checkConnection: '연결을 확인하고 다시 시도하세요.', + onLatest: '최신 버전을 실행 중입니다.', + allSet: '모두 준비 완료', + newUpdateAvailable: '새 업데이트 있음', + readyToInstall: '새 버전의 Hermes를 설치할 준비가 되었습니다.', + updateNow: '지금 업데이트', + maybeLater: '나중에', + count => `+ ${count}개 변경사항 추가 포함.`, + count => `+ ${count}개 변경사항 추가 포함.`, + updateFromTerminal: '터미널에서 업데이트', + terminalDesc: '명령줄에서 Hermes를 설치했으므로 업데이트도 터미널에서 실행됩니다. 터미널에 다음을 붙여넣으세요:', + copied: '복사됨', + copy: '복사', + pickupNewVersion: '다음에 Hermes를 실행할 때 새 버전이 적용됩니다.', + done: '완료', + updaterDesc: 'Hermes 업데이터가 자체 창에서 실행되고 완료되면 Hermes를 다시 엽니다.', + closeToApply: '업데이트를 적용하기 위해 Hermes가 종료됩니다.', + updateDidntFinish: '업데이트가 완료되지 않았습니다', + nothingLost: '걱정 마세요 — 아무것도 손실되지 않았습니다. 지금 다시 시도할 수 있습니다.', + notNow: '나중에', + }, + errors: { + generic: '문제가 발생했습니다.', + notFound: '페이지를 찾을 수 없습니다.', + noPermission: '이 페이지에 접근할 권한이 없습니다.', + somethingBroke: '인터페이스에 문제가 발생했습니다', + viewCrashedDesc: '뷰에서 예상치 못한 오류가 발생했습니다. 채팅과 설정은 안전합니다 - 다시 시도하거나 창을 새로고침하세요.', + noProviders: '인증된 제공자가 없습니다.', + }, + tool: { + toolCall: '도구 호출', + result: '결과', + error: '오류', + timeout: '시간 초과', + cancelled: '취소됨', + running: '실행 중', + recovered: '복구됨', + done: '완료', + output: '도구 출력', + searchResults: '검색 결과', + rawResponse: '원시 응답', + stdout: '표준 출력', + stderr: '표준 에러', + copyActivity: '활동 복사', + recoveredAfter: '1회 실패 후 복구됨', + count => `${count}회 실패 후 복구됨`, + oneStepFailed: '1단계 실패', + count => `${count}단계 실패`, + }, + composer: { + startingHermes: 'Hermes 시작 중...', + sendFollowUp: '후속 메시지 보내기', + message: '메시지', + editingQueued: '컴포저에서 대기 중인 턴 편집 중', + attach: '첨부', + files: '파일…', + folder: '폴더…', + images: '이미지…', + pasteImage: '이미지 붙여넣기', + url: 'URL…', + promptSnippets: '프롬프트 스니펫', + promptSnippetsDesc: '컴포저에 넣을 시작 프롬프트를 선택하세요.', + voiceStart: '음성 대화 시작', + queue: '메시지 대기열', + speaking: '말하는 중', + transcribing: '텍스트 변환 중', + muted: '음소거됨', + listening: '듣는 중', + unmuteMic: '마이크 음소거 해제', + muteMic: '마이크 음소거', + stopListening: '듣기 중지하고 보내기', + endVoice: '음성 대화 종료', + end: '종료', + stopDictation: '받아쓰기 중지', + transcribingDictation: '받아쓰기 변환 중', + voiceDictation: '음성 받아쓰기', + addContext: '컨텍스트 추가', + }, + models: { + title: '모델', + search: '모델 검색', + addProvider: '제공자 추가…', + }, + install: { + title: 'Hermes 일회성 설치 필요', + desc: '자동 최초 실행 설치는', + descEnd: '에서 아직 지원되지 않습니다. 터미널을 열고 아래 명령어를 실행한 후 이 앱을 다시 실행하세요. 이후 실행에서는 이 단계를 건너뜁니다.', + installCommand: '설치 명령어', + copyCommand: '명령어 복사', + viewDocs: '설치 문서 보기', + willInstallTo: '설치 경로:', + iRanIt: '실행했습니다 -- 다시 시도', + failed: '설치 실패', + settingUp: 'Hermes Agent 설정 중', + finishingUp: '마무리 중', + failedDesc: '설치 단계 중 하나가 실패했습니다. Windows에서는 다른 Hermes CLI 또는 데스크톱 인스턴스가 실행 중일 때 발생할 수 있습니다. 실행 중인 모든 Hermes 인스턴스를 중지한 후 다시 시도하세요. 자세한 내용은 아래 세부 정보나 데스크톱 로그를 확인하세요.', + setupDesc: '일회성 설정입니다. Hermes 설치 프로그램이 의존성을 다운로드하고 머신을 구성합니다. 이후 실행에서는 이 단계를 건너뜁니다.', + fetchingManifest: '설치 매니페스트 가져오는 중...', + error: '오류', + showOutput: '설치 출력 보기', + hideOutput: '설치 출력 숨기기', + noOutput: '아직 출력이 없습니다.', + cancelInstall: '설치 취소', + cancelling: '취소 중...', + copyOutput: '출력 복사', + copied: '복사됨!', + reloadRetry: '새로고침 후 다시 시도', + saveLogs: '전체 기록 저장 위치:', + stepsComplete: '단계 완료', + nowLabel: '지금', + line: '줄', + lines: '줄', + }, + previewConsole: { + resizeLabel: '미리보기 콘솔 크기 조정', + noMessages: '아직 콘솔 메시지가 없습니다.', + }, + boot: { + ipcUnavailable: '데스크톱 IPC 브릿지를 사용할 수 없습니다.', + backendExited: '시작 중에 Hermes 백그라운드 프로세스가 종료되었습니다.', + backendStoppedTitle: '백엔드 중지됨', + backendStoppedMessage: 'Hermes 백그라운드 프로세스가 종료되었습니다.', + startingConnection: '데스크톱 연결 시작 중', + connectingGateway: '라이브 데스크톱 게이트웨이 연결 중', + loadingConfig: 'Hermes 설정 로딩 중', + loadingSessions: '최근 세션 로딩 중', + desktopBootFailed: '데스크톱 부팅 실패', + couldNotStart: 'Hermes를 시작할 수 없습니다', + recoveryDesc: '백그라운드 게이트웨이가 시작되지 않았습니다. 아래 복구 단계 중 하나를 시도하세요 — 채팅이나 설정이 삭제되지는 않습니다.', + retry: '재시도', + repairInstall: '설치 복구', + useLocalGateway: '로컬 게이트웨이 사용', + openLogs: '로그 열기', + repairHint: '복구는 설치 프로그램을 다시 실행하며 새 머신에서는 몇 분 정도 걸릴 수 있습니다.', + showLogs: '최근 로그 보기', + hideLogs: '최근 로그 숨기기', + }, + urlDialog: { + title: 'URL 첨부', + description: 'Hermes가 페이지를 가져와서 이 턴의 컨텍스트로 포함합니다.', + placeholder: 'https://example.com/post', + hint: '전체 URL을 포함하세요, 예:', + attach: '첨부', + }, + titlebar: { + hideSidebar: '사이드바 숨기기', + showSidebar: '사이드바 보기', + search: '검색', + searchTitle: '세션, 뷰, 작업 검색', + hideRightSidebar: '오른쪽 사이드바 숨기기', + showRightSidebar: '오른쪽 사이드바 보기', + unmuteHaptics: '햅틱 켜기', + muteHaptics: '햅틱 끄기', + openSettings: '설정 열기', + profiles: '프로필', + profilesDesc: '별도의 페르소나, 설정, 스킬, SOUL.md를 위한 고급 Hermes 환경입니다.', + manageProfiles: '프로필 관리', + language: '언어', + languageDesc: '인터페이스의 표시 언어를 선택하세요.', + }, + pagination: { + ariaLabel: '페이지네이션', + prevAria: '이전 페이지로 이동', + prev: '이전', + nextAria: '다음 페이지로 이동', + next: '다음', + }, + bootstrap: { + pending: '대기 중', + running: '설치 중', + done: '완료', + skipped: '건너뜀', + failed: '실패', + }, + sidebar: { + sheetTitle: '사이드바', + sheetDesc: '모바일 사이드바를 표시합니다.', + toggle: '사이드바 전환', + }, + clarify: { + hermesIsAsking: 'Hermes 질문', + loadingQuestion: '질문 로딩 중…', + otherTypeAnswer: '기타 (직접 입력)', + placeholderAnswer: '답변 입력…', + cmdEnterToSend: '⌘/Ctrl + Enter로 보내기', + back: '뒤로', + skip: '건너뛰기', + couldNotSend: '명확화 응답을 보낼 수 없습니다', + n => `1–${n} 선택`, + }, + intro: { + fallback1h: '오늘은 무엇을 진행할까요?', + fallback1b: '버그, 브랜치, 계획 또는 대략적인 아이디어를 보내주세요. 저장소를 검사하고 다음 구체적인 단계로 전환하겠습니다.', + fallback2h: '무슨 생각을 하고 계신가요?', + fallback2b: '코드, 질문 또는 막힌 부분을 가져와 주세요. 변경하기 전에 상황을 파악하겠습니다.', + fallback3h: 'Hermes가 무엇을 살펴볼까요?', + fallback3b: '작업, 실패 경로 또는 미완성 계획을 보내주세요. 실행 가능하게 전환하도록 도와드리겠습니다.', + fallback4h: '어디서부터 시작할까요?', + fallback4b: '문제, 목표 또는 파일을 가져와 주세요. 먼저 검사하고 다음 단계를 구체적으로 유지하겠습니다.', + fallback5h: '어디에 주의가 필요한가요?', + fallback5b: '가지고 계신 컨텍스트를 보내주세요. 계획이나 수정으로 정리해 드리겠습니다.', + personality: { + label => `${label} 모드가 켜져 있습니다. 무엇을 작업할까요?`, + body1: '작업, 파일 또는 대략적인 아이디어를 보내주세요. 설정된 음성을 사용하고 작업을 이 저장소에 기반하여 진행하겠습니다.', + label => `${label} Hermes가 무엇을 봐야 할까요?`, + body2: '컨텍스트나 막힌 부분을 가져와 주세요. 설정된 페르소나에 맞춰 조정하겠습니다.', + label => `${label} 모드 준비 완료.`, + body3: '문제, 파일 또는 아이디어를 보내주세요. 설정된 페르소나를 따르겠습니다.', + label => `${label} Hermes가 무엇을 처리할까요?`, + body4: '작업을 여기에 남겨주세요. 저장소에 기반하여 작업을 진행하겠습니다.', + heading5: '어디서부터 시작할까요?', + label => `컨텍스트를 제공해 주시면 ${label} 모드로 답변하겠습니다.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: '아티팩트를 찾을 수 없습니다', + }, + agents: { + spawnTree: '트리 생성', + liveSubagentActivity: '현재 턴의 라이브 서브에이전트 활동입니다.', + noLiveSubagents: '라이브 서브에이전트 없음', + files: '파일', + label: '에이전트', + open: '에이전트 열기', + close: '에이전트 닫기', + subagent: '서브에이전트', + subagents: '서브에이전트', + failed: '실패', + running: '실행 중', + }, + provider: { + desc: { + nousPortal: 'Nous Portal 기본 URL 오버라이드', + openRouter: 'OpenRouter API 키 (비전, 웹 스크래핑 도우미, MoA용)', + google: 'Google AI Studio API 키 (GEMINI_API_KEY로도 인식됨)', + gemini: '유료 Gemini 등급용 GCP 프로젝트 ID (무료 등급은 자동 프로비저닝)', + anthropic: 'Anthropic API 키', + deepseek: '커스텀 DeepSeek API 기본 URL (고급)', + xai: 'xAI 기본 URL 오버라이드', + huggingface: 'Hugging Face Inference Providers 기본 URL 오버라이드', + kimi: 'Kimi / Moonshot China API 키', + minimax: 'MiniMax (중국) 기본 URL 오버라이드', + minimaxCn: 'MiniMax China API 키', + dashscope: '커스텀 DashScope 기본 URL (기본값: coding-intl OpenAI 호환 엔드포인트)', + glm: 'GLM API 키 (Z.AI)', + nvidia: 'NVIDIA NIM 기본 URL 오버라이드 (예: 로컬 NIM용 http://localhost:8000/v1)', + opencodeGo: 'OpenCode Go API 키', + opencodeZen: 'OpenCode Zen API 키', + xiaomi: 'Xiaomi MiMo 기본 URL 오버라이드 (기본값: https://api.xiaomimimo.com/v1)', + kiloCode: 'Kilo Code API 키', + aiGateway: 'AI Gateway API 키 (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'ElevenLabs API 키', + openai: 'OpenAI API 키 (프록시를 통한 음성 처리용)', + mistral: 'Mistral API 키 (STT/TTS용)', + groq: 'Groq API 키 (STT용)', + tavily: 'TAVILY_API_KEY', + firecrawl: '자체 호스팅 인스턴스용 Firecrawl API URL (선택 사항)', + fal: 'FAL_KEY', + nous: 'Nous Portal 기본 URL 오버라이드', + openrouter: 'OpenRouter API 키 (비전, 웹 스크래핑 도우미, MoA용)', + lmstudio: 'Z.AI / GLM 기본 URL 오버라이드', + zai: 'Azure Foundry 기본 URL (\'hermes model\'을 통해 엔드포인트별 설정)', + stepfun: 'StepFun Step Plan 기본 URL 오버라이드', + arcee: 'Arcee AI 기본 URL 오버라이드', + gmi: 'GMI Cloud 기본 URL 오버라이드', + qwenportal: 'Qwen Portal 기본 URL 오버라이드 (기본값: https://portal.qwen.ai/v1)', + opencodego: 'OpenCode Go 기본 URL 오버라이드', + ollamacloud: 'Ollama Cloud 기본 URL 오버라이드 (기본값: https://ollama.com/v1)', + awsbedrock: 'Bedrock 인증용 AWS 명명된 프로필 (~/.aws/credentials에서)', + exa: 'AI 네이티브 웹 검색 및 콘텐츠용 Exa API 키', + parallel: 'AI 네이티브 웹 검색 및 추출용 Parallel API 키', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/languages.ts b/apps/desktop/src/i18n/languages.ts index 5b4990f49706..4252a4490a45 100644 --- a/apps/desktop/src/i18n/languages.ts +++ b/apps/desktop/src/i18n/languages.ts @@ -26,7 +26,73 @@ export const LOCALE_OPTIONS = [ name: '日本語', englishName: 'Japanese', configValue: 'ja' - } + }, + { + id: 'ko', + name: '한국어', + englishName: 'Korean', + configValue: 'ko' + }, + { + id: 'de', + name: 'Deutsch', + englishName: 'German', + configValue: 'de' + }, + { + id: 'es', + name: 'Español', + englishName: 'Spanish', + configValue: 'es' + }, + { + id: 'fr', + name: 'Français', + englishName: 'French', + configValue: 'fr' + }, + { + id: 'pt-br', + name: 'Português (Brasil)', + englishName: 'Portuguese (Brazil)', + configValue: 'pt-br' + }, + { + id: 'ar', + name: 'العربية', + englishName: 'Arabic', + configValue: 'ar' + }, + { + id: 'hi', + name: 'हिन्दी', + englishName: 'Hindi', + configValue: 'hi' + }, + { + id: 'th', + name: 'ภาษาไทย', + englishName: 'Thai', + configValue: 'th' + }, + { + id: 'vi', + name: 'Tiếng Việt', + englishName: 'Vietnamese', + configValue: 'vi' + }, + { + id: 'it', + name: 'Italiano', + englishName: 'Italian', + configValue: 'it' + }, + { + id: 'ru', + name: 'Русский', + englishName: 'Russian', + configValue: 'ru' + }, ] as const satisfies readonly { configValue: string; englishName: string; id: Locale; name: string }[] // `name` is the endonym (native name) shown in the picker so users recognize @@ -38,31 +104,75 @@ export const LOCALE_META: Record ) as Record const LOCALE_ALIASES: Record = { - en: 'en', + 'ar': 'ar', + 'ar-ae': 'ar', + 'ar-eg': 'ar', + 'ar-sa': 'ar', + 'ar_sa': 'ar', + 'de': 'de', + 'de-at': 'de', + 'de-ch': 'de', + 'de-de': 'de', + 'de_de': 'de', + 'en': 'en', 'en-us': 'en', - en_us: 'en', - zh: 'zh', + 'en_us': 'en', + 'es': 'es', + 'es-ar': 'es', + 'es-es': 'es', + 'es-mx': 'es', + 'es_es': 'es', + 'fr': 'fr', + 'fr-be': 'fr', + 'fr-ca': 'fr', + 'fr-ch': 'fr', + 'fr-fr': 'fr', + 'fr_fr': 'fr', + 'hi': 'hi', + 'hi-in': 'hi', + 'hi_in': 'hi', + 'it': 'it', + 'it-ch': 'it', + 'it-it': 'it', + 'it_it': 'it', + 'ja': 'ja', + 'ja-jp': 'ja', + 'ja_jp': 'ja', + 'ko': 'ko', + 'ko-kr': 'ko', + 'ko_kr': 'ko', + 'pt-br': 'pt-br', + 'pt-pt': 'pt-br', + 'pt_br': 'pt-br', + 'pt_pt': 'pt-br', + 'ru': 'ru', + 'ru-ru': 'ru', + 'ru_ru': 'ru', + 'th': 'th', + 'th-th': 'th', + 'th_th': 'th', + 'vi': 'vi', + 'vi-vn': 'vi', + 'vi_vn': 'vi', + 'zh': 'zh', 'zh-cn': 'zh', - zh_cn: 'zh', 'zh-hans': 'zh', - zh_hans: 'zh', 'zh-hans-cn': 'zh', - zh_hans_cn: 'zh', - 'zh-tw': 'zh-hant', - zh_tw: 'zh-hant', - 'zh-hk': 'zh-hant', - zh_hk: 'zh-hant', - 'zh-mo': 'zh-hant', - zh_mo: 'zh-hant', 'zh-hant': 'zh-hant', - zh_hant: 'zh-hant', - 'zh-hant-tw': 'zh-hant', - zh_hant_tw: 'zh-hant', 'zh-hant-hk': 'zh-hant', - zh_hant_hk: 'zh-hant', - ja: 'ja', - 'ja-jp': 'ja', - ja_jp: 'ja' + 'zh-hant-tw': 'zh-hant', + 'zh-hk': 'zh-hant', + 'zh-mo': 'zh-hant', + 'zh-tw': 'zh-hant', + 'zh_cn': 'zh', + 'zh_hans': 'zh', + 'zh_hans_cn': 'zh', + 'zh_hant': 'zh-hant', + 'zh_hant_hk': 'zh-hant', + 'zh_hant_tw': 'zh-hant', + 'zh_hk': 'zh-hant', + 'zh_mo': 'zh-hant', + 'zh_tw': 'zh-hant', } export function isLocale(value: unknown): value is Locale { diff --git a/apps/desktop/src/i18n/pt-br.ts b/apps/desktop/src/i18n/pt-br.ts new file mode 100644 index 000000000000..6b765e1bc0d4 --- /dev/null +++ b/apps/desktop/src/i18n/pt-br.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const ptbr = defineLocale( +{ + appearance: { + title: 'Aparência', + description: 'Preferências de exibição exclusivas do desktop. O modo controla o brilho; o tema controla a paleta de acentos e o estilo da superfície de chat.', + colorMode: 'Modo de Cor', + colorModeDesc: 'Escolha um modo fixo ou deixe o Hermes seguir a configuração do seu sistema.', + theme: { + nous: 'Nous', + nousDesc: 'Neutros vítreos com acentos azul Nous', + midnight: 'Meia-Noite', + midnightDesc: 'Azul-violeta profundo com acentos frios', + ember: 'Brasa', + emberDesc: 'Carmim e bronze quentes — vibração de forja', + mono: 'Mono', + monoDesc: 'Escala de cinza limpa — minimalista e focada', + cyberpunk: 'Cyberpunk', + cyberpunkDesc: 'Verde neon no preto — terminal matrix', + slate: 'Ardósia', + slateDesc: 'Azul ardósia frio — tema focado para desenvolvedores', + }, + themeDesc: 'Escolha uma paleta de cores para a superfície de chat e os acentos da interface.', + mode: { + light: 'Claro', + lightDesc: 'Superfícies de desktop brilhantes', + dark: 'Escuro', + darkDesc: 'Espaço de trabalho com baixo brilho', + system: 'Sistema', + systemDesc: 'Seguir a aparência do sistema', + }, + language: 'Idioma', + languageDesc: 'Escolha o idioma da interface ou deixe o Hermes seguir a configuração do seu sistema.', + toolCallDisplay: 'Exibição de Chamadas de Ferramenta', + toolCallDisplayDesc: 'Produto oculta payloads brutos de ferramentas; Técnico mostra entrada/saída completa.', + toolViewProduct: 'Produto', + toolViewTechnical: 'Técnico', + toolViewProductDesc: 'Atividade de ferramenta amigável com resumos concisos.', + toolViewTechnicalDesc: 'Incluir argumentos/resultados brutos e detalhes de baixo nível.', + }, + settings: { + title: 'Configurações', + appearance: 'Aparência', + model: 'Modelo', + gateway: 'Gateway', + sessions: 'Sessões', + tools: 'Ferramentas e Skills', + section: { + chat: 'Chat', + workspace: 'Espaço de Trabalho', + safety: 'Segurança', + memory: 'Memória e Contexto', + voice: 'Voz', + advanced: 'Avançado', + }, + mcp: 'Servidores MCP', + config: 'Config', + keys: 'Chaves de API', + about: 'Sobre', + closeSettings: 'Fechar configurações', + archivedChats: 'Chats Arquivados', + exportConfig: 'Exportar config', + importConfig: 'Importar config', + resetDefaults: 'Restaurar padrões', + llmProviders: 'Provedores LLM', + searchPlaceholder: { + about: 'Sobre o Hermes Desktop', + config: 'Pesquisar configurações…', + gateway: 'Conexão gateway…', + keys: 'Pesquisar chaves de API…', + mcp: 'Pesquisar servidores MCP…', + sessions: 'Pesquisar sessões arquivadas…', + }, + }, + chat: { + placeholder: 'Pergunte-me qualquer coisa…', + send: 'Enviar', + stop: 'Parar', + thinking: 'Pensando…', + noSession: 'Nenhuma sessão ativa. Inicie uma nova conversa.', + loadingSession: 'Carregando sessão', + loadingResponse: 'Hermes está carregando uma resposta', + branchInNewChat: 'Ramificar em novo chat', + readAloud: 'Ler em voz alta', + preparingAudio: 'Preparando áudio...', + stopReading: 'Parar leitura', + editMessage: 'Editar mensagem', + editableCheckpoint: 'Ponto de verificação editável', + restoreCheckpoint: 'Restaurar ponto de verificação', + goForward: 'Avançar', + restorePrevCheckpoint: 'Restaurar ponto de verificação anterior', + restoreNextCheckpoint: 'Restaurar próximo ponto de verificação', + composerTip: 'Dica: digite @ para referenciar arquivos inline.', + reconnecting: 'Reconectando ao Hermes…', + }, + commandCenter: { + title: 'Central de Comandos', + noSessions: 'Nenhuma sessão ainda.', + loadingStatus: 'Carregando status…', + recentLogs: 'Registros recentes', + dailyTokens: 'Tokens diários', + noActivity: 'Nenhuma atividade diária.', + noModelUsage: 'Nenhum uso de modelo ainda.', + noSkillActivity: 'Nenhuma atividade de skill ainda.', + sessionsPanel: 'Painel de sessões', + systemPanel: 'Painel do sistema', + usagePanel: 'Painel de uso', + navigate: 'Navegar', + noMatchingResults: 'Nenhum resultado correspondente encontrado.', + noSessionsYet: 'Nenhuma sessão ainda.', + unpinSession: 'Desafixar sessão', + pinSession: 'Fixar sessão', + exportSession: 'Exportar sessão', + deleteSession: 'Excluir sessão', + gatewayRunning: 'Gateway de mensageria em execução', + gatewayStopped: 'Gateway de mensageria parado', + restartMsg: 'Reiniciar mensageria', + updateHermes: 'Atualizar Hermes', + noLogsLoaded: 'Nenhum log carregado ainda.', + closeLabel: 'Fechar central de comandos', + searchPlaceholder: 'Pesquisar sessões, visualizações e ações', + statSessions: 'Sessões', + statApiCalls: 'Chamadas de API', + statTokens: 'Tokens in/out', + statEstCost: 'Custo est.', + cost => `real ${cost}`, + loadingUsage: 'Carregando uso...', + count => `Nenhum uso nos últimos ${count} dias.`, + retry: 'Tentar novamente', + tokenInput: 'entrada', + tokenOutput: 'saída', + noDailyActivity: 'Nenhuma atividade diária.', + topModels: 'Principais modelos', + topSkills: 'Principais skills', + actionsLabel: 'ações', + systemRunning: 'executando', + systemDone: 'concluído', + systemFailed: 'falhou', + open: 'Abrir Central de Comandos', + close: 'Fechar Central de Comandos', + }, + common: { + loading: 'Carregando…', + save: 'Salvar', + cancel: 'Cancelar', + close: 'Fechar', + delete: 'Excluir', + confirm: 'Confirmar', + search: 'Pesquisar…', + clearSearch: 'Limpar pesquisa', + copy: 'Copiar', + refresh: 'Atualizar', + moreActions: 'Mais ações', + tryAgain: 'Tentar novamente', + }, + onboarding: { + welcome: 'Bem-vindo ao Hermes', + getStarted: 'Comece escolhendo um provedor e modelo.', + skip: 'Pular', + continue: 'Continuar', + finish: 'Concluir', + setupTitle: 'Vamos configurar seu Hermes Agent', + setupDesc: 'Conecte um provedor de modelo para começar a conversar. A maioria das opções leva um clique.', + preparing: 'Iniciando Hermes…', + installing: 'Hermes está finalizando a instalação. Isso geralmente leva menos de um minuto na primeira execução.', + lookingUp: 'Procurando provedores...', + otherProviders: 'Outros provedores', + collapse: 'Recolher', + iHaveKey: 'Tenho uma chave de API', + recommended: 'Recomendado', + connected: 'Conectado', + backToSignIn: 'Voltar ao login', + getKey: 'Obter uma chave', + pasteKey: 'Colar chave de API', + connect: 'Conectar', + connecting: 'Conectando', + copyCode: 'Copiar', + startSignIn: 'Iniciando login para', + verifyingCode: 'Verificando seu código com', + pickingModel: 'conectado. Escolhendo um modelo padrão...', + signInFailed: 'Falha no login. Tente novamente.', + pickDifferent: 'Escolher um provedor diferente', + signInTitle: 'Entrar com', + step1: 'Abrimos', + step1End: 'em seu navegador.', + step2: 'Autorize o Hermes lá.', + step3: 'Copie o código de autorização e cole abaixo.', + pasteCode: 'Colar código de autorização', + reopenAuth: 'Reabrir página de autorização', + cancel: 'Cancelar', + browserDesc: 'Abrimos', + browserDescEnd: 'em seu navegador. Autorize o Hermes lá e você será conectado automaticamente — nada para copiar ou colar.', + waitingAuth: 'Aguardando sua autorização...', + reopenSignIn: 'Reabrir página de login', + externalDesc: 'faz login através de seu próprio CLI. Execute este comando em um terminal, depois volte e escolha "Entrei":', + iSignedIn: 'Entrei', + enterCode: 'Abrimos', + enterCodeEnd: 'em seu navegador. Insira este código lá:', + reopenVerification: 'Reabrir página de verificação', + defaultModel: 'Modelo padrão', + freeTier: 'Gratuito', + pro: 'Pro', + change: 'Alterar', + startChatting: 'Começar a conversar', + docs: 'docs', + close: 'Fechar', + savingError: 'Não foi possível salvar a credencial.', + openRouter: 'OpenRouter', + }, + file: { + browser: 'Navegador de Arquivos', + noFiles: 'Nenhum arquivo ainda.', + }, + terminal: { + title: 'Terminal', + newTab: 'Nova Guia', + closeTab: 'Fechar Guia', + }, + skills: { + title: 'Skills', + search: 'Pesquisar skills…', + noResults: 'Nenhuma skill encontrada.', + tools: 'Skills e Ferramentas', + }, + profiles: { + title: 'Perfis', + noProfilesYet: 'Nenhum perfil ainda.', + selectProfile: 'Selecione um perfil para ver seus detalhes.', + deleteProfile: 'Excluir perfil?', + soulMd: 'SOUL.md', + unsavedChanges: 'Alterações não salvas', + newProfile: 'Novo perfil', + cloneFromDefault: 'Clonar do padrão', + renameProfile: 'Renomear perfil', + }, + cron: { + title: 'Tarefas Agendadas', + noJobs: 'Nenhuma tarefa agendada.', + deleteCronJob: 'Excluir tarefa agendada?', + optional: 'Opcional', + label: 'Cron', + open: 'Abrir tarefas agendadas', + }, + messaging: { + title: 'Mensageria', + recommended: 'Recomendado', + recommendedTelegram: 'Recomendado. IDs numéricos separados por vírgula do @userinfobot. Sem isso, qualquer um pode enviar DM para seu bot.', + recommendedDiscord: 'Recomendado. IDs de usuário Discord separados por vírgula.', + recommendedSlack: 'Recomendado. IDs de usuário Slack separados por vírgula.', + recommendedMattermost: 'Recomendado. IDs de usuário Mattermost separados por vírgula.', + recommendedMatrix: 'Recomendado. IDs de usuário no formato @usuario:servidor separados por vírgula.', + recommendedSignal: 'Recomendado. Identificadores Signal separados por vírgula.', + recommendedWhatsApp: 'Recomendado. Números de telefone ou IDs WhatsApp separados por vírgula.', + gatewayStopped: 'Gateway de mensageria parado', + getCredentials: 'Obter suas credenciais', + required: 'Obrigatório', + unsavedChanges: 'Alterações não salvas', + saved: 'Salvo', + }, + about: { + version: 'Versão', + checkUpdates: 'Verificar Atualizações', + upToDate: 'O Hermes está atualizado.', + updateAvailable: 'Uma atualização está disponível.', + license: 'Licença MIT', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'Versão indisponível', + updates: 'Atualizações', + checkNow: 'Verificar agora', + checking: 'Verificando…', + seeWhatsNew: 'Veja as novidades', + releaseNotes: 'Notas de versão', + autoUpdates: 'Atualizações automáticas', + autoUpdatesDesc: 'O Hermes verifica automaticamente por atualizações em segundo plano e avisa quando uma está pronta.', + selfUpdateUnsupported: 'Esta compilação não pode se atualizar de dentro do aplicativo.', + cannotReachServer: 'Não foi possível alcançar o servidor de atualizações.', + installingUpdate: 'Uma atualização está sendo instalada.', + count => `Uma nova atualização está pronta (${count} alteração incluída).`, + count => `Uma nova atualização está pronta (${count} alterações incluídas).`, + onLatest: 'Você está na versão mais recente.', + tapCheckNow: 'Toque em "Verificar agora" para procurar atualizações.', + time => `Última verificação ${time}`, + justNow: 'agora mesmo', + never: 'nunca', + count => `${count} min atrás`, + count => `${count} horas atrás`, + count => `${count} dias atrás`, + (branch, sha) => `Branch ${branch} · Commit ${sha}`, + }, + keys: { + title: 'Chaves de API', + noKeys: 'Nenhuma chave de API configurada.', + addKey: 'Adicionar Chave', + loading: 'Carregando chaves de API e credenciais…', + docs: 'Docs', + openDocs: 'Abrir documentação do provedor', + hideValue: 'Ocultar valor', + revealValue: 'Revelar valor', + set: 'Definir', + notSet: 'Não definido', + replace: 'Substituir', + replaceValue: 'Substituir valor atual', + enterValue: 'Inserir valor', + saving: 'Salvando', + save: 'Salvar', + cancel: 'Cancelar', + clearValue: 'Limpar valor', + (count, total) => `${count} de ${total} configurados`, + (count, total) => `${count} de ${total} definidos`, + count => `${count} definidos`, + count => `${count} chaves`, + otherProviders: 'Outros provedores', + categoryTools: 'Ferramentas', + categoryMessaging: 'Mensageria', + categorySettings: 'Configurações', + openProviderDocs: 'Abrir documentação do provedor', + showAdvanced: 'Mostrar avançado', + loadFailed: 'Falha ao carregar chaves de API', + credentialSaved: 'Credencial salva', + credentialRemoved: 'Credencial removida', + }, + config: { + title: 'Configuração', + edit: 'Editar Config', + reload: 'Recarregar Config', + notSet: 'Não definido', + commaSeparated: 'valores separados por vírgula', + on: 'Ligado', + off: 'Desligado', + none: 'Nenhum', + emptyOption: '(nenhum)', + loading: 'Carregando configuração do Hermes…', + noMatching: 'Nenhuma configuração correspondente', + noMatchingDesc: 'Tente um termo de pesquisa diferente ou escolha outra seção.', + count => `${count} resultado`, + count => `${count} resultados`, + saving: 'Salvando…', + label: { + defaultModel: 'Modelo Padrão', + contextWindow: 'Janela de Contexto', + fallbackModels: 'Modelos de Reserva', + enabledToolsets: 'Conjuntos de Ferramentas Ativados', + timezone: 'Fuso Horário', + personality: 'Personalidade', + reasoningBlocks: 'Blocos de Raciocínio', + maxAgentSteps: 'Máx. de Passos do Agente', + imageAttachments: 'Anexos de Imagem', + workingDirectory: 'Diretório de Trabalho', + executionBackend: 'Backend de Execução', + commandTimeout: 'Timeout de Comando', + persistentShell: 'Shell Persistente', + envPassthrough: 'Passagem de Variáveis de Ambiente', + fileReadLimit: 'Limite de Leitura de Arquivos', + terminalOutputLimit: 'Limite de Saída do Terminal', + filePageLimit: 'Limite de Páginas de Arquivo', + lineLengthLimit: 'Limite de Comprimento de Linha', + codeExecutionMode: 'Modo de Execução de Código', + approvalMode: 'Modo de Aprovação', + approvalTimeout: 'Timeout de Aprovação', + confirmMcpReloads: 'Confirmar Recarregamentos MCP', + commandAllowlist: 'Lista de Permissões de Comandos', + redactSecrets: 'Ocultar Segredos', + allowPrivateUrls: 'Permitir URLs Privadas', + browserPrivateUrls: 'URLs Privadas do Navegador', + localBrowserForPrivateUrls: 'Navegador Local para URLs Privadas', + fileCheckpoints: 'Pontos de Verificação de Arquivos', + checkpointLimit: 'Limite de Pontos de Verificação', + voiceShortcut: 'Atalho de Voz', + maxRecordingLength: 'Duração Máx. de Gravação', + readResponsesAloud: 'Ler Respostas em Voz Alta', + speechToText: 'Fala para Texto', + speechToTextProvider: 'Provedor de Fala para Texto', + localTranscriptionModel: 'Modelo de Transcrição Local', + transcriptionLanguage: 'Idioma de Transcrição', + elevenlabsSttModel: 'Modelo STT ElevenLabs', + elevenlabsLanguage: 'Idioma ElevenLabs', + tagAudioEvents: 'Marcar Eventos de Áudio', + speakerDiarization: 'Diarização de Locutor', + textToSpeechProvider: 'Provedor de Texto para Fala', + edgeVoice: 'Voz Edge', + openaiTtsModel: 'Modelo TTS OpenAI', + openaiVoice: 'Voz OpenAI', + elevenlabsVoice: 'Voz ElevenLabs', + elevenlabsModel: 'Modelo ElevenLabs', + persistentMemory: 'Memória Persistente', + userProfile: 'Perfil de Usuário', + memoryBudget: 'Orçamento de Memória', + profileBudget: 'Orçamento de Perfil', + memoryProvider: 'Provedor de Memória', + contextEngine: 'Mecanismo de Contexto', + autoCompression: 'Compressão Automática', + compressionThreshold: 'Limiar de Compressão', + compressionTarget: 'Alvo de Compressão', + protectedRecentMessages: 'Mensagens Recentes Protegidas', + apiRetries: 'Tentativas de API', + serviceTier: 'Nível de Serviço', + toolUseEnforcement: 'Imposição de Uso de Ferramentas', + subagentModel: 'Modelo do Subagente', + subagentProvider: 'Provedor do Subagente', + subagentTurnLimit: 'Limite de Turnos do Subagente', + parallelSubagents: 'Subagentes Paralelos', + subagentTimeout: 'Timeout do Subagente', + subagentReasoningEffort: 'Esforço de Raciocínio do Subagente', + }, + desc: { + defaultModel: 'Usado para novos chats a menos que você escolha um modelo diferente no composer.', + contextWindow: 'Deixe em 0 para usar a janela de contexto detectada do modelo selecionado.', + fallbackModels: 'Entradas provedor:modelo de reserva para tentar se o modelo padrão falhar.', + personality: 'Estilo de assistente padrão para novas sessões.', + timezone: 'Usado quando Hermes precisa de contexto de hora local. Vazio usa o fuso horário do sistema.', + reasoningBlocks: 'Mostrar seções de raciocínio quando o backend as fornece.', + imageAttachments: 'Controla como anexos de imagem são enviados ao modelo.', + workingDirectory: 'Pasta de projeto padrão para trabalho com ferramentas e terminal.', + codeExecutionMode: 'Quão estritamente a execução de código é limitada ao projeto atual.', + persistentShell: 'Manter estado do shell entre comandos quando o backend suporta.', + envPassthrough: 'Variáveis de ambiente para passar para a execução de ferramentas.', + fileReadLimit: 'Máximo de caracteres que Hermes pode ler de uma solicitação de arquivo.', + approvalMode: 'Como Hermes lida com comandos que precisam de aprovação explícita.', + approvalTimeout: 'Quanto tempo os prompts de aprovação esperam antes de expirar.', + redactSecrets: 'Ocultar segredos detectados do conteúdo visível ao modelo quando possível.', + fileCheckpoints: 'Criar snapshots de reversão antes de edições de arquivos.', + persistentMemory: 'Salvar memórias duráveis que podem ajudar sessões futuras.', + userProfile: 'Manter um perfil compacto de preferências do usuário.', + contextEngine: 'Estratégia para gerenciar conversas longas perto do limite de contexto.', + autoCompression: 'Resumir contexto mais antigo quando as conversas ficam grandes.', + readResponsesAloud: 'Falar respostas do assistente automaticamente.', + speechToText: 'Habilitar transcrição de fala local ou baseada em provedor.', + elevenlabsLanguage: 'Código de idioma ISO-639-3 opcional. Vazio deixa o ElevenLabs detectar automaticamente.', + maxAgentSteps: 'Limite superior para turnos de chamada de ferramentas antes do Hermes parar uma execução.', + }, + }, + gateway: { + title: 'Gateway', + start: 'Iniciar Gateway', + stop: 'Parar Gateway', + restart: 'Reiniciar Gateway', + running: 'Executando', + stopped: 'Parado', + loading: 'Carregando configurações do gateway…', + unavailable: 'Configurações do gateway indisponíveis', + unavailableDesc: 'A bridge IPC do desktop não expõe configurações do gateway.', + connection: 'Conexão Gateway', + envOverride: 'substituído por env', + desc: 'O Hermes Desktop inicia seu próprio gateway local por padrão. Use um gateway remoto quando quiser que este aplicativo controle um backend Hermes já em execução em outra máquina ou atrás de um proxy confiável.', + envOverrideTitle: 'Variáveis de ambiente estão controlando esta sessão desktop.', + (urlVar, tokenVar) => `Remova ${urlVar} e ${tokenVar} para usar a configuração salva abaixo.`, + localTitle: 'Gateway local', + localDesc: 'Iniciar um backend Hermes privado no localhost. Este é o padrão e funciona offline.', + remoteTitle: 'Gateway remoto', + remoteDesc: 'Conectar este shell desktop a um backend Hermes remoto usando seu token de sessão.', + remoteUrl: 'URL Remota', + remoteUrlDesc: 'URL base para o backend do dashboard remoto. Prefixos de caminho são suportados, por exemplo /hermes.', + remoteUrlPlaceholder: 'https://gateway.exemplo.com/hermes', + sessionToken: 'Token de sessão', + sessionTokenDesc: 'O token de sessão do dashboard usado para acesso REST e WebSocket. Deixe em branco para manter o token salvo.', + sessionTokenPlaceholder: 'Cole o token de sessão', + preview => `Token existente ${preview}`, + tokenSaved: 'salvo', + testRemote: 'Testar remoto', + saveRestart: 'Salvar para próxima reinicialização', + saveReconnect: 'Salvar e reconectar', + diagnostics: 'Diagnósticos', + diagnosticsDesc: 'Revelar desktop.log no gerenciador de arquivos — útil quando o gateway falha ao iniciar.', + openLogs: 'Abrir logs', + connected: 'Conectado', + connecting: 'Conectando', + disconnected: 'Desconectado', + inferenceReady: 'Inferência pronta', + inferenceNotReady: 'Inferência não pronta', + checkingInference: 'Verificando inferência', + openSystemPanel: 'Abrir painel do sistema', + connectionLabel: 'Conexão:', + recentActivity: 'Atividade recente', + viewAllLogs: 'Ver todos os logs →', + messagingPlatforms: 'Plataformas de mensageria', + label: 'Gateway', + inferenceStatus: 'Status de inferência do gateway', + enterUrlFirst: 'Insira uma URL remota e token de sessão antes de trocar', + enterUrlFirstTest: 'Insira uma URL remota e token de sessão antes de testar', + }, + sessions: { + title: 'Sessões', + search: 'Pesquisar sessões…', + noResults: 'Nenhuma sessão encontrada.', + export: 'Exportar', + delete: 'Excluir Sessão', + loading: 'Carregando…', + defaultProjectDir: 'Diretório de projeto padrão', + defaultProjectDirDesc: 'Novas sessões iniciam nesta pasta a menos que você escolha outra. Deixe vazio para usar seu diretório home.', + fallback => `Padrão para ${fallback}.`, + notSet: 'Não definido', + change: 'Alterar', + choose: 'Escolher', + clear: 'Limpar', + archivedTitle: 'Sessões arquivadas', + archivedDesc: 'Chats arquivados ficam ocultos da barra lateral, mas mantêm todas as mensagens. Ctrl/⌘-clique em um chat na barra lateral para arquivá-lo.', + nothingArchived: 'Nada arquivado', + noSearchMatch: 'Nenhum chat arquivado corresponde à sua pesquisa.', + archiveToHide: 'Arquive um chat para ocultá-lo aqui.', + unarchive: 'Desarquivar', + deletePermanently: 'Excluir permanentemente', + count => `${count} mensagens`, + new: 'Nova sessão', + running: 'Sessão em execução', + actions: 'Ações da sessão', + reorder: 'Reordenar', + pin: 'Fixar', + unpin: 'Desafixar', + copyId: 'Copiar ID', + rename: 'Renomear', + archive: 'Arquivar', + renameDialog: 'Renomear sessão', + renameDesc: 'Dê a este chat um título memorável. Deixe vazio para limpar.', + untitled: 'Sessão sem título', + renamed: 'Renomeado', + renameFailed: 'Falha ao renomear', + pinned: 'Fixado', + results: 'Resultados', + allPinned: 'Tudo aqui está fixado. Desafixe um chat para mostrá-lo nos recentes.', + pinHint: 'Shift+clique em um chat para fixar · arraste para reordenar', + loadMore: 'Carregar mais', + noWorkspace: 'Sem espaço de trabalho', + ungroup: 'Mostrar sessões como uma única lista', + groupByWorkspace: 'Agrupar sessões por espaço de trabalho', + loadStep: 'Carregar', + moreLabel: 'mais', + nothingArchivedTitle: 'Nada arquivado', + deletePermanentlyTitle: 'Excluir permanentemente', + defaultProjectDirTitle: 'Diretório de projeto padrão', + loadingArchived: 'Carregando sessões arquivadas…', + restored: 'Restaurado', + projectDirUpdated: 'Diretório de projeto padrão atualizado', + loadFailed: 'Não foi possível carregar sessões arquivadas', + unarchiveFailed: 'Falha ao desarquivar', + deleteFailed: 'Falha ao excluir', + archiveHint: 'Arquive um chat para ocultá-lo aqui.', + updateDirFailed: 'Não foi possível atualizar o diretório padrão', + clearDirFailed: 'Não foi possível limpar o diretório padrão', + }, + mcp: { + title: 'Servidores MCP', + addServer: 'Adicionar Servidor', + noServers: 'Nenhum servidor MCP configurado.', + loading: 'Carregando servidores MCP…', + servers: 'Servidores MCP', + count => `${count} configurados`, + newServer: 'Novo servidor', + reloadMCP: 'Recarregar MCP', + reloading: 'Recarregando...', + noServersDesc: 'Adicione um servidor stdio ou HTTP para expor ferramentas MCP.', + name: 'Nome', + namePlaceholder: 'filesystem', + serverJSON: 'JSON do Servidor', + editServer: 'Editar servidor', + saveServer: 'Salvar servidor', + saving: 'Salvando...', + remove: 'Remover', + disabled: 'desativado', + nameRequired: 'Nome obrigatório', + nameRequiredDesc: 'Dê a este servidor MCP uma chave de configuração.', + invalidJson: 'A configuração do servidor deve ser um objeto JSON', + invalidJsonDesc: 'JSON MCP inválido', + saved: 'Servidor MCP salvo', + name => `${name} é aplicado após recarregar MCP.`, + saveFailed: 'Falha ao salvar', + removeFailed: 'Falha ao remover', + gatewayUnavailable: 'Gateway indisponível', + gatewayUnavailableDesc: 'Reconecte o gateway antes de recarregar MCP.', + reloadedTitle: 'Ferramentas MCP recarregadas', + reloadedDesc: 'Novos schemas de ferramentas se aplicam a novos turnos.', + reloadFailed: 'Falha ao recarregar MCP', + giveConfigKey: 'Dê a este servidor MCP uma chave de configuração.', + reconnectGateway: 'Reconecte o gateway antes de recarregar MCP.', + newSchemas: 'Novos schemas de ferramentas se aplicam a novos turnos.', + loadingServers: 'Carregando servidores MCP...', + serverName: 'Nome', + serversTitle: 'Servidores MCP', + noServersTitle: 'Nenhum servidor MCP', + failedToLoad: 'Falha ao carregar configuração MCP', + invalidJsonShort: 'JSON MCP inválido', + serverSaved: 'Servidor MCP salvo', + toolsReloaded: 'Ferramentas MCP recarregadas', + emptyDesc: 'Adicione um servidor stdio ou HTTP para expor ferramentas MCP.', + }, + tools: { + title: 'Ferramentas e Skills', + noTools: 'Nenhuma ferramenta disponível.', + }, + nav: { + home: 'Início', + chat: 'Chat', + settings: 'Configurações', + files: 'Arquivos', + terminal: 'Terminal', + }, + header: { + search: 'Pesquise ou digite um comando…', + }, + model: { + auxTask: { + vision: 'Visão', + visionHint: 'Análise de imagem', + web_extract: 'Extração web', + web_extractHint: 'Resumo de página', + compression: 'Compressão', + compressionHint: 'Compactação de contexto', + session_search: 'Pesquisa de sessão', + session_searchHint: 'Consultas de recall', + skills_hub: 'Central de skills', + skills_hubHint: 'Pesquisa de skills', + approval: 'Aprovação', + approvalHint: 'Aprovação automática inteligente', + mcp: 'MCP', + mcpHint: 'Roteamento de ferramentas MCP', + title_generation: 'Geração de título', + title_generationHint: 'Títulos de sessão', + curator: 'Curador', + curatorHint: 'Revisão de uso de skills', + }, + mainModel: 'Modelo principal', + mainDesc: 'Aplica-se a novas sessões. Use o seletor de modelo no composer para trocar o chat ativo.', + providerPlaceholder: 'Provedor', + modelPlaceholder: 'Modelo', + apply: 'Aplicar', + applying: 'Aplicando…', + auxiliaryModels: 'Modelos auxiliares', + auxiliaryDesc: 'Tarefas auxiliares usam o modelo principal por padrão. Atribua um modelo dedicado a qualquer tarefa para substituir.', + resetAllToMain: 'Redefinir todos para principal', + setToMain: 'Definir como principal', + change: 'Alterar', + cancel: 'Cancelar', + autoUseMain: 'auto · usar modelo principal', + providerDefault: '(padrão do provedor)', + loading: 'Carregando configuração do modelo…', + options: 'Opções', + thinking: 'Pensamento', + fast: 'Rápido', + effort: 'Esforço', + noOptions: 'Nenhuma opção para este modelo', + optionUpdateFailed: 'Falha ao atualizar opção do modelo', + fastModeUpdateFailed: 'Falha ao atualizar modo rápido', + effortMinimal: 'Mínimo', + effortLow: 'Baixo', + effortMedium: 'Médio', + effortHigh: 'Alto', + effortMax: 'Máximo', + switch: 'Trocar modelo', + unknown: '(desconhecido)', + filterPlaceholder: 'Filtrar provedores e modelos...', + persistGlobal: 'Persistir globalmente', + persistGlobalSession: 'Persistir globalmente (caso contrário apenas nesta sessão)', + couldNotLoad: 'Não foi possível carregar modelos', + proLockedDesc: 'Modelos Pro precisam de uma assinatura Nous paga.', + priceTooltip: 'Preço de entrada/saída por milhão de tokens', + freePrice: 'Grátis', + currentLabel: 'atual:', + addProviderBtn: 'Adicionar provedor', + }, + updates: { + checking: 'Verificando atualizações…', + available: 'Atualização disponível', + downloading: 'Baixando…', + installing: 'Instalando…', + restart: 'Reiniciar para atualizar', + stageGettingReady: 'Preparando…', + stageDownloading: 'Baixando…', + stageAlmostThere: 'Quase lá…', + stageFinishingUp: 'Finalizando…', + stageRestarting: 'Reiniciando Hermes…', + stageManual: 'Atualizar pelo terminal', + stageError: 'Atualização pausada', + updatingHermes: 'Atualizando Hermes…', + lookingForUpdates: 'Procurando atualizações…', + couldntCheck: 'Não foi possível verificar atualizações', + updateNotAvailable: 'Atualização não disponível', + checkConnection: 'Verifique sua conexão e tente novamente.', + onLatest: 'Você está executando a versão mais recente.', + allSet: 'Tudo pronto', + newUpdateAvailable: 'Nova atualização disponível', + readyToInstall: 'Uma nova versão do Hermes está pronta para instalar.', + updateNow: 'Atualizar agora', + maybeLater: 'Talvez depois', + count => `+ ${count} alteração adicional incluída.`, + count => `+ ${count} alterações adicionais incluídas.`, + updateFromTerminal: 'Atualizar pelo terminal', + terminalDesc: 'Você instalou o Hermes pela linha de comando, então as atualizações também funcionam lá. Cole isto no seu terminal:', + copied: 'Copiado', + copy: 'Copiar', + pickupNewVersion: 'O Hermes usará a nova versão na próxima vez que você o iniciar.', + done: 'Concluído', + updaterDesc: 'O atualizador do Hermes assumirá em sua própria janela e reabrirá o Hermes quando terminar.', + closeToApply: 'O Hermes fechará para aplicar a atualização.', + updateDidntFinish: 'A atualização não foi concluída', + nothingLost: 'Sem problemas — nada foi perdido. Você pode tentar novamente agora.', + notNow: 'Agora não', + }, + errors: { + generic: 'Algo deu errado.', + notFound: 'Página não encontrada.', + noPermission: 'Você não tem permissão para acessar isto.', + somethingBroke: 'Algo quebrou na interface', + viewCrashedDesc: 'A visão encontrou um erro inesperado. Seus chats e configurações estão seguros - tente novamente ou recarregue a janela.', + noProviders: 'Nenhum provedor autenticado.', + }, + tool: { + toolCall: 'Chamada de Ferramenta', + result: 'Resultado', + error: 'Erro', + timeout: 'Tempo esgotado', + cancelled: 'Cancelado', + running: 'Executando', + recovered: 'Recuperado', + done: 'Concluído', + output: 'Saída da ferramenta', + searchResults: 'Resultados da pesquisa', + rawResponse: 'Resposta bruta', + stdout: 'stdout', + stderr: 'stderr', + copyActivity: 'Copiar atividade', + recoveredAfter: 'Recuperado após 1 etapa falha', + count => `Recuperado após ${count} etapas falhas`, + oneStepFailed: '1 etapa falhou', + count => `${count} etapas falharam`, + }, + composer: { + startingHermes: 'Iniciando Hermes...', + sendFollowUp: 'Enviar continuação', + message: 'Mensagem', + editingQueued: 'Editando turno na fila no composer', + attach: 'Anexar', + files: 'Arquivos…', + folder: 'Pasta…', + images: 'Imagens…', + pasteImage: 'Colar imagem', + url: 'URL…', + promptSnippets: 'Trechos de prompt', + promptSnippetsDesc: 'Escolha um prompt inicial para inserir no composer.', + voiceStart: 'Iniciar conversa por voz', + queue: 'Enfileirar mensagem', + speaking: 'Falando', + transcribing: 'Transcrevendo', + muted: 'Silenciado', + listening: 'Ouvindo', + unmuteMic: 'Ativar microfone', + muteMic: 'Silenciar microfone', + stopListening: 'Parar de ouvir e enviar', + endVoice: 'Encerrar conversa por voz', + end: 'Encerrar', + stopDictation: 'Parar ditado', + transcribingDictation: 'Transcrevendo ditado', + voiceDictation: 'Ditado por voz', + addContext: 'Adicionar contexto', + }, + models: { + title: 'Modelos', + search: 'Pesquisar modelos', + addProvider: 'Adicionar provedor…', + }, + install: { + title: 'Hermes precisa de uma instalação única', + desc: 'Instalação automatizada na primeira execução não está disponível no', + descEnd: 'ainda. Abra o Terminal e execute o comando abaixo, depois reabra este aplicativo. Inicializações subsequentes pularão esta etapa.', + installCommand: 'Comando de instalação', + copyCommand: 'Copiar comando', + viewDocs: 'Ver docs de instalação', + willInstallTo: 'Será instalado em', + iRanIt: 'Eu executei — tentar novamente', + failed: 'Falha na instalação', + settingUp: 'Configurando Hermes Agent', + finishingUp: 'Finalizando', + failedDesc: 'Uma das etapas de instalação falhou. No Windows, isso pode acontecer se outra instância do Hermes CLI ou desktop estiver em execução. Pare qualquer instância do Hermes em execução e tente novamente. Verifique os detalhes abaixo ou o log do desktop para o transcript completo.', + setupDesc: 'Esta é uma configuração única. O instalador do Hermes está baixando dependências e configurando sua máquina. Inicializações subsequentes pularão esta etapa.', + fetchingManifest: 'Buscando manifesto do instalador...', + error: 'Erro', + showOutput: 'Mostrar saída do instalador', + hideOutput: 'Ocultar saída do instalador', + noOutput: 'Nenhuma saída ainda.', + cancelInstall: 'Cancelar instalação', + cancelling: 'Cancelando...', + copyOutput: 'Copiar saída', + copied: 'Copiado!', + reloadRetry: 'Recarregar e tentar novamente', + saveLogs: 'Transcript completo salvo em', + stepsComplete: 'etapas concluídas', + nowLabel: 'agora', + line: 'linha', + lines: 'linhas', + }, + previewConsole: { + resizeLabel: 'Redimensionar console de pré-visualização', + noMessages: 'Nenhuma mensagem no console ainda.', + }, + boot: { + ipcUnavailable: 'Bridge IPC do Desktop indisponível.', + backendExited: 'O processo em segundo plano do Hermes saiu durante a inicialização.', + backendStoppedTitle: 'Backend parado', + backendStoppedMessage: 'O processo em segundo plano do Hermes saiu.', + startingConnection: 'Iniciando conexão desktop', + connectingGateway: 'Conectando gateway desktop ativo', + loadingConfig: 'Carregando configurações do Hermes', + loadingSessions: 'Carregando sessões recentes', + desktopBootFailed: 'Falha na inicialização do desktop', + couldNotStart: 'Hermes não pôde iniciar', + recoveryDesc: 'O gateway em segundo plano não subiu. Tente uma das etapas de recuperação abaixo — nada aqui exclui seus chats ou configurações.', + retry: 'Tentar novamente', + repairInstall: 'Reparar instalação', + useLocalGateway: 'Usar gateway local', + openLogs: 'Abrir logs', + repairHint: 'Reparar executa o instalador novamente e pode levar alguns minutos em uma máquina nova.', + showLogs: 'Mostrar logs recentes', + hideLogs: 'Ocultar logs recentes', + }, + urlDialog: { + title: 'Anexar uma URL', + description: 'Hermes buscará a página e a incluirá como contexto para este turno.', + placeholder: 'https://exemplo.com/post', + hint: 'Inclua a URL completa, ex.', + attach: 'Anexar', + }, + titlebar: { + hideSidebar: 'Ocultar barra lateral', + showSidebar: 'Mostrar barra lateral', + search: 'Pesquisar', + searchTitle: 'Pesquisar sessões, visualizações e ações', + hideRightSidebar: 'Ocultar barra lateral direita', + showRightSidebar: 'Mostrar barra lateral direita', + unmuteHaptics: 'Ativar resposta tátil', + muteHaptics: 'Desativar resposta tátil', + openSettings: 'Abrir configurações', + profiles: 'Perfis', + profilesDesc: 'Ambientes Hermes avançados para personas, config, skills e SOUL.md separados.', + manageProfiles: 'Gerenciar perfis', + language: 'Idioma', + languageDesc: 'Escolha um idioma de exibição para a interface.', + }, + pagination: { + ariaLabel: 'paginação', + prevAria: 'Ir para página anterior', + prev: 'Anterior', + nextAria: 'Ir para próxima página', + next: 'Próximo', + }, + bootstrap: { + pending: 'Pendente', + running: 'Instalando', + done: 'Concluído', + skipped: 'Pulado', + failed: 'Falhou', + }, + sidebar: { + sheetTitle: 'Barra lateral', + sheetDesc: 'Exibe a barra lateral móvel.', + toggle: 'Alternar Barra Lateral', + }, + clarify: { + hermesIsAsking: 'Hermes está perguntando', + loadingQuestion: 'Carregando pergunta…', + otherTypeAnswer: 'Outro (digite sua resposta)', + placeholderAnswer: 'Digite sua resposta…', + cmdEnterToSend: '⌘/Ctrl + Enter para enviar', + back: 'Voltar', + skip: 'Pular', + couldNotSend: 'Não foi possível enviar resposta de esclarecimento', + n => `1–${n} para escolher`, + }, + intro: { + fallback1h: 'O que vamos mover hoje?', + fallback1b: 'Envie um bug, branch, plano ou ideia. Vou inspecionar o repositório e transformar no próximo passo concreto.', + fallback2h: 'O que está na sua mente?', + fallback2b: 'Traga o código, a pergunta ou a parte travada. Vou ler o cenário antes de fazer alterações.', + fallback3h: 'O que o Hermes deve analisar?', + fallback3b: 'Envie a tarefa, caminho com falha ou plano incompleto. Vou ajudar a transformar em ação.', + fallback4h: 'Por onde devemos começar?', + fallback4b: 'Traga o problema, objetivo ou arquivo. Vou inspecionar primeiro e manter o próximo passo concreto.', + fallback5h: 'O que precisa de atenção?', + fallback5b: 'Envie o contexto que você tem. Vou ajudar a organizar em um plano ou correção.', + personality: { + label => `Modo ${label} está ativo. No que devemos trabalhar?`, + body1: 'Envie a tarefa, arquivo ou ideia. Usarei sua voz configurada e manterei o trabalho fundamentado neste repositório.', + label => `O que o Hermes ${label} precisa ver?`, + body2: 'Traga o contexto ou a parte travada. Vou me adaptar à personalidade configurada.', + label => `Modo ${label} está pronto.`, + body3: 'Envie o problema, arquivo ou ideia. Seguirei a personalidade que você configurou.', + label => `O que o Hermes ${label} deve enfrentar?`, + body4: 'Lance a tarefa aqui. Manterei o trabalho fundamentado no repositório.', + heading5: 'Por onde começamos?', + label => `Me dê o contexto e responderei no modo ${label}.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'Nenhum artefato encontrado', + }, + agents: { + spawnTree: 'Árvore de spawn', + liveSubagentActivity: 'Atividade de subagentes ativos para o turno atual.', + noLiveSubagents: 'Nenhum subagente ativo', + files: 'Arquivos', + label: 'Agentes', + open: 'Abrir agentes', + close: 'Fechar agentes', + subagent: 'subagente', + subagents: 'subagentes', + failed: 'falhou', + running: 'executando', + }, + provider: { + desc: { + nousPortal: 'Substituição da URL base do Nous Portal', + openRouter: 'Chave de API do OpenRouter (para visão, auxiliares de scraping web e MoA)', + google: 'Chave de API do Google AI Studio (também reconhecida como GEMINI_API_KEY)', + gemini: 'ID do projeto GCP para tiers Gemini pagos (tier gratuito aprovisiona automaticamente)', + anthropic: 'Chave de API Anthropic', + deepseek: 'URL base personalizada da API DeepSeek (avançado)', + xai: 'Substituição da URL base xAI', + huggingface: 'Substituição da URL base do Hugging Face Inference Providers', + kimi: 'Chave de API Kimi / Moonshot China', + minimax: 'Substituição da URL base MiniMax (China)', + minimaxCn: 'Chave de API MiniMax China', + dashscope: 'URL base DashScope personalizada (padrão: endpoint compatível com OpenAI coding-intl)', + glm: 'Chave de API GLM (Z.AI)', + nvidia: 'Substituição da URL base NVIDIA NIM (ex. http://localhost:8000/v1 para NIM local)', + opencodeGo: 'Chave de API OpenCode Go', + opencodeZen: 'Chave de API OpenCode Zen', + xiaomi: 'Substituição da URL base Xiaomi MiMo (padrão: https://api.xiaomimimo.com/v1)', + kiloCode: 'Chave de API Kilo Code', + aiGateway: 'Chave de API AI Gateway (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'Chave de API ElevenLabs', + openai: 'Chave de API OpenAI (para processamento de voz via proxy)', + mistral: 'Chave de API Mistral (para STT/TTS)', + groq: 'Chave de API Groq (para STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'URL da API Firecrawl para instâncias auto-hospedadas (opcional)', + fal: 'FAL_KEY', + nous: 'Substituição da URL base do Nous Portal', + openrouter: 'Chave de API OpenRouter (para visão, auxiliares de scraping web e MoA)', + lmstudio: 'Substituição da URL base Z.AI / GLM', + zai: 'URL base do Azure Foundry (definida via \'hermes model\' para config específica de endpoint)', + stepfun: 'Substituição da URL base StepFun Step Plan', + arcee: 'Substituição da URL base Arcee AI', + gmi: 'Substituição da URL base GMI Cloud', + qwenportal: 'Substituição da URL base do Qwen Portal (padrão: https://portal.qwen.ai/v1)', + opencodego: 'Substituição da URL base OpenCode Go', + ollamacloud: 'Substituição da URL base Ollama Cloud (padrão: https://ollama.com/v1)', + awsbedrock: 'Perfil nomeado AWS para autenticação Bedrock (de ~/.aws/credentials)', + exa: 'Chave de API Exa para pesquisa web e conteúdo nativa de IA', + parallel: 'Chave de API Parallel para pesquisa web e extração nativa de IA', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/ru.ts b/apps/desktop/src/i18n/ru.ts new file mode 100644 index 000000000000..1fa10d55c66e --- /dev/null +++ b/apps/desktop/src/i18n/ru.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const ru = defineLocale( +{ + appearance: { + title: 'Оформление', + description: 'Настройки отображения только для десктопа. Режим управляет яркостью; тема управляет палитрой акцентов и стилем чата.', + colorMode: 'Цветовой режим', + colorModeDesc: 'Выберите фиксированный режим или позвольте Hermes следовать системной настройке.', + theme: { + nous: 'Nous', + nousDesc: 'Стеклянные нейтральные тона с синими акцентами Nous', + midnight: 'Полночь', + midnightDesc: 'Глубокий сине-фиолетовый с холодными акцентами', + ember: 'Угли', + emberDesc: 'Тёплый малиновый и бронзовый — атмосфера кузницы', + mono: 'Моно', + monoDesc: 'Чистые оттенки серого — минимализм и фокус', + cyberpunk: 'Киберпанк', + cyberpunkDesc: 'Неоновый зелёный на чёрном — терминал матрицы', + slate: 'Сланец', + slateDesc: 'Холодный сине-серый — тема для разработчиков', + }, + themeDesc: 'Выберите цветовую палитру для чата и акцентов интерфейса.', + mode: { + light: 'Светлая', + lightDesc: 'Светлые поверхности рабочего стола', + dark: 'Тёмная', + darkDesc: 'Рабочее пространство без бликов', + system: 'Системная', + systemDesc: 'Следовать оформлению ОС', + }, + language: 'Язык', + languageDesc: 'Выберите язык интерфейса или позвольте Hermes следовать системным настройкам.', + toolCallDisplay: 'Отображение вызовов инструментов', + toolCallDisplayDesc: 'Продуктовый скрывает сырые данные; Технический показывает полный ввод/вывод.', + toolViewProduct: 'Продуктовый', + toolViewTechnical: 'Технический', + toolViewProductDesc: 'Дружелюбная активность инструментов с краткими сводками.', + toolViewTechnicalDesc: 'Включать сырые аргументы/результаты и низкоуровневые детали.', + }, + settings: { + title: 'Настройки', + appearance: 'Оформление', + model: 'Модель', + gateway: 'Шлюз', + sessions: 'Сессии', + tools: 'Инструменты и навыки', + section: { + chat: 'Чат', + workspace: 'Рабочая область', + safety: 'Безопасность', + memory: 'Память и контекст', + voice: 'Голос', + advanced: 'Дополнительно', + }, + mcp: 'Серверы MCP', + config: 'Конфигурация', + keys: 'Ключи API', + about: 'О программе', + closeSettings: 'Закрыть настройки', + archivedChats: 'Архивные чаты', + exportConfig: 'Экспорт конфигурации', + importConfig: 'Импорт конфигурации', + resetDefaults: 'Сбросить настройки', + llmProviders: 'LLM-провайдеры', + searchPlaceholder: { + about: 'О Hermes Desktop', + config: 'Поиск настроек…', + gateway: 'Подключение к шлюзу…', + keys: 'Поиск ключей API…', + mcp: 'Поиск серверов MCP…', + sessions: 'Поиск архивных сессий…', + }, + }, + chat: { + placeholder: 'Спросите о чём угодно…', + send: 'Отправить', + stop: 'Остановить', + thinking: 'Думаю…', + noSession: 'Нет активной сессии. Начните новый разговор.', + loadingSession: 'Загрузка сессии', + loadingResponse: 'Hermes загружает ответ', + branchInNewChat: 'Ответвить в новый чат', + readAloud: 'Прочитать вслух', + preparingAudio: 'Подготовка аудио...', + stopReading: 'Остановить чтение', + editMessage: 'Редактировать сообщение', + editableCheckpoint: 'Редактируемая точка сохранения', + restoreCheckpoint: 'Восстановить точку', + goForward: 'Вперёд', + restorePrevCheckpoint: 'Восстановить предыдущую точку', + restoreNextCheckpoint: 'Восстановить следующую точку', + composerTip: 'Совет: введите @ для ссылки на файлы.', + reconnecting: 'Переподключение к Hermes…', + }, + commandCenter: { + title: 'Командный центр', + noSessions: 'Сессий пока нет.', + loadingStatus: 'Загрузка статуса…', + recentLogs: 'Последние логи', + dailyTokens: 'Токены за день', + noActivity: 'Нет активности за день.', + noModelUsage: 'Использования моделей пока нет.', + noSkillActivity: 'Активности навыков пока нет.', + sessionsPanel: 'Панель сессий', + systemPanel: 'Системная панель', + usagePanel: 'Панель использования', + navigate: 'Навигация', + noMatchingResults: 'Совпадений не найдено.', + noSessionsYet: 'Сессий пока нет.', + unpinSession: 'Открепить сессию', + pinSession: 'Закрепить сессию', + exportSession: 'Экспортировать сессию', + deleteSession: 'Удалить сессию', + gatewayRunning: 'Шлюз мессенджеров работает', + gatewayStopped: 'Шлюз мессенджеров остановлен', + restartMsg: 'Перезапустить мессенджеры', + updateHermes: 'Обновить Hermes', + noLogsLoaded: 'Логи ещё не загружены.', + closeLabel: 'Закрыть командный центр', + searchPlaceholder: 'Поиск сессий, представлений и действий', + statSessions: 'Сессии', + statApiCalls: 'Вызовы API', + statTokens: 'Токены вх/исх', + statEstCost: 'Примерная стоимость', + cost => `факт. ${cost}`, + loadingUsage: 'Загрузка использования...', + count => `Нет использования за последние ${count} дн.`, + retry: 'Повторить', + tokenInput: 'вход', + tokenOutput: 'выход', + noDailyActivity: 'Нет активности за день.', + topModels: 'Топ моделей', + topSkills: 'Топ навыков', + actionsLabel: 'действия', + systemRunning: 'работает', + systemDone: 'завершено', + systemFailed: 'ошибка', + open: 'Открыть командный центр', + close: 'Закрыть командный центр', + }, + common: { + loading: 'Загрузка…', + save: 'Сохранить', + cancel: 'Отмена', + close: 'Закрыть', + delete: 'Удалить', + confirm: 'Подтвердить', + search: 'Поиск…', + clearSearch: 'Очистить поиск', + copy: 'Копировать', + refresh: 'Обновить', + moreActions: 'Ещё действия', + tryAgain: 'Попробовать снова', + }, + onboarding: { + welcome: 'Добро пожаловать в Hermes', + getStarted: 'Начните с выбора провайдера и модели.', + skip: 'Пропустить', + continue: 'Продолжить', + finish: 'Завершить', + setupTitle: 'Давайте настроим Hermes Agent', + setupDesc: 'Подключите модельного провайдера, чтобы начать общение. Большинство вариантов в один клик.', + preparing: 'Запуск Hermes…', + installing: 'Hermes завершает установку. Обычно это занимает меньше минуты при первом запуске.', + lookingUp: 'Поиск провайдеров...', + otherProviders: 'Другие провайдеры', + collapse: 'Свернуть', + iHaveKey: 'У меня есть ключ API', + recommended: 'Рекомендовано', + connected: 'Подключено', + backToSignIn: 'Вернуться ко входу', + getKey: 'Получить ключ', + pasteKey: 'Вставить ключ API', + connect: 'Подключить', + connecting: 'Подключение', + copyCode: 'Копировать', + startSignIn: 'Запуск входа для', + verifyingCode: 'Проверка кода через', + pickingModel: 'подключено. Выбор модели по умолчанию...', + signInFailed: 'Вход не удался. Попробуйте снова.', + pickDifferent: 'Выбрать другого провайдера', + signInTitle: 'Войти через', + step1: 'Мы открыли', + step1End: 'в вашем браузере.', + step2: 'Авторизуйте Hermes там.', + step3: 'Скопируйте код авторизации и вставьте его ниже.', + pasteCode: 'Вставить код авторизации', + reopenAuth: 'Открыть страницу авторизации снова', + cancel: 'Отмена', + browserDesc: 'Мы открыли', + browserDescEnd: 'в вашем браузере. Авторизуйте Hermes там, и вы подключитесь автоматически — ничего копировать не нужно.', + waitingAuth: 'Ожидание авторизации...', + reopenSignIn: 'Открыть страницу входа снова', + externalDesc: 'выполняет вход через свой CLI. Запустите эту команду в терминале, затем вернитесь и выберите «Я вошёл»:', + iSignedIn: 'Я вошёл', + enterCode: 'Мы открыли', + enterCodeEnd: 'в вашем браузере. Введите этот код там:', + reopenVerification: 'Открыть страницу проверки снова', + defaultModel: 'Модель по умолчанию', + freeTier: 'Бесплатный тариф', + pro: 'Pro', + change: 'Изменить', + startChatting: 'Начать общение', + docs: 'документация', + close: 'Закрыть', + savingError: 'Не удалось сохранить учётные данные.', + openRouter: 'OpenRouter', + }, + file: { + browser: 'Файловый браузер', + noFiles: 'Файлов пока нет.', + }, + terminal: { + title: 'Терминал', + newTab: 'Новая вкладка', + closeTab: 'Закрыть вкладку', + }, + skills: { + title: 'Навыки', + search: 'Поиск навыков…', + noResults: 'Навыки не найдены.', + tools: 'Навыки и инструменты', + }, + profiles: { + title: 'Профили', + noProfilesYet: 'Профилей пока нет.', + selectProfile: 'Выберите профиль для просмотра деталей.', + deleteProfile: 'Удалить профиль?', + soulMd: 'SOUL.md', + unsavedChanges: 'Несохранённые изменения', + newProfile: 'Новый профиль', + cloneFromDefault: 'Клонировать из стандартного', + renameProfile: 'Переименовать профиль', + }, + cron: { + title: 'Задачи Cron', + noJobs: 'Нет запланированных задач.', + deleteCronJob: 'Удалить задачу cron?', + optional: 'Необязательно', + label: 'Cron', + open: 'Открыть задачи cron', + }, + messaging: { + title: 'Мессенджеры', + recommended: 'Рекомендовано', + recommendedTelegram: 'Рекомендовано. Числовые ID через запятую из @userinfobot. Без этого любой может написать боту.', + recommendedDiscord: 'Рекомендовано. ID пользователей Discord через запятую.', + recommendedSlack: 'Рекомендовано. ID пользователей Slack через запятую.', + recommendedMattermost: 'Рекомендовано. ID пользователей Mattermost через запятую.', + recommendedMatrix: 'Рекомендовано. ID пользователей через запятую в формате @user:server.', + recommendedSignal: 'Рекомендовано. Идентификаторы Signal через запятую.', + recommendedWhatsApp: 'Рекомендовано. Номера телефонов или ID WhatsApp через запятую.', + gatewayStopped: 'Шлюз мессенджеров остановлен', + getCredentials: 'Получить учётные данные', + required: 'Обязательно', + unsavedChanges: 'Несохранённые изменения', + saved: 'Сохранено', + }, + about: { + version: 'Версия', + checkUpdates: 'Проверить обновления', + upToDate: 'Hermes обновлён до последней версии.', + updateAvailable: 'Доступно обновление.', + license: 'Лицензия MIT', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'Версия недоступна', + updates: 'Обновления', + checkNow: 'Проверить сейчас', + checking: 'Проверка…', + seeWhatsNew: 'Что нового', + releaseNotes: 'Примечания к выпуску', + autoUpdates: 'Автоматические обновления', + autoUpdatesDesc: 'Hermes автоматически проверяет обновления в фоне и сообщает, когда новое готово.', + selfUpdateUnsupported: 'Эта сборка не может обновляться изнутри приложения.', + cannotReachServer: 'Не удалось связаться с сервером обновлений.', + installingUpdate: 'Обновление устанавливается.', + count => `Доступно новое обновление (включено ${count} изменение).`, + count => `Доступно новое обновление (включено ${count} изменений).`, + onLatest: 'У вас последняя версия.', + tapCheckNow: 'Нажмите «Проверить сейчас» для поиска обновлений.', + time => `Последняя проверка ${time}`, + justNow: 'только что', + never: 'никогда', + count => `${count} мин. назад`, + count => `${count} ч. назад`, + count => `${count} дн. назад`, + (branch, sha) => `Ветка ${branch} · Коммит ${sha}`, + }, + keys: { + title: 'Ключи API', + noKeys: 'Ключи API не настроены.', + addKey: 'Добавить ключ', + loading: 'Загрузка ключей API и учётных данных…', + docs: 'Документация', + openDocs: 'Открыть документацию провайдера', + hideValue: 'Скрыть значение', + revealValue: 'Показать значение', + set: 'Задано', + notSet: 'Не задано', + replace: 'Заменить', + replaceValue: 'Заменить текущее значение', + enterValue: 'Введите значение', + saving: 'Сохранение', + save: 'Сохранить', + cancel: 'Отмена', + clearValue: 'Очистить значение', + (count, total) => `Настроено ${count} из ${total}`, + (count, total) => `Задано ${count} из ${total}`, + count => `Задано: ${count}`, + count => `Ключей: ${count}`, + otherProviders: 'Другие провайдеры', + categoryTools: 'Инструменты', + categoryMessaging: 'Мессенджеры', + categorySettings: 'Настройки', + openProviderDocs: 'Открыть документацию провайдера', + showAdvanced: 'Показать дополнительные', + loadFailed: 'Не удалось загрузить ключи API', + credentialSaved: 'Учётные данные сохранены', + credentialRemoved: 'Учётные данные удалены', + }, + config: { + title: 'Конфигурация', + edit: 'Редактировать', + reload: 'Перезагрузить', + notSet: 'Не задано', + commaSeparated: 'значения через запятую', + on: 'Вкл', + off: 'Выкл', + none: 'Нет', + emptyOption: '(нет)', + loading: 'Загрузка конфигурации Hermes…', + noMatching: 'Нет подходящих настроек', + noMatchingDesc: 'Попробуйте другой поисковый запрос или выберите другой раздел.', + count => `${count} результат`, + count => `${count} результатов`, + saving: 'Сохранение…', + label: { + defaultModel: 'Модель по умолчанию', + contextWindow: 'Контекстное окно', + fallbackModels: 'Резервные модели', + enabledToolsets: 'Включённые наборы инструментов', + timezone: 'Часовой пояс', + personality: 'Личность', + reasoningBlocks: 'Блоки рассуждений', + maxAgentSteps: 'Макс. шагов агента', + imageAttachments: 'Вложения изображений', + workingDirectory: 'Рабочая директория', + executionBackend: 'Бэкенд выполнения', + commandTimeout: 'Таймаут команд', + persistentShell: 'Постоянная оболочка', + envPassthrough: 'Проброс переменных окружения', + fileReadLimit: 'Лимит чтения файлов', + terminalOutputLimit: 'Лимит вывода терминала', + filePageLimit: 'Лимит страниц файла', + lineLengthLimit: 'Лимит длины строки', + codeExecutionMode: 'Режим выполнения кода', + approvalMode: 'Режим одобрения', + approvalTimeout: 'Таймаут одобрения', + confirmMcpReloads: 'Подтверждать перезагрузку MCP', + commandAllowlist: 'Белый список команд', + redactSecrets: 'Скрывать секреты', + allowPrivateUrls: 'Разрешить приватные URL', + browserPrivateUrls: 'Браузер для приватных URL', + localBrowserForPrivateUrls: 'Локальный браузер для приватных URL', + fileCheckpoints: 'Контрольные точки файлов', + checkpointLimit: 'Лимит контрольных точек', + voiceShortcut: 'Голосовая комбинация', + maxRecordingLength: 'Макс. длина записи', + readResponsesAloud: 'Читать ответы вслух', + speechToText: 'Распознавание речи', + speechToTextProvider: 'Провайдер распознавания речи', + localTranscriptionModel: 'Локальная модель транскрипции', + transcriptionLanguage: 'Язык транскрипции', + elevenlabsSttModel: 'Модель STT ElevenLabs', + elevenlabsLanguage: 'Язык ElevenLabs', + tagAudioEvents: 'Метки аудиособытий', + speakerDiarization: 'Диаризация спикеров', + textToSpeechProvider: 'Провайдер синтеза речи', + edgeVoice: 'Голос Edge', + openaiTtsModel: 'Модель TTS OpenAI', + openaiVoice: 'Голос OpenAI', + elevenlabsVoice: 'Голос ElevenLabs', + elevenlabsModel: 'Модель ElevenLabs', + persistentMemory: 'Постоянная память', + userProfile: 'Профиль пользователя', + memoryBudget: 'Бюджет памяти', + profileBudget: 'Бюджет профиля', + memoryProvider: 'Провайдер памяти', + contextEngine: 'Движок контекста', + autoCompression: 'Автосжатие', + compressionThreshold: 'Порог сжатия', + compressionTarget: 'Цель сжатия', + protectedRecentMessages: 'Защищённые последние сообщения', + apiRetries: 'Повторы API', + serviceTier: 'Уровень обслуживания', + toolUseEnforcement: 'Принуждение использования инструментов', + subagentModel: 'Модель субагента', + subagentProvider: 'Провайдер субагента', + subagentTurnLimit: 'Лимит ходов субагента', + parallelSubagents: 'Параллельные субагенты', + subagentTimeout: 'Таймаут субагента', + subagentReasoningEffort: 'Усилие рассуждения субагента', + }, + desc: { + defaultModel: 'Используется для новых чатов, если не выбрана другая модель в композере.', + contextWindow: 'Оставьте 0 для использования контекстного окна выбранной модели.', + fallbackModels: 'Резервные записи провайдер:модель на случай сбоя основной модели.', + personality: 'Стиль ассистента по умолчанию для новых сессий.', + timezone: 'Используется, когда Hermes нужен контекст местного времени. Пустое значение — системный пояс.', + reasoningBlocks: 'Показывать разделы рассуждений, когда бэкенд их предоставляет.', + imageAttachments: 'Управляет отправкой вложений изображений модели.', + workingDirectory: 'Папка проекта по умолчанию для работы инструментов и терминала.', + codeExecutionMode: 'Насколько строго выполнение кода ограничено текущим проектом.', + persistentShell: 'Сохранять состояние оболочки между командами, если бэкенд поддерживает.', + envPassthrough: 'Переменные окружения для передачи в выполнение инструментов.', + fileReadLimit: 'Максимальное количество символов, которое Hermes может прочитать из одного файла.', + approvalMode: 'Как Hermes обрабатывает команды, требующие явного одобрения.', + approvalTimeout: 'Как долго запросы одобрения ждут перед таймаутом.', + redactSecrets: 'Скрывать обнаруженные секреты от видимого модели контента, когда возможно.', + fileCheckpoints: 'Создавать снимки отката перед редактированием файлов.', + persistentMemory: 'Сохранять долговременные воспоминания, помогающие будущим сессиям.', + userProfile: 'Поддерживать компактный профиль пользовательских предпочтений.', + contextEngine: 'Стратегия управления длинными разговорами вблизи лимита контекста.', + autoCompression: 'Суммаризировать старый контекст при разрастании разговоров.', + readResponsesAloud: 'Автоматически озвучивать ответы ассистента.', + speechToText: 'Включить локальную или провайдерскую транскрипцию речи.', + elevenlabsLanguage: 'Необязательный код языка ISO-639-3. Пустое значение — автоопределение ElevenLabs.', + maxAgentSteps: 'Верхняя граница ходов вызова инструментов до остановки Hermes.', + }, + }, + gateway: { + title: 'Шлюз', + start: 'Запустить шлюз', + stop: 'Остановить шлюз', + restart: 'Перезапустить шлюз', + running: 'Работает', + stopped: 'Остановлен', + loading: 'Загрузка настроек шлюза…', + unavailable: 'Настройки шлюза недоступны', + unavailableDesc: 'Мост IPC десктопа не предоставляет настройки шлюза.', + connection: 'Подключение к шлюзу', + envOverride: 'переопределение через env', + desc: 'Hermes Desktop по умолчанию запускает собственный локальный шлюз. Используйте удалённый шлюз, если хотите, чтобы приложение управляло уже запущенным бэкендом Hermes на другой машине или за доверенным прокси.', + envOverrideTitle: 'Переменные окружения управляют этой десктоп-сессией.', + (urlVar, tokenVar) => `Сбросьте ${urlVar} и ${tokenVar}, чтобы использовать сохранённые настройки ниже.`, + localTitle: 'Локальный шлюз', + localDesc: 'Запустить приватный бэкенд Hermes на localhost. Это поведение по умолчанию, работает офлайн.', + remoteTitle: 'Удалённый шлюз', + remoteDesc: 'Подключить эту десктоп-оболочку к удалённому бэкенду Hermes по токену сессии.', + remoteUrl: 'Удалённый URL', + remoteUrlDesc: 'Базовый URL удалённого бэкенда. Поддерживаются префиксы пути, например /hermes.', + remoteUrlPlaceholder: 'https://gateway.example.com/hermes', + sessionToken: 'Токен сессии', + sessionTokenDesc: 'Токен сессии панели управления для доступа REST и WebSocket. Оставьте пустым, чтобы сохранить существующий токен.', + sessionTokenPlaceholder: 'Вставьте токен сессии', + preview => `Существующий токен ${preview}`, + tokenSaved: 'сохранён', + testRemote: 'Проверить удалённый', + saveRestart: 'Сохранить для следующего запуска', + saveReconnect: 'Сохранить и переподключиться', + diagnostics: 'Диагностика', + diagnosticsDesc: 'Показать desktop.log в файловом менеджере — полезно, когда шлюз не запускается.', + openLogs: 'Открыть логи', + connected: 'Подключено', + connecting: 'Подключение', + disconnected: 'Отключено', + inferenceReady: 'Инференс готов', + inferenceNotReady: 'Инференс не готов', + checkingInference: 'Проверка инференса', + openSystemPanel: 'Открыть системную панель', + connectionLabel: 'Подключение:', + recentActivity: 'Недавняя активность', + viewAllLogs: 'Все логи →', + messagingPlatforms: 'Платформы мессенджеров', + label: 'Шлюз', + inferenceStatus: 'Статус инференса шлюза', + enterUrlFirst: 'Введите удалённый URL и токен сессии перед переключением', + enterUrlFirstTest: 'Введите удалённый URL и токен сессии перед проверкой', + }, + sessions: { + title: 'Сессии', + search: 'Поиск сессий…', + noResults: 'Сессии не найдены.', + export: 'Экспорт', + delete: 'Удалить сессию', + loading: 'Загрузка…', + defaultProjectDir: 'Папка проектов по умолчанию', + defaultProjectDirDesc: 'Новые сессии начинаются в этой папке, если не выбрана другая. Оставьте пустым для домашней директории.', + fallback => `По умолчанию ${fallback}.`, + notSet: 'Не задано', + change: 'Изменить', + choose: 'Выбрать', + clear: 'Очистить', + archivedTitle: 'Архивные сессии', + archivedDesc: 'Архивные чаты скрыты из боковой панели, но сохраняют все сообщения. Ctrl/⌘-клик по чату в панели архивирует его.', + nothingArchived: 'Ничего не архивировано', + noSearchMatch: 'Нет архивных чатов по вашему запросу.', + archiveToHide: 'Архивируйте чат, чтобы скрыть его здесь.', + unarchive: 'Разархивировать', + deletePermanently: 'Удалить навсегда', + count => `Сообщений: ${count}`, + new: 'Новая сессия', + running: 'Сессия выполняется', + actions: 'Действия с сессией', + reorder: 'Переупорядочить', + pin: 'Закрепить', + unpin: 'Открепить', + copyId: 'Копировать ID', + rename: 'Переименовать', + archive: 'Архивировать', + renameDialog: 'Переименовать сессию', + renameDesc: 'Дайте чату запоминающееся название. Оставьте пустым для сброса.', + untitled: 'Безымянная сессия', + renamed: 'Переименовано', + renameFailed: 'Не удалось переименовать', + pinned: 'Закреплено', + results: 'Результаты', + allPinned: 'Здесь всё закреплено. Открепите чат, чтобы показать его в недавних.', + pinHint: 'Shift-клик для закрепления · перетаскивание для порядка', + loadMore: 'Загрузить ещё', + noWorkspace: 'Нет рабочей области', + ungroup: 'Показать сессии одним списком', + groupByWorkspace: 'Группировать по рабочим областям', + loadStep: 'Загрузить', + moreLabel: 'ещё', + nothingArchivedTitle: 'Ничего не архивировано', + deletePermanentlyTitle: 'Удалить навсегда', + defaultProjectDirTitle: 'Папка проектов по умолчанию', + loadingArchived: 'Загрузка архивных сессий…', + restored: 'Восстановлено', + projectDirUpdated: 'Папка проектов по умолчанию обновлена', + loadFailed: 'Не удалось загрузить архивные сессии', + unarchiveFailed: 'Не удалось разархивировать', + deleteFailed: 'Не удалось удалить', + archiveHint: 'Архивируйте чат, чтобы скрыть его здесь.', + updateDirFailed: 'Не удалось обновить директорию по умолчанию', + clearDirFailed: 'Не удалось очистить директорию по умолчанию', + }, + mcp: { + title: 'Серверы MCP', + addServer: 'Добавить сервер', + noServers: 'Серверы MCP не настроены.', + loading: 'Загрузка серверов MCP…', + servers: 'Серверы MCP', + count => `Настроено: ${count}`, + newServer: 'Новый сервер', + reloadMCP: 'Перезагрузить MCP', + reloading: 'Перезагрузка...', + noServersDesc: 'Добавьте сервер stdio или HTTP для предоставления инструментов MCP.', + name: 'Имя', + namePlaceholder: 'filesystem', + serverJSON: 'JSON сервера', + editServer: 'Редактировать сервер', + saveServer: 'Сохранить сервер', + saving: 'Сохранение...', + remove: 'Удалить', + disabled: 'отключён', + nameRequired: 'Требуется имя', + nameRequiredDesc: 'Укажите конфигурационный ключ для сервера MCP.', + invalidJson: 'Конфигурация сервера должна быть JSON-объектом', + invalidJsonDesc: 'Некорректный JSON MCP', + saved: 'Сервер MCP сохранён', + name => `${name} применится после перезагрузки MCP.`, + saveFailed: 'Не удалось сохранить', + removeFailed: 'Не удалось удалить', + gatewayUnavailable: 'Шлюз недоступен', + gatewayUnavailableDesc: 'Подключите шлюз перед перезагрузкой MCP.', + reloadedTitle: 'Инструменты MCP перезагружены', + reloadedDesc: 'Новые схемы инструментов применяются к новым запросам.', + reloadFailed: 'Перезагрузка MCP не удалась', + giveConfigKey: 'Укажите конфигурационный ключ для сервера MCP.', + reconnectGateway: 'Подключите шлюз перед перезагрузкой MCP.', + newSchemas: 'Новые схемы инструментов применяются к новым запросам.', + loadingServers: 'Загрузка серверов MCP...', + serverName: 'Имя', + serversTitle: 'Серверы MCP', + noServersTitle: 'Нет серверов MCP', + failedToLoad: 'Не удалось загрузить конфигурацию MCP', + invalidJsonShort: 'Некорректный JSON MCP', + serverSaved: 'Сервер MCP сохранён', + toolsReloaded: 'Инструменты MCP перезагружены', + emptyDesc: 'Добавьте сервер stdio или HTTP для предоставления инструментов MCP.', + }, + tools: { + title: 'Инструменты и навыки', + noTools: 'Нет доступных инструментов.', + }, + nav: { + home: 'Главная', + chat: 'Чат', + settings: 'Настройки', + files: 'Файлы', + terminal: 'Терминал', + }, + header: { + search: 'Поиск или ввод команды…', + }, + model: { + auxTask: { + vision: 'Зрение', + visionHint: 'Анализ изображений', + web_extract: 'Извлечение из веба', + web_extractHint: 'Суммаризация страниц', + compression: 'Сжатие', + compressionHint: 'Уплотнение контекста', + session_search: 'Поиск по сессиям', + session_searchHint: 'Запросы поиска', + skills_hub: 'Хаб навыков', + skills_hubHint: 'Поиск навыков', + approval: 'Одобрение', + approvalHint: 'Умное автоодобрение', + mcp: 'MCP', + mcpHint: 'Маршрутизация инструментов MCP', + title_generation: 'Генерация заголовков', + title_generationHint: 'Заголовки сессий', + curator: 'Куратор', + curatorHint: 'Обзор использования навыков', + }, + mainModel: 'Основная модель', + mainDesc: 'Применяется к новым сессиям. Используйте выбор модели в композере для смены в активном чате.', + providerPlaceholder: 'Провайдер', + modelPlaceholder: 'Модель', + apply: 'Применить', + applying: 'Применение…', + auxiliaryModels: 'Вспомогательные модели', + auxiliaryDesc: 'Вспомогательные задачи по умолчанию используют основную модель. Назначьте отдельную модель для переопределения.', + resetAllToMain: 'Сбросить всё на основную', + setToMain: 'Назначить основную', + change: 'Изменить', + cancel: 'Отмена', + autoUseMain: 'авто · основная модель', + providerDefault: '(по умолчанию провайдера)', + loading: 'Загрузка конфигурации модели…', + options: 'Параметры', + thinking: 'Размышление', + fast: 'Быстрый', + effort: 'Усилие', + noOptions: 'Нет параметров для этой модели', + optionUpdateFailed: 'Не удалось обновить параметр модели', + fastModeUpdateFailed: 'Не удалось обновить быстрый режим', + effortMinimal: 'Минимальное', + effortLow: 'Низкое', + effortMedium: 'Среднее', + effortHigh: 'Высокое', + effortMax: 'Максимальное', + switch: 'Сменить модель', + unknown: '(неизвестно)', + filterPlaceholder: 'Фильтр провайдеров и моделей...', + persistGlobal: 'Сохранить глобально', + persistGlobalSession: 'Сохранить глобально (иначе только для этой сессии)', + couldNotLoad: 'Не удалось загрузить модели', + proLockedDesc: 'Pro-модели требуют платной подписки Nous.', + priceTooltip: 'Цена ввода / вывода за миллион токенов', + freePrice: 'Бесплатно', + currentLabel: 'текущая:', + addProviderBtn: 'Добавить провайдера', + }, + updates: { + checking: 'Проверка обновлений…', + available: 'Доступно обновление', + downloading: 'Загрузка…', + installing: 'Установка…', + restart: 'Перезапустить для обновления', + stageGettingReady: 'Подготовка…', + stageDownloading: 'Загрузка…', + stageAlmostThere: 'Почти готово…', + stageFinishingUp: 'Завершение…', + stageRestarting: 'Перезапуск Hermes…', + stageManual: 'Обновление из терминала', + stageError: 'Обновление приостановлено', + updatingHermes: 'Обновление Hermes…', + lookingForUpdates: 'Поиск обновлений…', + couldntCheck: 'Не удалось проверить обновления', + updateNotAvailable: 'Обновление недоступно', + checkConnection: 'Проверьте подключение и попробуйте снова.', + onLatest: 'У вас последняя версия.', + allSet: 'Всё готово', + newUpdateAvailable: 'Доступно новое обновление', + readyToInstall: 'Новая версия Hermes готова к установке.', + updateNow: 'Обновить сейчас', + maybeLater: 'Возможно позже', + count => `+ ещё ${count} изменение.`, + count => `+ ещё ${count} изменений.`, + updateFromTerminal: 'Обновление из терминала', + terminalDesc: 'Вы установили Hermes из командной строки, поэтому обновления выполняются там же. Вставьте это в терминал:', + copied: 'Скопировано', + copy: 'Копировать', + pickupNewVersion: 'Hermes подхватит новую версию при следующем запуске.', + done: 'Готово', + updaterDesc: 'Установщик Hermes продолжит в собственном окне и перезапустит Hermes по завершении.', + closeToApply: 'Hermes закроется для применения обновления.', + updateDidntFinish: 'Обновление не завершилось', + nothingLost: 'Не беспокойтесь — ничего не потеряно. Можете попробовать снова сейчас.', + notNow: 'Не сейчас', + }, + errors: { + generic: 'Что-то пошло не так.', + notFound: 'Страница не найдена.', + noPermission: 'У вас нет доступа к этому.', + somethingBroke: 'Что-то сломалось в интерфейсе', + viewCrashedDesc: 'Представление столкнулось с неожиданной ошибкой. Ваши чаты и настройки в безопасности — попробуйте снова или перезагрузите окно.', + noProviders: 'Нет аутентифицированных провайдеров.', + }, + tool: { + toolCall: 'Вызов инструмента', + result: 'Результат', + error: 'Ошибка', + timeout: 'Таймаут', + cancelled: 'Отменено', + running: 'Выполняется', + recovered: 'Восстановлено', + done: 'Готово', + output: 'Вывод инструмента', + searchResults: 'Результаты поиска', + rawResponse: 'Сырой ответ', + stdout: 'stdout', + stderr: 'stderr', + copyActivity: 'Копировать активность', + recoveredAfter: 'Восстановлено после 1 неудачного шага', + count => `Восстановлено после ${count} неудачных шагов`, + oneStepFailed: '1 шаг не удался', + count => `${count} шагов не удалось`, + }, + composer: { + startingHermes: 'Запуск Hermes...', + sendFollowUp: 'Отправить продолжение', + message: 'Сообщение', + editingQueued: 'Редактирование очереди в композере', + attach: 'Прикрепить', + files: 'Файлы…', + folder: 'Папка…', + images: 'Изображения…', + pasteImage: 'Вставить изображение', + url: 'URL…', + promptSnippets: 'Фрагменты подсказок', + promptSnippetsDesc: 'Выберите готовую подсказку для вставки в композер.', + voiceStart: 'Начать голосовой разговор', + queue: 'Поставить в очередь', + speaking: 'Говорит', + transcribing: 'Расшифровка', + muted: 'Микрофон выкл.', + listening: 'Слушаю', + unmuteMic: 'Включить микрофон', + muteMic: 'Выключить микрофон', + stopListening: 'Остановить прослушивание и отправить', + endVoice: 'Завершить голосовой разговор', + end: 'Завершить', + stopDictation: 'Остановить диктовку', + transcribingDictation: 'Расшифровка диктовки', + voiceDictation: 'Голосовая диктовка', + addContext: 'Добавить контекст', + }, + models: { + title: 'Модели', + search: 'Поиск моделей', + addProvider: 'Добавить провайдера…', + }, + install: { + title: 'Hermes требуется однократная установка', + desc: 'Автоматическая установка при первом запуске недоступна на', + descEnd: 'пока. Откройте терминал и выполните команду ниже, затем перезапустите приложение. При последующих запусках этот шаг пропускается.', + installCommand: 'Команда установки', + copyCommand: 'Копировать команду', + viewDocs: 'Документация по установке', + willInstallTo: 'Будет установлено в', + iRanIt: 'Я выполнил — повторить', + failed: 'Установка не удалась', + settingUp: 'Настройка Hermes Agent', + finishingUp: 'Завершение', + failedDesc: 'Один из шагов установки не удался. В Windows это может произойти, если запущен другой экземпляр Hermes CLI или десктопа. Остановите все запущенные экземпляры Hermes, затем повторите. Подробности ниже или в журнале десктопа.', + setupDesc: 'Это однократная настройка. Установщик Hermes загружает зависимости и настраивает машину. При последующих запусках этот шаг пропускается.', + fetchingManifest: 'Получение манифеста установщика...', + error: 'Ошибка', + showOutput: 'Показать вывод установщика', + hideOutput: 'Скрыть вывод установщика', + noOutput: 'Вывода пока нет.', + cancelInstall: 'Отменить установку', + cancelling: 'Отмена...', + copyOutput: 'Копировать вывод', + copied: 'Скопировано!', + reloadRetry: 'Перезагрузить и повторить', + saveLogs: 'Полный журнал сохранён в', + stepsComplete: 'шагов выполнено', + nowLabel: 'сейчас', + line: 'строка', + lines: 'строк', + }, + previewConsole: { + resizeLabel: 'Изменить размер консоли предпросмотра', + noMessages: 'Сообщений консоли пока нет.', + }, + boot: { + ipcUnavailable: 'Мост IPC десктопа недоступен.', + backendExited: 'Фоновый процесс Hermes завершился во время запуска.', + backendStoppedTitle: 'Бэкенд остановлен', + backendStoppedMessage: 'Фоновый процесс Hermes завершился.', + startingConnection: 'Запуск подключения десктопа', + connectingGateway: 'Подключение живого шлюза десктопа', + loadingConfig: 'Загрузка настроек Hermes', + loadingSessions: 'Загрузка последних сессий', + desktopBootFailed: 'Загрузка десктопа не удалась', + couldNotStart: 'Hermes не удалось запустить', + recoveryDesc: 'Фоновый шлюз не запустился. Попробуйте один из шагов восстановления ниже — ничего здесь не удаляет ваши чаты или настройки.', + retry: 'Повторить', + repairInstall: 'Восстановить установку', + useLocalGateway: 'Использовать локальный шлюз', + openLogs: 'Открыть логи', + repairHint: 'Восстановление перезапускает установщик и может занять несколько минут на новой машине.', + showLogs: 'Показать последние логи', + hideLogs: 'Скрыть последние логи', + }, + urlDialog: { + title: 'Прикрепить URL', + description: 'Hermes загрузит страницу и включит её как контекст для этого запроса.', + placeholder: 'https://example.com/post', + hint: 'Укажите полный URL, например', + attach: 'Прикрепить', + }, + titlebar: { + hideSidebar: 'Скрыть боковую панель', + showSidebar: 'Показать боковую панель', + search: 'Поиск', + searchTitle: 'Поиск сессий, представлений и действий', + hideRightSidebar: 'Скрыть правую панель', + showRightSidebar: 'Показать правую панель', + unmuteHaptics: 'Включить тактильный отклик', + muteHaptics: 'Отключить тактильный отклик', + openSettings: 'Открыть настройки', + profiles: 'Профили', + profilesDesc: 'Продвинутые окружения Hermes для отдельных персон, конфигураций, навыков и SOUL.md.', + manageProfiles: 'Управление профилями', + language: 'Язык', + languageDesc: 'Выберите язык отображения интерфейса.', + }, + pagination: { + ariaLabel: 'пагинация', + prevAria: 'На предыдущую страницу', + prev: 'Назад', + nextAria: 'На следующую страницу', + next: 'Вперёд', + }, + bootstrap: { + pending: 'Ожидание', + running: 'Установка', + done: 'Готово', + skipped: 'Пропущено', + failed: 'Ошибка', + }, + sidebar: { + sheetTitle: 'Боковая панель', + sheetDesc: 'Отображает мобильную боковую панель.', + toggle: 'Переключить боковую панель', + }, + clarify: { + hermesIsAsking: 'Hermes спрашивает', + loadingQuestion: 'Загрузка вопроса…', + otherTypeAnswer: 'Другое (введите ответ)', + placeholderAnswer: 'Введите ответ…', + cmdEnterToSend: '⌘/Ctrl + Enter для отправки', + back: 'Назад', + skip: 'Пропустить', + couldNotSend: 'Не удалось отправить уточняющий ответ', + n => `1–${n} для выбора`, + }, + intro: { + fallback1h: 'Что двигаем сегодня?', + fallback1b: 'Отправьте баг, ветку, план или черновую идею. Я осмотрю репозиторий и превращу в следующий конкретный шаг.', + fallback2h: 'Что у вас на уме?', + fallback2b: 'Принесите код, вопрос или застрявшую часть. Я ознакомлюсь перед тем, как вносить изменения.', + fallback3h: 'На что Hermes должен посмотреть?', + fallback3b: 'Отправьте задачу, падающий путь или полуготовый план. Я помогу превратить в действие.', + fallback4h: 'С чего начнём?', + fallback4b: 'Принесите проблему, цель или файл. Я сперва осмотрюсь и сделаю следующий шаг конкретным.', + fallback5h: 'Что требует внимания?', + fallback5b: 'Отправьте имеющийся контекст. Я помогу превратить его в план или исправление.', + personality: { + label => `Режим ${label} включён. Над чем будем работать?`, + body1: 'Отправьте задачу, файл или черновую идею. Я буду использовать настроенный голос и привяжу работу к этому репозиторию.', + label => `Что ${label} Hermes нужно увидеть?`, + body2: 'Принесите контекст или застрявшую часть. Я адаптируюсь к настроенной личности.', + label => `Режим ${label} готов.`, + body3: 'Отправьте проблему, файл или идею. Я последую настроенной личности.', + label => `За что ${label} Hermes возьмётся?`, + body4: 'Оставьте задачу здесь. Я привяжу работу к репозиторию.', + heading5: 'С чего начнём?', + label => `Дайте мне контекст, и я отвечу в режиме ${label}.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'Артефакты не найдены', + }, + agents: { + spawnTree: 'Дерево порождения', + liveSubagentActivity: 'Активность субагентов в реальном времени для текущего хода.', + noLiveSubagents: 'Нет активных субагентов', + files: 'Файлы', + label: 'Агенты', + open: 'Открыть агентов', + close: 'Закрыть агентов', + subagent: 'субагент', + subagents: 'субагентов', + failed: 'ошибка', + running: 'выполняется', + }, + provider: { + desc: { + nousPortal: 'Переопределение базового URL портала Nous', + openRouter: 'Ключ API OpenRouter (для зрения, помощников веб-скрапинга и MoA)', + google: 'Ключ API Google AI Studio (также распознаётся как GEMINI_API_KEY)', + gemini: 'ID проекта GCP для платных тарифов Gemini (бесплатный тариф настраивается автоматически)', + anthropic: 'Ключ API Anthropic', + deepseek: 'Пользовательский базовый URL DeepSeek API (дополнительно)', + xai: 'Переопределение базового URL xAI', + huggingface: 'Переопределение базового URL Hugging Face Inference Providers', + kimi: 'Ключ API Kimi / Moonshot China', + minimax: 'Переопределение базового URL MiniMax (Китай)', + minimaxCn: 'Ключ API MiniMax China', + dashscope: 'Пользовательский базовый URL DashScope (по умолчанию: coding-intl OpenAI-совместимая точка)', + glm: 'Ключ API GLM (Z.AI)', + nvidia: 'Переопределение базового URL NVIDIA NIM (например, http://localhost:8000/v1 для локального NIM)', + opencodeGo: 'Ключ API OpenCode Go', + opencodeZen: 'Ключ API OpenCode Zen', + xiaomi: 'Переопределение базового URL Xiaomi MiMo (по умолчанию: https://api.xiaomimimo.com/v1)', + kiloCode: 'Ключ API Kilo Code', + aiGateway: 'Ключ API AI Gateway (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'Ключ API ElevenLabs', + openai: 'Ключ API OpenAI (для обработки голоса через прокси)', + mistral: 'Ключ API Mistral (для STT/TTS)', + groq: 'Ключ API Groq (для STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'URL Firecrawl API для собственных экземпляров (необязательно)', + fal: 'FAL_KEY', + nous: 'Переопределение базового URL портала Nous', + openrouter: 'Ключ API OpenRouter (для зрения, помощников веб-скрапинга и MoA)', + lmstudio: 'Переопределение базового URL Z.AI / GLM', + zai: 'Базовый URL Azure Foundry (задаётся через \'hermes model\' для конфигурации точки)', + stepfun: 'Переопределение базового URL StepFun Step Plan', + arcee: 'Переопределение базового URL Arcee AI', + gmi: 'Переопределение базового URL GMI Cloud', + qwenportal: 'Переопределение базового URL Qwen Portal (по умолчанию: https://portal.qwen.ai/v1)', + opencodego: 'Переопределение базового URL OpenCode Go', + ollamacloud: 'Переопределение базового URL Ollama Cloud (по умолчанию: https://ollama.com/v1)', + awsbedrock: 'Именованный профиль AWS для аутентификации Bedrock (из ~/.aws/credentials)', + exa: 'Ключ API Exa для AI-поиска и содержимого', + parallel: 'Ключ API Parallel для AI-поиска и извлечения', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/th.ts b/apps/desktop/src/i18n/th.ts new file mode 100644 index 000000000000..1248fbb5a467 --- /dev/null +++ b/apps/desktop/src/i18n/th.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const th = defineLocale( +{ + appearance: { + title: 'ลักษณะที่ปรากฏ', + description: 'การตั้งค่าการแสดงผลเฉพาะเดสก์ท็อป โหมดควบคุมความสว่าง; ธีมควบคุมพาเลทสีและสไตล์พื้นผิวแชท', + colorMode: 'โหมดสี', + colorModeDesc: 'เลือกโหมดคงที่หรือให้ Hermes ตามการตั้งค่าระบบของคุณ', + theme: { + nous: 'Nous', + nousDesc: 'โทนกลางแบบกระจกพร้อมการเน้นสีน้ำเงิน Nous', + midnight: 'เที่ยงคืน', + midnightDesc: 'น้ำเงิน-ม่วงเข้มพร้อมการเน้นสีโทนเย็น', + ember: 'ถ่านคุ', + emberDesc: 'สีแดงเข้มอบอุ่นและสีบรอนซ์ — บรรยากาศโรงตีเหล็ก', + mono: 'โมโน', + monoDesc: 'โทนเทาสะอาด — เรียบง่ายและมีสมาธิ', + cyberpunk: 'ไซเบอร์พังค์', + cyberpunkDesc: 'เขียวนีออนบนพื้นดำ — เทอร์มินัลเมทริกซ์', + slate: 'สเลท', + slateDesc: 'น้ำเงินสเลทโทนเย็น — ธีมสำหรับนักพัฒนาที่มีสมาธิ', + }, + themeDesc: 'เลือกพาเลทสีสำหรับพื้นผิวแชทและการเน้นสีอินเทอร์เฟซ', + mode: { + light: 'สว่าง', + lightDesc: 'พื้นผิวเดสก์ท็อปสว่าง', + dark: 'มืด', + darkDesc: 'พื้นที่ทำงานลดแสงสะท้อน', + system: 'ระบบ', + systemDesc: 'ตามลักษณะระบบปฏิบัติการ', + }, + language: 'ภาษา', + languageDesc: 'เลือกภาษาของอินเทอร์เฟซหรือให้ Hermes ตามการตั้งค่าระบบของคุณ', + toolCallDisplay: 'การแสดงการเรียกใช้เครื่องมือ', + toolCallDisplayDesc: 'โหมดผลิตภัณฑ์ซ่อนข้อมูลเครื่องมือดิบ; โหมดเทคนิคแสดงอินพุต/เอาต์พุตเต็มรูปแบบ', + toolViewProduct: 'ผลิตภัณฑ์', + toolViewTechnical: 'เทคนิค', + toolViewProductDesc: 'กิจกรรมเครื่องมือที่เข้าใจง่ายพร้อมสรุปที่กระชับ', + toolViewTechnicalDesc: 'รวมอาร์กิวเมนต์/ผลลัพธ์เครื่องมือดิบและรายละเอียดระดับต่ำ', + }, + settings: { + title: 'การตั้งค่า', + appearance: 'ลักษณะที่ปรากฏ', + model: 'โมเดล', + gateway: 'เกตเวย์', + sessions: 'เซสชัน', + tools: 'เครื่องมือและทักษะ', + section: { + chat: 'แชท', + workspace: 'พื้นที่ทำงาน', + safety: 'ความปลอดภัย', + memory: 'หน่วยความจำและบริบท', + voice: 'เสียง', + advanced: 'ขั้นสูง', + }, + mcp: 'เซิร์ฟเวอร์ MCP', + config: 'การกำหนดค่า', + keys: 'คีย์ API', + about: 'เกี่ยวกับ', + closeSettings: 'ปิดการตั้งค่า', + archivedChats: 'แชทที่เก็บถาวร', + exportConfig: 'ส่งออกการกำหนดค่า', + importConfig: 'นำเข้าการกำหนดค่า', + resetDefaults: 'รีเซ็ตเป็นค่าเริ่มต้น', + llmProviders: 'ผู้ให้บริการ LLM', + searchPlaceholder: { + about: 'เกี่ยวกับ Hermes Desktop', + config: 'ค้นหาการตั้งค่า…', + gateway: 'การเชื่อมต่อเกตเวย์…', + keys: 'ค้นหาคีย์ API…', + mcp: 'ค้นหาเซิร์ฟเวอร์ MCP…', + sessions: 'ค้นหาเซสชันที่เก็บถาวร…', + }, + }, + chat: { + placeholder: 'ถามอะไรก็ได้…', + send: 'ส่ง', + stop: 'หยุด', + thinking: 'กำลังคิด…', + noSession: 'ไม่มีเซสชันที่ใช้งานอยู่ เริ่มการสนทนาใหม่', + loadingSession: 'กำลังโหลดเซสชัน', + loadingResponse: 'Hermes กำลังโหลดการตอบกลับ', + branchInNewChat: 'แยกสาขาในแชทใหม่', + readAloud: 'อ่านออกเสียง', + preparingAudio: 'กำลังเตรียมเสียง...', + stopReading: 'หยุดอ่าน', + editMessage: 'แก้ไขข้อความ', + editableCheckpoint: 'จุดตรวจที่แก้ไขได้', + restoreCheckpoint: 'กู้คืนจุดตรวจ', + goForward: 'ไปข้างหน้า', + restorePrevCheckpoint: 'กู้คืนจุดตรวจก่อนหน้า', + restoreNextCheckpoint: 'กู้คืนจุดตรวจถัดไป', + composerTip: 'เคล็ดลับ: พิมพ์ @ เพื่ออ้างอิงไฟล์ในบรรทัด', + reconnecting: 'กำลังเชื่อมต่อกับ Hermes ใหม่…', + }, + commandCenter: { + title: 'ศูนย์บัญชาการ', + noSessions: 'ยังไม่มีเซสชัน', + loadingStatus: 'กำลังโหลดสถานะ…', + recentLogs: 'บันทึกล่าสุด', + dailyTokens: 'โทเค็นรายวัน', + noActivity: 'ไม่มีกิจกรรมรายวัน', + noModelUsage: 'ยังไม่มีการใช้งานโมเดล', + noSkillActivity: 'ยังไม่มีกิจกรรมทักษะ', + sessionsPanel: 'แผงเซสชัน', + systemPanel: 'แผงระบบ', + usagePanel: 'แผงการใช้งาน', + navigate: 'นำทาง', + noMatchingResults: 'ไม่พบผลลัพธ์ที่ตรงกัน', + noSessionsYet: 'ยังไม่มีเซสชัน', + unpinSession: 'ถอนหมุดเซสชัน', + pinSession: 'ปักหมุดเซสชัน', + exportSession: 'ส่งออกเซสชัน', + deleteSession: 'ลบเซสชัน', + gatewayRunning: 'เกตเวย์การส่งข้อความกำลังทำงาน', + gatewayStopped: 'เกตเวย์การส่งข้อความหยุดทำงาน', + restartMsg: 'รีสตาร์ทการส่งข้อความ', + updateHermes: 'อัปเดต Hermes', + noLogsLoaded: 'ยังไม่ได้โหลดบันทึก', + closeLabel: 'ปิดศูนย์บัญชาการ', + searchPlaceholder: 'ค้นหาเซสชัน มุมมอง และการดำเนินการ', + statSessions: 'เซสชัน', + statApiCalls: 'การเรียก API', + statTokens: 'โทเค็นเข้า/ออก', + statEstCost: 'ค่าใช้จ่ายโดยประมาณ', + cost => `จริง ${cost}`, + loadingUsage: 'กำลังโหลดการใช้งาน...', + count => `ไม่มีการใช้งานใน ${count} วันที่ผ่านมา`, + retry: 'ลองใหม่', + tokenInput: 'เข้า', + tokenOutput: 'ออก', + noDailyActivity: 'ไม่มีกิจกรรมรายวัน', + topModels: 'โมเดลยอดนิยม', + topSkills: 'ทักษะยอดนิยม', + actionsLabel: 'การดำเนินการ', + systemRunning: 'กำลังทำงาน', + systemDone: 'เสร็จสิ้น', + systemFailed: 'ล้มเหลว', + open: 'เปิดศูนย์บัญชาการ', + close: 'ปิดศูนย์บัญชาการ', + }, + common: { + loading: 'กำลังโหลด…', + save: 'บันทึก', + cancel: 'ยกเลิก', + close: 'ปิด', + delete: 'ลบ', + confirm: 'ยืนยัน', + search: 'ค้นหา…', + clearSearch: 'ล้างการค้นหา', + copy: 'คัดลอก', + refresh: 'รีเฟรช', + moreActions: 'การดำเนินการเพิ่มเติม', + tryAgain: 'ลองอีกครั้ง', + }, + onboarding: { + welcome: 'ยินดีต้อนรับสู่ Hermes', + getStarted: 'เริ่มต้นด้วยการเลือกผู้ให้บริการและโมเดล', + skip: 'ข้าม', + continue: 'ดำเนินการต่อ', + finish: 'เสร็จสิ้น', + setupTitle: 'มาตั้งค่า Hermes Agent ให้คุณกัน', + setupDesc: 'เชื่อมต่อผู้ให้บริการโมเดลเพื่อเริ่มแชท ตัวเลือกส่วนใหญ่ใช้เพียงคลิกเดียว', + preparing: 'กำลังเริ่ม Hermes…', + installing: 'Hermes กำลังติดตั้งให้เสร็จสิ้น โดยปกติใช้เวลาไม่ถึงหนึ่งนาทีในการรันครั้งแรก', + lookingUp: 'กำลังค้นหาผู้ให้บริการ...', + otherProviders: 'ผู้ให้บริการอื่นๆ', + collapse: 'ย่อ', + iHaveKey: 'ฉันมีคีย์ API', + recommended: 'แนะนำ', + connected: 'เชื่อมต่อแล้ว', + backToSignIn: 'กลับไปที่การลงชื่อเข้าใช้', + getKey: 'รับคีย์', + pasteKey: 'วางคีย์ API', + connect: 'เชื่อมต่อ', + connecting: 'กำลังเชื่อมต่อ', + copyCode: 'คัดลอก', + startSignIn: 'กำลังเริ่มการลงชื่อเข้าใช้สำหรับ', + verifyingCode: 'กำลังตรวจสอบรหัสของคุณกับ', + pickingModel: 'เชื่อมต่อแล้ว กำลังเลือกโมเดลเริ่มต้น...', + signInFailed: 'การลงชื่อเข้าใช้ล้มเหลว ลองอีกครั้ง', + pickDifferent: 'เลือกผู้ให้บริการอื่น', + signInTitle: 'ลงชื่อเข้าใช้ด้วย', + step1: 'เราเปิด', + step1End: 'ในเบราว์เซอร์ของคุณ', + step2: 'อนุญาต Hermes ที่นั่น', + step3: 'คัดลอกรหัสการอนุญาตและวางด้านล่าง', + pasteCode: 'วางรหัสการอนุญาต', + reopenAuth: 'เปิดหน้าการอนุญาตอีกครั้ง', + cancel: 'ยกเลิก', + browserDesc: 'เราเปิด', + browserDescEnd: 'ในเบราว์เซอร์ของคุณ อนุญาต Hermes ที่นั่นแล้วคุณจะเชื่อมต่อโดยอัตโนมัติ — ไม่ต้องคัดลอกหรือวางอะไร', + waitingAuth: 'กำลังรอให้คุณอนุญาต...', + reopenSignIn: 'เปิดหน้าลงชื่อเข้าใช้อีกครั้ง', + externalDesc: 'ลงชื่อเข้าใช้ผ่าน CLI ของตัวเอง รันคำสั่งนี้ในเทอร์มินัล แล้วกลับมาและเลือก "ฉันลงชื่อเข้าใช้แล้ว":', + iSignedIn: 'ฉันลงชื่อเข้าใช้แล้ว', + enterCode: 'เราเปิด', + enterCodeEnd: 'ในเบราว์เซอร์ของคุณ ป้อนรหัสนี้ที่นั่น:', + reopenVerification: 'เปิดหน้าการยืนยันอีกครั้ง', + defaultModel: 'โมเดลเริ่มต้น', + freeTier: 'ระดับฟรี', + pro: 'Pro', + change: 'เปลี่ยน', + startChatting: 'เริ่มแชท', + docs: 'เอกสาร', + close: 'ปิด', + savingError: 'ไม่สามารถบันทึกข้อมูลรับรอง', + openRouter: 'OpenRouter', + }, + file: { + browser: 'เรียกดูไฟล์', + noFiles: 'ยังไม่มีไฟล์', + }, + terminal: { + title: 'เทอร์มินัล', + newTab: 'แท็บใหม่', + closeTab: 'ปิดแท็บ', + }, + skills: { + title: 'ทักษะ', + search: 'ค้นหาทักษะ…', + noResults: 'ไม่พบทักษะ', + tools: 'ทักษะและเครื่องมือ', + }, + profiles: { + title: 'โปรไฟล์', + noProfilesYet: 'ยังไม่มีโปรไฟล์', + selectProfile: 'เลือกโปรไฟล์เพื่อดูรายละเอียด', + deleteProfile: 'ลบโปรไฟล์?', + soulMd: 'SOUL.md', + unsavedChanges: 'การเปลี่ยนแปลงที่ยังไม่ได้บันทึก', + newProfile: 'โปรไฟล์ใหม่', + cloneFromDefault: 'โคลนจากค่าเริ่มต้น', + renameProfile: 'เปลี่ยนชื่อโปรไฟล์', + }, + cron: { + title: 'งาน Cron', + noJobs: 'ไม่มีงานที่กำหนดเวลา', + deleteCronJob: 'ลบงาน cron?', + optional: 'ไม่บังคับ', + label: 'Cron', + open: 'เปิดงาน cron', + }, + messaging: { + title: 'การส่งข้อความ', + recommended: 'แนะนำ', + recommendedTelegram: 'แนะนำ ID ตัวเลขที่คั่นด้วยจุลภาคจาก @userinfobot หากไม่มีสิ่งนี้ ใครก็ตามสามารถส่งข้อความตรงถึงบอทของคุณได้', + recommendedDiscord: 'แนะนำ ID ผู้ใช้ Discord ที่คั่นด้วยจุลภาค', + recommendedSlack: 'แนะนำ ID ผู้ใช้ Slack ที่คั่นด้วยจุลภาค', + recommendedMattermost: 'แนะนำ ID ผู้ใช้ Mattermost ที่คั่นด้วยจุลภาค', + recommendedMatrix: 'แนะนำ ID ผู้ใช้ที่คั่นด้วยจุลภาคในรูปแบบ @user:server', + recommendedSignal: 'แนะนำตัวระบุ Signal ที่คั่นด้วยจุลภาค', + recommendedWhatsApp: 'แนะนำหมายเลขโทรศัพท์หรือ ID WhatsApp ที่คั่นด้วยจุลภาค', + gatewayStopped: 'เกตเวย์การส่งข้อความหยุดทำงาน', + getCredentials: 'รับข้อมูลรับรองของคุณ', + required: 'จำเป็น', + unsavedChanges: 'การเปลี่ยนแปลงที่ยังไม่ได้บันทึก', + saved: 'บันทึกแล้ว', + }, + about: { + version: 'เวอร์ชัน', + checkUpdates: 'ตรวจสอบอัปเดต', + upToDate: 'Hermes เป็นเวอร์ชันล่าสุดแล้ว', + updateAvailable: 'มีอัปเดตพร้อมใช้งาน', + license: 'สัญญาอนุญาต MIT', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'ไม่สามารถแสดงเวอร์ชันได้', + updates: 'อัปเดต', + checkNow: 'ตรวจสอบตอนนี้', + checking: 'กำลังตรวจสอบ…', + seeWhatsNew: 'ดูว่ามีอะไรใหม่', + releaseNotes: 'บันทึกประจำรุ่น', + autoUpdates: 'อัปเดตอัตโนมัติ', + autoUpdatesDesc: 'Hermes ตรวจสอบอัปเดตโดยอัตโนมัติในพื้นหลังและแจ้งให้คุณทราบเมื่อพร้อมใช้งาน', + selfUpdateUnsupported: 'รุ่นนี้ไม่สามารถอัปเดตตัวเองจากภายในแอปได้', + cannotReachServer: 'ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์อัปเดตได้', + installingUpdate: 'กำลังติดตั้งอัปเดต', + count => `มีอัปเดตใหม่พร้อมใช้งาน (รวม ${count} การเปลี่ยนแปลง)`, + count => `มีอัปเดตใหม่พร้อมใช้งาน (รวม ${count} การเปลี่ยนแปลง)`, + onLatest: 'คุณใช้เวอร์ชันล่าสุดอยู่', + tapCheckNow: 'แตะ "ตรวจสอบตอนนี้" เพื่อค้นหาอัปเดต', + time => `ตรวจสอบล่าสุด ${time}`, + justNow: 'เมื่อสักครู่', + never: 'ไม่เคย', + count => `${count} นาทีที่แล้ว`, + count => `${count} ชั่วโมงที่แล้ว`, + count => `${count} วันที่แล้ว`, + (branch, sha) => `สาขา ${branch} · คอมมิต ${sha}`, + }, + keys: { + title: 'คีย์ API', + noKeys: 'ยังไม่ได้กำหนดค่าคีย์ API', + addKey: 'เพิ่มคีย์', + loading: 'กำลังโหลดคีย์ API และข้อมูลรับรอง…', + docs: 'เอกสาร', + openDocs: 'เปิดเอกสารผู้ให้บริการ', + hideValue: 'ซ่อนค่า', + revealValue: 'แสดงค่า', + set: 'ตั้งค่าแล้ว', + notSet: 'ยังไม่ได้ตั้งค่า', + replace: 'แทนที่', + replaceValue: 'แทนที่ค่าปัจจุบัน', + enterValue: 'ป้อนค่า', + saving: 'กำลังบันทึก', + save: 'บันทึก', + cancel: 'ยกเลิก', + clearValue: 'ล้างค่า', + (count, total) => `กำหนดค่าแล้ว ${count} จาก ${total}`, + (count, total) => `ตั้งค่าแล้ว ${count} จาก ${total}`, + count => `ตั้งค่าแล้ว ${count} รายการ`, + count => `${count} คีย์`, + otherProviders: 'ผู้ให้บริการอื่นๆ', + categoryTools: 'เครื่องมือ', + categoryMessaging: 'การส่งข้อความ', + categorySettings: 'การตั้งค่า', + openProviderDocs: 'เปิดเอกสารผู้ให้บริการ', + showAdvanced: 'แสดงขั้นสูง', + loadFailed: 'การโหลดคีย์ API ล้มเหลว', + credentialSaved: 'บันทึกข้อมูลรับรองแล้ว', + credentialRemoved: 'ลบข้อมูลรับรองแล้ว', + }, + config: { + title: 'การกำหนดค่า', + edit: 'แก้ไขการกำหนดค่า', + reload: 'โหลดการกำหนดค่าใหม่', + notSet: 'ยังไม่ได้ตั้งค่า', + commaSeparated: 'ค่าที่คั่นด้วยจุลภาค', + on: 'เปิด', + off: 'ปิด', + none: 'ไม่มี', + emptyOption: '(ไม่มี)', + loading: 'กำลังโหลดการกำหนดค่า Hermes…', + noMatching: 'ไม่พบการตั้งค่าที่ตรงกัน', + noMatchingDesc: 'ลองใช้คำค้นหาอื่นหรือเลือกส่วนอื่น', + count => `${count} ผลลัพธ์`, + count => `${count} ผลลัพธ์`, + saving: 'กำลังบันทึก…', + label: { + defaultModel: 'โมเดลเริ่มต้น', + contextWindow: 'หน้าต่างบริบท', + fallbackModels: 'โมเดลสำรอง', + enabledToolsets: 'ชุดเครื่องมือที่เปิดใช้งาน', + timezone: 'เขตเวลา', + personality: 'บุคลิกภาพ', + reasoningBlocks: 'บล็อกการให้เหตุผล', + maxAgentSteps: 'ขั้นตอนเอเจนต์สูงสุด', + imageAttachments: 'การแนบรูปภาพ', + workingDirectory: 'ไดเรกทอรีทำงาน', + executionBackend: 'แบ็กเอนด์การดำเนินการ', + commandTimeout: 'หมดเวลาคำสั่ง', + persistentShell: 'เชลล์ถาวร', + envPassthrough: 'การส่งผ่านสภาพแวดล้อม', + fileReadLimit: 'ขีดจำกัดการอ่านไฟล์', + terminalOutputLimit: 'ขีดจำกัดผลลัพธ์เทอร์มินัล', + filePageLimit: 'ขีดจำกัดหน้าไฟล์', + lineLengthLimit: 'ขีดจำกัดความยาวบรรทัด', + codeExecutionMode: 'โหมดการดำเนินการโค้ด', + approvalMode: 'โหมดการอนุมัติ', + approvalTimeout: 'หมดเวลาการอนุมัติ', + confirmMcpReloads: 'ยืนยันการโหลด MCP ใหม่', + commandAllowlist: 'รายการอนุญาตคำสั่ง', + redactSecrets: 'ปกปิดความลับ', + allowPrivateUrls: 'อนุญาต URL ส่วนตัว', + browserPrivateUrls: 'URL ส่วนตัวของเบราว์เซอร์', + localBrowserForPrivateUrls: 'เบราว์เซอร์ท้องถิ่นสำหรับ URL ส่วนตัว', + fileCheckpoints: 'จุดตรวจไฟล์', + checkpointLimit: 'ขีดจำกัดจุดตรวจ', + voiceShortcut: 'ทางลัดเสียง', + maxRecordingLength: 'ความยาวการบันทึกสูงสุด', + readResponsesAloud: 'อ่านการตอบกลับออกเสียง', + speechToText: 'เสียงเป็นข้อความ', + speechToTextProvider: 'ผู้ให้บริการเสียงเป็นข้อความ', + localTranscriptionModel: 'โมเดลการถอดความท้องถิ่น', + transcriptionLanguage: 'ภาษาการถอดความ', + elevenlabsSttModel: 'โมเดล STT ของ ElevenLabs', + elevenlabsLanguage: 'ภาษา ElevenLabs', + tagAudioEvents: 'แท็กเหตุการณ์เสียง', + speakerDiarization: 'การแยกผู้พูด', + textToSpeechProvider: 'ผู้ให้บริการข้อความเป็นเสียง', + edgeVoice: 'เสียง Edge', + openaiTtsModel: 'โมเดล TTS ของ OpenAI', + openaiVoice: 'เสียง OpenAI', + elevenlabsVoice: 'เสียง ElevenLabs', + elevenlabsModel: 'โมเดล ElevenLabs', + persistentMemory: 'หน่วยความจำถาวร', + userProfile: 'โปรไฟล์ผู้ใช้', + memoryBudget: 'งบประมาณหน่วยความจำ', + profileBudget: 'งบประมาณโปรไฟล์', + memoryProvider: 'ผู้ให้บริการหน่วยความจำ', + contextEngine: 'เอ็นจินบริบท', + autoCompression: 'การบีบอัดอัตโนมัติ', + compressionThreshold: 'เกณฑ์การบีบอัด', + compressionTarget: 'เป้าหมายการบีบอัด', + protectedRecentMessages: 'ข้อความล่าสุดที่ได้รับการป้องกัน', + apiRetries: 'การลอง API ใหม่', + serviceTier: 'ระดับบริการ', + toolUseEnforcement: 'การบังคับใช้เครื่องมือ', + subagentModel: 'โมเดลซับเอเจนต์', + subagentProvider: 'ผู้ให้บริการซับเอเจนต์', + subagentTurnLimit: 'ขีดจำกัดเทิร์นซับเอเจนต์', + parallelSubagents: 'ซับเอเจนต์คู่ขนาน', + subagentTimeout: 'หมดเวลาซับเอเจนต์', + subagentReasoningEffort: 'ความพยายามในการให้เหตุผลของซับเอเจนต์', + }, + desc: { + defaultModel: 'ใช้สำหรับแชทใหม่เว้นแต่คุณเลือกโมเดลอื่นในตัวเขียน', + contextWindow: 'ปล่อยเป็น 0 เพื่อใช้หน้าต่างบริบทที่ตรวจพบของโมเดลที่เลือก', + fallbackModels: 'รายการผู้ให้บริการสำรอง:โมเดลที่จะลองหากโมเดลเริ่มต้นล้มเหลว', + personality: 'สไตล์ผู้ช่วยเริ่มต้นสำหรับเซสชันใหม่', + timezone: 'ใช้เมื่อ Hermes ต้องการบริบทเวลาท้องถิ่น เว้นว่างไว้เพื่อใช้เขตเวลาของระบบ', + reasoningBlocks: 'แสดงส่วนการให้เหตุผลเมื่อแบ็กเอนด์ให้มา', + imageAttachments: 'ควบคุมวิธีการส่งการแนบรูปภาพไปยังโมเดล', + workingDirectory: 'โฟลเดอร์โปรเจกต์เริ่มต้นสำหรับงานเครื่องมือและเทอร์มินัล', + codeExecutionMode: 'ความเข้มงวดในการกำหนดขอบเขตการดำเนินการโค้ดกับโปรเจกต์ปัจจุบัน', + persistentShell: 'เก็บสถานะเชลล์ระหว่างคำสั่งเมื่อแบ็กเอนด์รองรับ', + envPassthrough: 'ตัวแปรสภาพแวดล้อมที่จะส่งผ่านไปยังการดำเนินการเครื่องมือ', + fileReadLimit: 'จำนวนอักขระสูงสุดที่ Hermes สามารถอ่านจากคำขอไฟล์หนึ่งครั้ง', + approvalMode: 'วิธีที่ Hermes จัดการคำสั่งที่ต้องการการอนุมัติอย่างชัดแจ้ง', + approvalTimeout: 'ระยะเวลาที่พร้อมต์การอนุมัติรอก่อนหมดเวลา', + redactSecrets: 'ซ่อนความลับที่ตรวจพบจากเนื้อหาที่โมเดลมองเห็นเมื่อเป็นไปได้', + fileCheckpoints: 'สร้างสแนปชอตย้อนกลับก่อนการแก้ไขไฟล์', + persistentMemory: 'บันทึกหน่วยความจำที่คงทนซึ่งสามารถช่วยเซสชันในอนาคต', + userProfile: 'รักษาโปรไฟล์ขนาดกะทัดรัดของการตั้งค่าผู้ใช้', + contextEngine: 'กลยุทธ์สำหรับจัดการการสนทนาที่ยาวใกล้ขีดจำกัดบริบท', + autoCompression: 'สรุปบริบทเก่าเมื่อการสนทนามีขนาดใหญ่', + readResponsesAloud: 'พูดการตอบกลับของผู้ช่วยโดยอัตโนมัติ', + speechToText: 'เปิดใช้งานการถอดเสียงแบบท้องถิ่นหรือผ่านผู้ให้บริการ', + elevenlabsLanguage: 'รหัสภาษา ISO-639-3 ที่เป็นทางเลือก เว้นว่างไว้เพื่อให้ ElevenLabs ตรวจจับอัตโนมัติ', + maxAgentSteps: 'ขอบเขตสูงสุดสำหรับเทิร์นการเรียกใช้เครื่องมือก่อนที่ Hermes จะหยุดการรัน', + }, + }, + gateway: { + title: 'เกตเวย์', + start: 'เริ่มเกตเวย์', + stop: 'หยุดเกตเวย์', + restart: 'รีสตาร์ทเกตเวย์', + running: 'กำลังทำงาน', + stopped: 'หยุดแล้ว', + loading: 'กำลังโหลดการตั้งค่าเกตเวย์…', + unavailable: 'ไม่สามารถเข้าถึงการตั้งค่าเกตเวย์', + unavailableDesc: 'บริดจ์ IPC ของเดสก์ท็อปไม่เปิดเผยการตั้งค่าเกตเวย์', + connection: 'การเชื่อมต่อเกตเวย์', + envOverride: 'การแทนที่ด้วยตัวแปรสภาพแวดล้อม', + desc: 'Hermes Desktop เริ่มเกตเวย์ท้องถิ่นของตัวเองตามค่าเริ่มต้น ใช้เกตเวย์ระยะไกลเมื่อคุณต้องการให้แอปนี้ควบคุมแบ็กเอนด์ Hermes ที่ทำงานอยู่แล้วบนเครื่องอื่นหรือหลังพร็อกซีที่เชื่อถือได้', + envOverrideTitle: 'ตัวแปรสภาพแวดล้อมกำลังควบคุมเซสชันเดสก์ท็อปนี้', + (urlVar, tokenVar) => `ยกเลิกการตั้งค่า ${urlVar} และ ${tokenVar} เพื่อใช้การตั้งค่าที่บันทึกไว้ด้านล่าง`, + localTitle: 'เกตเวย์ท้องถิ่น', + localDesc: 'เริ่มแบ็กเอนด์ Hermes ส่วนตัวบน localhost นี่คือค่าเริ่มต้นและทำงานแบบออฟไลน์ได้', + remoteTitle: 'เกตเวย์ระยะไกล', + remoteDesc: 'เชื่อมต่อเชลล์เดสก์ท็อปนี้กับแบ็กเอนด์ Hermes ระยะไกลโดยใช้โทเค็นเซสชัน', + remoteUrl: 'URL ระยะไกล', + remoteUrlDesc: 'URL ฐานสำหรับแบ็กเอนด์แดชบอร์ดระยะไกล รองรับคำนำหน้าเส้นทาง เช่น /hermes', + remoteUrlPlaceholder: 'https://gateway.example.com/hermes', + sessionToken: 'โทเค็นเซสชัน', + sessionTokenDesc: 'โทเค็นเซสชันแดชบอร์ดที่ใช้สำหรับการเข้าถึง REST และ WebSocket เว้นว่างไว้เพื่อเก็บโทเค็นที่บันทึกไว้', + sessionTokenPlaceholder: 'วางโทเค็นเซสชัน', + preview => `โทเค็นที่มีอยู่ ${preview}`, + tokenSaved: 'บันทึกแล้ว', + testRemote: 'ทดสอบระยะไกล', + saveRestart: 'บันทึกสำหรับการรีสตาร์ทครั้งถัดไป', + saveReconnect: 'บันทึกและเชื่อมต่อใหม่', + diagnostics: 'การวินิจฉัย', + diagnosticsDesc: 'แสดง desktop.log ในตัวจัดการไฟล์ของคุณ — มีประโยชน์เมื่อเกตเวย์ไม่สามารถเริ่มทำงานได้', + openLogs: 'เปิดบันทึก', + connected: 'เชื่อมต่อแล้ว', + connecting: 'กำลังเชื่อมต่อ', + disconnected: 'ตัดการเชื่อมต่อแล้ว', + inferenceReady: 'การอนุมานพร้อมแล้ว', + inferenceNotReady: 'การอนุมานยังไม่พร้อม', + checkingInference: 'กำลังตรวจสอบการอนุมาน', + openSystemPanel: 'เปิดแผงระบบ', + connectionLabel: 'การเชื่อมต่อ:', + recentActivity: 'กิจกรรมล่าสุด', + viewAllLogs: 'ดูบันทึกทั้งหมด →', + messagingPlatforms: 'แพลตฟอร์มการส่งข้อความ', + label: 'เกตเวย์', + inferenceStatus: 'สถานะการอนุมานเกตเวย์', + enterUrlFirst: 'ป้อน URL ระยะไกลและโทเค็นเซสชันก่อนสลับ', + enterUrlFirstTest: 'ป้อน URL ระยะไกลและโทเค็นเซสชันก่อนทดสอบ', + }, + sessions: { + title: 'เซสชัน', + search: 'ค้นหาเซสชัน…', + noResults: 'ไม่พบเซสชัน', + export: 'ส่งออก', + delete: 'ลบเซสชัน', + loading: 'กำลังโหลด…', + defaultProjectDir: 'ไดเรกทอรีโปรเจกต์เริ่มต้น', + defaultProjectDirDesc: 'เซสชันใหม่จะเริ่มในโฟลเดอร์นี้เว้นแต่คุณจะเลือกอื่น ปล่อยว่างไว้เพื่อใช้ไดเรกทอรีบ้านของคุณ', + fallback => `ค่าเริ่มต้นคือ ${fallback}`, + notSet: 'ยังไม่ได้ตั้งค่า', + change: 'เปลี่ยน', + choose: 'เลือก', + clear: 'ล้าง', + archivedTitle: 'เซสชันที่เก็บถาวร', + archivedDesc: 'แชทที่เก็บถาวรถูกซ่อนจากแถบด้านข้างแต่เก็บข้อความทั้งหมดไว้ Ctrl/⌘-คลิกแชทในแถบด้านข้างเพื่อเก็บถาวร', + nothingArchived: 'ไม่มีรายการที่เก็บถาวร', + noSearchMatch: 'ไม่มีแชทที่เก็บถาวรตรงกับการค้นหาของคุณ', + archiveToHide: 'เก็บถาวรแชทเพื่อซ่อนไว้ที่นี่', + unarchive: 'ยกเลิกการเก็บถาวร', + deletePermanently: 'ลบถาวร', + count => `${count} ข้อความ`, + new: 'เซสชันใหม่', + running: 'เซสชันกำลังทำงาน', + actions: 'การดำเนินการเซสชัน', + reorder: 'จัดเรียงใหม่', + pin: 'ปักหมุด', + unpin: 'ถอนหมุด', + copyId: 'คัดลอก ID', + rename: 'เปลี่ยนชื่อ', + archive: 'เก็บถาวร', + renameDialog: 'เปลี่ยนชื่อเซสชัน', + renameDesc: 'ตั้งชื่อแชทนี้ให้น่าจดจำ เว้นว่างไว้เพื่อล้าง', + untitled: 'เซสชันไม่มีชื่อ', + renamed: 'เปลี่ยนชื่อแล้ว', + renameFailed: 'การเปลี่ยนชื่อล้มเหลว', + pinned: 'ปักหมุดแล้ว', + results: 'ผลลัพธ์', + allPinned: 'ทุกรายการที่นี่ถูกปักหมุด ถอนหมุดแชทเพื่อแสดงในรายการล่าสุด', + pinHint: 'Shift-คลิกแชทเพื่อปักหมุด · ลากเพื่อจัดเรียงใหม่', + loadMore: 'โหลดเพิ่มเติม', + noWorkspace: 'ไม่มีพื้นที่ทำงาน', + ungroup: 'แสดงเซสชันเป็นรายการเดียว', + groupByWorkspace: 'จัดกลุ่มเซสชันตามพื้นที่ทำงาน', + loadStep: 'โหลด', + moreLabel: 'เพิ่มเติม', + nothingArchivedTitle: 'ไม่มีรายการที่เก็บถาวร', + deletePermanentlyTitle: 'ลบถาวร', + defaultProjectDirTitle: 'ไดเรกทอรีโปรเจกต์เริ่มต้น', + loadingArchived: 'กำลังโหลดเซสชันที่เก็บถาวร…', + restored: 'กู้คืนแล้ว', + projectDirUpdated: 'อัปเดตไดเรกทอรีโปรเจกต์เริ่มต้นแล้ว', + loadFailed: 'ไม่สามารถโหลดเซสชันที่เก็บถาวร', + unarchiveFailed: 'การยกเลิกการเก็บถาวรล้มเหลว', + deleteFailed: 'การลบล้มเหลว', + archiveHint: 'เก็บถาวรแชทเพื่อซ่อนไว้ที่นี่', + updateDirFailed: 'ไม่สามารถอัปเดตไดเรกทอรีเริ่มต้น', + clearDirFailed: 'ไม่สามารถล้างไดเรกทอรีเริ่มต้น', + }, + mcp: { + title: 'เซิร์ฟเวอร์ MCP', + addServer: 'เพิ่มเซิร์ฟเวอร์', + noServers: 'ยังไม่ได้กำหนดค่าเซิร์ฟเวอร์ MCP', + loading: 'กำลังโหลดเซิร์ฟเวอร์ MCP…', + servers: 'เซิร์ฟเวอร์ MCP', + count => `กำหนดค่าแล้ว ${count} รายการ`, + newServer: 'เซิร์ฟเวอร์ใหม่', + reloadMCP: 'โหลด MCP ใหม่', + reloading: 'กำลังโหลดใหม่...', + noServersDesc: 'เพิ่มเซิร์ฟเวอร์ stdio หรือ HTTP เพื่อแสดงเครื่องมือ MCP', + name: 'ชื่อ', + namePlaceholder: 'filesystem', + serverJSON: 'JSON ของเซิร์ฟเวอร์', + editServer: 'แก้ไขเซิร์ฟเวอร์', + saveServer: 'บันทึกเซิร์ฟเวอร์', + saving: 'กำลังบันทึก...', + remove: 'ลบออก', + disabled: 'ปิดใช้งาน', + nameRequired: 'ต้องระบุชื่อ', + nameRequiredDesc: 'กำหนดคีย์การกำหนดค่าให้กับเซิร์ฟเวอร์ MCP นี้', + invalidJson: 'การกำหนดค่าเซิร์ฟเวอร์ต้องเป็นออบเจกต์ JSON', + invalidJsonDesc: 'JSON MCP ไม่ถูกต้อง', + saved: 'บันทึกเซิร์ฟเวอร์ MCP แล้ว', + name => `${name} มีผลหลังจากการโหลด MCP ใหม่`, + saveFailed: 'การบันทึกล้มเหลว', + removeFailed: 'การลบล้มเหลว', + gatewayUnavailable: 'เกตเวย์ไม่พร้อมใช้งาน', + gatewayUnavailableDesc: 'เชื่อมต่อเกตเวย์ใหม่ก่อนโหลด MCP ใหม่', + reloadedTitle: 'โหลดเครื่องมือ MCP ใหม่แล้ว', + reloadedDesc: 'สคีมาเครื่องมือใหม่มีผลกับเทิร์นใหม่', + reloadFailed: 'การโหลด MCP ใหม่ล้มเหลว', + giveConfigKey: 'กำหนดคีย์การกำหนดค่าให้กับเซิร์ฟเวอร์ MCP นี้', + reconnectGateway: 'เชื่อมต่อเกตเวย์ใหม่ก่อนโหลด MCP ใหม่', + newSchemas: 'สคีมาเครื่องมือใหม่มีผลกับเทิร์นใหม่', + loadingServers: 'กำลังโหลดเซิร์ฟเวอร์ MCP...', + serverName: 'ชื่อ', + serversTitle: 'เซิร์ฟเวอร์ MCP', + noServersTitle: 'ไม่มีเซิร์ฟเวอร์ MCP', + failedToLoad: 'การโหลดการกำหนดค่า MCP ล้มเหลว', + invalidJsonShort: 'JSON MCP ไม่ถูกต้อง', + serverSaved: 'บันทึกเซิร์ฟเวอร์ MCP แล้ว', + toolsReloaded: 'โหลดเครื่องมือ MCP ใหม่แล้ว', + emptyDesc: 'เพิ่มเซิร์ฟเวอร์ stdio หรือ HTTP เพื่อแสดงเครื่องมือ MCP', + }, + tools: { + title: 'เครื่องมือและทักษะ', + noTools: 'ไม่มีเครื่องมือที่พร้อมใช้งาน', + }, + nav: { + home: 'หน้าแรก', + chat: 'แชท', + settings: 'การตั้งค่า', + files: 'ไฟล์', + terminal: 'เทอร์มินัล', + }, + header: { + search: 'ค้นหาหรือพิมพ์คำสั่ง…', + }, + model: { + auxTask: { + vision: 'การมองเห็น', + visionHint: 'การวิเคราะห์ภาพ', + web_extract: 'สกัดเว็บ', + web_extractHint: 'การสรุปหน้าเว็บ', + compression: 'การบีบอัด', + compressionHint: 'การกระชับบริบท', + session_search: 'ค้นหาเซสชัน', + session_searchHint: 'คำค้นหาการเรียกคืน', + skills_hub: 'ศูนย์รวมทักษะ', + skills_hubHint: 'ค้นหาทักษะ', + approval: 'การอนุมัติ', + approvalHint: 'อนุมัติอัตโนมัติอัจฉริยะ', + mcp: 'MCP', + mcpHint: 'การจัดเส้นทางเครื่องมือ MCP', + title_generation: 'สร้างชื่อเรื่อง', + title_generationHint: 'ชื่อเซสชัน', + curator: 'ผู้คัดสรร', + curatorHint: 'การตรวจสอบการใช้ทักษะ', + }, + mainModel: 'โมเดลหลัก', + mainDesc: 'ใช้กับเซสชันใหม่ ใช้ตัวเลือกโมเดลในตัวเขียนเพื่อสลับแชทที่ใช้งานอยู่', + providerPlaceholder: 'ผู้ให้บริการ', + modelPlaceholder: 'โมเดล', + apply: 'ใช้', + applying: 'กำลังใช้…', + auxiliaryModels: 'โมเดลเสริม', + auxiliaryDesc: 'งานผู้ช่วยทำงานบนโมเดลหลักตามค่าเริ่มต้น กำหนดโมเดลเฉพาะให้กับงานใดๆ เพื่อแทนที่', + resetAllToMain: 'รีเซ็ตทั้งหมดเป็นหลัก', + setToMain: 'ตั้งเป็นหลัก', + change: 'เปลี่ยน', + cancel: 'ยกเลิก', + autoUseMain: 'อัตโนมัติ · ใช้โมเดลหลัก', + providerDefault: '(ค่าเริ่มต้นของผู้ให้บริการ)', + loading: 'กำลังโหลดการกำหนดค่าโมเดล…', + options: 'ตัวเลือก', + thinking: 'การคิด', + fast: 'เร็ว', + effort: 'ความพยายาม', + noOptions: 'ไม่มีตัวเลือกสำหรับโมเดลนี้', + optionUpdateFailed: 'การอัปเดตตัวเลือกโมเดลล้มเหลว', + fastModeUpdateFailed: 'การอัปเดตโหมดเร็วล้มเหลว', + effortMinimal: 'น้อยที่สุด', + effortLow: 'ต่ำ', + effortMedium: 'ปานกลาง', + effortHigh: 'สูง', + effortMax: 'สูงสุด', + switch: 'สลับโมเดล', + unknown: '(ไม่ทราบ)', + filterPlaceholder: 'กรองผู้ให้บริการและโมเดล...', + persistGlobal: 'คงอยู่ทั่วโลก', + persistGlobalSession: 'คงอยู่ทั่วโลก (มิฉะนั้นเฉพาะเซสชันนี้)', + couldNotLoad: 'ไม่สามารถโหลดโมเดล', + proLockedDesc: 'โมเดล Pro ต้องการการสมัครสมาชิก Nous แบบชำระเงิน', + priceTooltip: 'ราคาอินพุต / เอาต์พุตต่อล้านโทเค็น', + freePrice: 'ฟรี', + currentLabel: 'ปัจจุบัน:', + addProviderBtn: 'เพิ่มผู้ให้บริการ', + }, + updates: { + checking: 'กำลังตรวจสอบอัปเดต…', + available: 'มีอัปเดตพร้อมใช้งาน', + downloading: 'กำลังดาวน์โหลด…', + installing: 'กำลังติดตั้ง…', + restart: 'รีสตาร์ทเพื่ออัปเดต', + stageGettingReady: 'กำลังเตรียมพร้อม…', + stageDownloading: 'กำลังดาวน์โหลด…', + stageAlmostThere: 'เกือบถึงแล้ว…', + stageFinishingUp: 'กำลังดำเนินการให้เสร็จ…', + stageRestarting: 'กำลังรีสตาร์ท Hermes…', + stageManual: 'อัปเดตจากเทอร์มินัลของคุณ', + stageError: 'การอัปเดตหยุดชั่วคราว', + updatingHermes: 'กำลังอัปเดต Hermes…', + lookingForUpdates: 'กำลังค้นหาอัปเดต…', + couldntCheck: 'ไม่สามารถตรวจสอบอัปเดตได้', + updateNotAvailable: 'ไม่มีอัปเดต', + checkConnection: 'ตรวจสอบการเชื่อมต่อของคุณแล้วลองอีกครั้ง', + onLatest: 'คุณใช้เวอร์ชันล่าสุดอยู่', + allSet: 'คุณพร้อมแล้ว', + newUpdateAvailable: 'มีอัปเดตใหม่พร้อมใช้งาน', + readyToInstall: 'Hermes เวอร์ชันใหม่พร้อมติดตั้งแล้ว', + updateNow: 'อัปเดตตอนนี้', + maybeLater: 'ไว้ทีหลัง', + count => `รวมการเปลี่ยนแปลงอีก + ${count} รายการ`, + count => `รวมการเปลี่ยนแปลงอีก + ${count} รายการ`, + updateFromTerminal: 'อัปเดตจากเทอร์มินัลของคุณ', + terminalDesc: 'คุณติดตั้ง Hermes จากบรรทัดคำสั่ง ดังนั้นการอัปเดตก็ทำงานที่นั่นด้วย วางสิ่งนี้ในเทอร์มินัลของคุณ:', + copied: 'คัดลอกแล้ว', + copy: 'คัดลอก', + pickupNewVersion: 'Hermes จะรับเวอร์ชันใหม่ในครั้งถัดไปที่คุณเปิด', + done: 'เสร็จสิ้น', + updaterDesc: 'ตัวอัปเดต Hermes จะ接管ในหน้าต่างของตัวเองและเปิด Hermes อีกครั้งเมื่อเสร็จสิ้น', + closeToApply: 'Hermes จะปิดเพื่อใช้การอัปเดต', + updateDidntFinish: 'การอัปเดตไม่เสร็จสมบูรณ์', + nothingLost: 'ไม่ต้องกังวล — ไม่มีอะไรสูญหาย คุณสามารถลองอีกครั้งตอนนี้', + notNow: 'ไม่ใช่ตอนนี้', + }, + errors: { + generic: 'เกิดข้อผิดพลาดบางอย่าง', + notFound: 'ไม่พบหน้า', + noPermission: 'คุณไม่มีสิทธิ์เข้าถึงรายการนี้', + somethingBroke: 'มีบางอย่างเสียหายในอินเทอร์เฟซ', + viewCrashedDesc: 'มุมมองพบข้อผิดพลาดที่ไม่คาดคิด แชทและการตั้งค่าของคุณปลอดภัย - ลองอีกครั้งหรือโหลดหน้าต่างใหม่', + noProviders: 'ไม่มีผู้ให้บริการที่ตรวจสอบสิทธิ์แล้ว', + }, + tool: { + toolCall: 'การเรียกใช้เครื่องมือ', + result: 'ผลลัพธ์', + error: 'ข้อผิดพลาด', + timeout: 'หมดเวลา', + cancelled: 'ยกเลิกแล้ว', + running: 'กำลังทำงาน', + recovered: 'กู้คืนแล้ว', + done: 'เสร็จสิ้น', + output: 'ผลลัพธ์ของเครื่องมือ', + searchResults: 'ผลการค้นหา', + rawResponse: 'การตอบกลับดิบ', + stdout: 'stdout', + stderr: 'stderr', + copyActivity: 'คัดลอกกิจกรรม', + recoveredAfter: 'กู้คืนหลังจาก 1 ขั้นตอนที่ล้มเหลว', + count => `กู้คืนหลังจาก ${count} ขั้นตอนที่ล้มเหลว`, + oneStepFailed: '1 ขั้นตอนล้มเหลว', + count => `${count} ขั้นตอนล้มเหลว`, + }, + composer: { + startingHermes: 'กำลังเริ่ม Hermes...', + sendFollowUp: 'ส่งข้อความติดตาม', + message: 'ข้อความ', + editingQueued: 'กำลังแก้ไขเทิร์นที่เข้าคิวในตัวเขียน', + attach: 'แนบ', + files: 'ไฟล์…', + folder: 'โฟลเดอร์…', + images: 'รูปภาพ…', + pasteImage: 'วางรูปภาพ', + url: 'URL…', + promptSnippets: 'ตัวอย่างพรอมต์', + promptSnippetsDesc: 'เลือกพรอมต์เริ่มต้นเพื่อวางในตัวเขียน', + voiceStart: 'เริ่มการสนทนาด้วยเสียง', + queue: 'เข้าคิวข้อความ', + speaking: 'กำลังพูด', + transcribing: 'กำลังถอดความ', + muted: 'ปิดเสียง', + listening: 'กำลังฟัง', + unmuteMic: 'เปิดเสียงไมโครโฟน', + muteMic: 'ปิดเสียงไมโครโฟน', + stopListening: 'หยุดฟังและส่ง', + endVoice: 'สิ้นสุดการสนทนาด้วยเสียง', + end: 'สิ้นสุด', + stopDictation: 'หยุดการเขียนตามคำบอก', + transcribingDictation: 'กำลังถอดความการเขียนตามคำบอก', + voiceDictation: 'การเขียนตามคำบอกด้วยเสียง', + addContext: 'เพิ่มบริบท', + }, + models: { + title: 'โมเดล', + search: 'ค้นหาโมเดล', + addProvider: 'เพิ่มผู้ให้บริการ…', + }, + install: { + title: 'Hermes ต้องการการติดตั้งครั้งเดียว', + desc: 'การติดตั้งอัตโนมัติเมื่อเริ่มครั้งแรกไม่พร้อมใช้งานบน', + descEnd: 'ยัง เปิดเทอร์มินัลและรันคำสั่งด้านล่าง แล้วเปิดแอปนี้อีกครั้ง การเปิดครั้งถัดไปจะข้ามขั้นตอนนี้', + installCommand: 'คำสั่งติดตั้ง', + copyCommand: 'คัดลอกคำสั่ง', + viewDocs: 'ดูเอกสารการติดตั้ง', + willInstallTo: 'จะติดตั้งไปที่', + iRanIt: 'ฉันรันแล้ว -- ลองใหม่', + failed: 'การติดตั้งล้มเหลว', + settingUp: 'กำลังตั้งค่า Hermes Agent', + finishingUp: 'กำลังดำเนินการให้เสร็จ', + failedDesc: 'ขั้นตอนการติดตั้งขั้นตอนหนึ่งล้มเหลว บน Windows อาจเกิดขึ้นหากมีอินสแตนซ์ Hermes CLI หรือเดสก์ท็อปอื่นทำงานอยู่ หยุดอินสแตนซ์ Hermes ที่ทำงานอยู่ทั้งหมดแล้วลองใหม่ ตรวจสอบรายละเอียดด้านล่างหรือบันทึกเดสก์ท็อปสำหรับบันทึกฉบับเต็ม', + setupDesc: 'นี่คือการตั้งค่าครั้งเดียว ตัวติดตั้ง Hermes กำลังดาวน์โหลดการพึ่งพาและกำหนดค่าเครื่องของคุณ การเปิดครั้งถัดไปจะข้ามขั้นตอนนี้', + fetchingManifest: 'กำลังดึงข้อมูล manifest ของตัวติดตั้ง...', + error: 'ข้อผิดพลาด', + showOutput: 'แสดงผลลัพธ์ของตัวติดตั้ง', + hideOutput: 'ซ่อนผลลัพธ์ของตัวติดตั้ง', + noOutput: 'ยังไม่มีผลลัพธ์', + cancelInstall: 'ยกเลิกการติดตั้ง', + cancelling: 'กำลังยกเลิก...', + copyOutput: 'คัดลอกผลลัพธ์', + copied: 'คัดลอกแล้ว!', + reloadRetry: 'โหลดใหม่และลองอีกครั้ง', + saveLogs: 'บันทึกฉบับเต็มถูกบันทึกไปที่', + stepsComplete: 'ขั้นตอนเสร็จสมบูรณ์', + nowLabel: 'ตอนนี้', + line: 'บรรทัด', + lines: 'บรรทัด', + }, + previewConsole: { + resizeLabel: 'ปรับขนาดคอนโซลตัวอย่าง', + noMessages: 'ยังไม่มีข้อความคอนโซล', + }, + boot: { + ipcUnavailable: 'บริดจ์ IPC ของเดสก์ท็อปไม่พร้อมใช้งาน', + backendExited: 'กระบวนการพื้นหลัง Hermes ออกระหว่างการเริ่มต้น', + backendStoppedTitle: 'แบ็กเอนด์หยุดทำงาน', + backendStoppedMessage: 'กระบวนการพื้นหลัง Hermes ออก', + startingConnection: 'กำลังเริ่มการเชื่อมต่อเดสก์ท็อป', + connectingGateway: 'กำลังเชื่อมต่อเกตเวย์เดสก์ท็อปสด', + loadingConfig: 'กำลังโหลดการตั้งค่า Hermes', + loadingSessions: 'กำลังโหลดเซสชันล่าสุด', + desktopBootFailed: 'การบูตเดสก์ท็อปล้มเหลว', + couldNotStart: 'Hermes ไม่สามารถเริ่มทำงานได้', + recoveryDesc: 'เกตเวย์พื้นหลังไม่เริ่มทำงาน ลองขั้นตอนการกู้คืนด้านล่าง — ไม่มีสิ่งใดที่นี่ลบแชทหรือการตั้งค่าของคุณ', + retry: 'ลองใหม่', + repairInstall: 'ซ่อมแซมการติดตั้ง', + useLocalGateway: 'ใช้เกตเวย์ท้องถิ่น', + openLogs: 'เปิดบันทึก', + repairHint: 'การซ่อมแซมทำงานตัวติดตั้งอีกครั้งและอาจใช้เวลาสองสามนาทีบนเครื่องใหม่', + showLogs: 'แสดงบันทึกล่าสุด', + hideLogs: 'ซ่อนบันทึกล่าสุด', + }, + urlDialog: { + title: 'แนบ URL', + description: 'Hermes จะดึงหน้าเว็บและรวมเป็นบริบทสำหรับเทิร์นนี้', + placeholder: 'https://example.com/post', + hint: 'รวม URL เต็ม เช่น', + attach: 'แนบ', + }, + titlebar: { + hideSidebar: 'ซ่อนแถบด้านข้าง', + showSidebar: 'แสดงแถบด้านข้าง', + search: 'ค้นหา', + searchTitle: 'ค้นหาเซสชัน มุมมอง และการดำเนินการ', + hideRightSidebar: 'ซ่อนแถบด้านข้างขวา', + showRightSidebar: 'แสดงแถบด้านข้างขวา', + unmuteHaptics: 'เปิดเสียงสัมผัส', + muteHaptics: 'ปิดเสียงสัมผัส', + openSettings: 'เปิดการตั้งค่า', + profiles: 'โปรไฟล์', + profilesDesc: 'สภาพแวดล้อม Hermes ขั้นสูงสำหรับบุคคล การกำหนดค่า ทักษะ และ SOUL.md แยกต่างหาก', + manageProfiles: 'จัดการโปรไฟล์', + language: 'ภาษา', + languageDesc: 'เลือกภาษาแสดงผลสำหรับอินเทอร์เฟซ', + }, + pagination: { + ariaLabel: 'การแบ่งหน้า', + prevAria: 'ไปที่หน้าก่อนหน้า', + prev: 'ก่อนหน้า', + nextAria: 'ไปที่หน้าถัดไป', + next: 'ถัดไป', + }, + bootstrap: { + pending: 'รอดำเนินการ', + running: 'กำลังติดตั้ง', + done: 'เสร็จสิ้น', + skipped: 'ข้ามแล้ว', + failed: 'ล้มเหลว', + }, + sidebar: { + sheetTitle: 'แถบด้านข้าง', + sheetDesc: 'แสดงแถบด้านข้างมือถือ', + toggle: 'สลับแถบด้านข้าง', + }, + clarify: { + hermesIsAsking: 'Hermes กำลังถาม', + loadingQuestion: 'กำลังโหลดคำถาม…', + otherTypeAnswer: 'อื่นๆ (พิมพ์คำตอบของคุณ)', + placeholderAnswer: 'พิมพ์คำตอบของคุณ…', + cmdEnterToSend: '⌘/Ctrl + Enter เพื่อส่ง', + back: 'กลับ', + skip: 'ข้าม', + couldNotSend: 'ไม่สามารถส่งการตอบกลับการชี้แจง', + n => `1–${n} เพื่อเลือก`, + }, + intro: { + fallback1h: 'วันนี้เราจะย้ายอะไร?', + fallback1b: 'ส่งบั๊ก สาขา แผน หรือไอเดียคร่าวๆ ฉันจะตรวจสอบรีโปและเปลี่ยนเป็นขั้นตอนถัดไปที่เป็นรูปธรรม', + fallback2h: 'คุณคิดอะไรอยู่?', + fallback2b: 'นำโค้ด คำถาม หรือส่วนที่ติดขัดมา ฉันจะอ่านสถานการณ์ก่อนทำการเปลี่ยนแปลง', + fallback3h: 'Hermes ควรดูอะไร?', + fallback3b: 'ส่งงาน เส้นทางที่ล้มเหลว หรือแผนที่ยังไม่สมบูรณ์ ฉันจะช่วยเปลี่ยนเป็นการดำเนินการ', + fallback4h: 'เราควรเริ่มที่ไหน?', + fallback4b: 'นำปัญหา เป้าหมาย หรือไฟล์มา ฉันจะตรวจสอบก่อนและทำให้ขั้นตอนถัดไปเป็นรูปธรรม', + fallback5h: 'อะไรต้องการความสนใจ?', + fallback5b: 'ส่งบริบทที่คุณมี ฉันจะช่วยจัดเรียงเป็นแผนหรือการแก้ไข', + personality: { + label => `โหมด ${label} เปิดอยู่ เราควรทำงานอะไร?`, + body1: 'ส่งงาน ไฟล์ หรือไอเดียคร่าวๆ ฉันจะใช้เสียงที่คุณกำหนดค่าและทำให้งานยึดกับรีโปนี้', + label => `${label} Hermes ต้องเห็นอะไร?`, + body2: 'นำบริบทหรือส่วนที่ติดขัดมา ฉันจะปรับตามบุคลิกที่คุณกำหนดค่า', + label => `โหมด ${label} พร้อมแล้ว`, + body3: 'ส่งปัญหา ไฟล์ หรือไอเดีย ฉันจะทำตามบุคลิกที่คุณกำหนดค่า', + label => `${label} Hermes ควรจัดการอะไร?`, + body4: 'วางงานที่นี่ ฉันจะทำให้งานยึดกับรีโป', + heading5: 'เราควรเริ่มที่ไหน?', + label => `ให้บริบทกับฉันแล้วฉันจะตอบในโหมด ${label}`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'ไม่พบสิ่งประดิษฐ์', + }, + agents: { + spawnTree: 'ต้นไม้การสร้าง', + liveSubagentActivity: 'กิจกรรมซับเอเจนต์สดสำหรับเทิร์นปัจจุบัน', + noLiveSubagents: 'ไม่มีซับเอเจนต์สด', + files: 'ไฟล์', + label: 'เอเจนต์', + open: 'เปิดเอเจนต์', + close: 'ปิดเอเจนต์', + subagent: 'ซับเอเจนต์', + subagents: 'ซับเอเจนต์', + failed: 'ล้มเหลว', + running: 'กำลังทำงาน', + }, + provider: { + desc: { + nousPortal: 'การแทนที่ URL ฐาน Nous Portal', + openRouter: 'คีย์ API OpenRouter (สำหรับการมองเห็น ตัวช่วยการขูดเว็บ และ MoA)', + google: 'คีย์ API Google AI Studio (รู้จักในชื่อ GEMINI_API_KEY ด้วย)', + gemini: 'ID โปรเจกต์ GCP สำหรับระดับ Gemini แบบชำระเงิน (ระดับฟรีจัดเตรียมให้อัตโนมัติ)', + anthropic: 'คีย์ API Anthropic', + deepseek: 'URL ฐาน DeepSeek API แบบกำหนดเอง (ขั้นสูง)', + xai: 'การแทนที่ URL ฐาน xAI', + huggingface: 'การแทนที่ URL ฐาน Hugging Face Inference Providers', + kimi: 'คีย์ API Kimi / Moonshot China', + minimax: 'การแทนที่ URL ฐาน MiniMax (จีน)', + minimaxCn: 'คีย์ API MiniMax China', + dashscope: 'URL ฐาน DashScope แบบกำหนดเอง (ค่าเริ่มต้น: ปลายทาง coding-intl ที่เข้ากันได้กับ OpenAI)', + glm: 'คีย์ API GLM (Z.AI)', + nvidia: 'การแทนที่ URL ฐาน NVIDIA NIM (เช่น http://localhost:8000/v1 สำหรับ NIM ท้องถิ่น)', + opencodeGo: 'คีย์ API OpenCode Go', + opencodeZen: 'คีย์ API OpenCode Zen', + xiaomi: 'การแทนที่ URL ฐาน Xiaomi MiMo (ค่าเริ่มต้น: https://api.xiaomimimo.com/v1)', + kiloCode: 'คีย์ API Kilo Code', + aiGateway: 'คีย์ API AI Gateway (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'คีย์ API ElevenLabs', + openai: 'คีย์ API OpenAI (สำหรับการประมวลผลเสียงผ่านพร็อกซี)', + mistral: 'คีย์ API Mistral (สำหรับ STT/TTS)', + groq: 'คีย์ API Groq (สำหรับ STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'URL Firecrawl API สำหรับอินสแตนซ์ที่โฮสต์เอง (ไม่บังคับ)', + fal: 'FAL_KEY', + nous: 'การแทนที่ URL ฐาน Nous Portal', + openrouter: 'คีย์ API OpenRouter (สำหรับการมองเห็น ตัวช่วยการขูดเว็บ และ MoA)', + lmstudio: 'การแทนที่ URL ฐาน Z.AI / GLM', + zai: 'URL ฐาน Azure Foundry (ตั้งค่าผ่าน \'hermes model\' สำหรับการกำหนดค่าเฉพาะปลายทาง)', + stepfun: 'การแทนที่ URL ฐาน StepFun Step Plan', + arcee: 'การแทนที่ URL ฐาน Arcee AI', + gmi: 'การแทนที่ URL ฐาน GMI Cloud', + qwenportal: 'การแทนที่ URL ฐาน Qwen Portal (ค่าเริ่มต้น: https://portal.qwen.ai/v1)', + opencodego: 'การแทนที่ URL ฐาน OpenCode Go', + ollamacloud: 'การแทนที่ URL ฐาน Ollama Cloud (ค่าเริ่มต้น: https://ollama.com/v1)', + awsbedrock: 'โปรไฟล์ที่มีชื่อ AWS สำหรับการตรวจสอบสิทธิ์ Bedrock (จาก ~/.aws/credentials)', + exa: 'คีย์ API Exa สำหรับการค้นหาเว็บและเนื้อหาที่เน้น AI', + parallel: 'คีย์ API Parallel สำหรับการค้นหาเว็บและสกัดที่เน้น AI', + }, + }, +} +) diff --git a/apps/desktop/src/i18n/types.ts b/apps/desktop/src/i18n/types.ts index dd3a176a07e7..925580eaf890 100644 --- a/apps/desktop/src/i18n/types.ts +++ b/apps/desktop/src/i18n/types.ts @@ -5,785 +5,7 @@ // partial locales should use `defineLocale()` so missing desktop-only strings // fall back to English while new keys remain type-checked. -export type Locale = 'en' | 'zh' | 'zh-hant' | 'ja' - -export type ToolTitleKey = - | 'browser_click' - | 'browser_fill' - | 'browser_navigate' - | 'browser_snapshot' - | 'browser_take_screenshot' - | 'browser_type' - | 'clarify' - | 'cronjob' - | 'edit_file' - | 'execute_code' - | 'image_generate' - | 'list_files' - | 'patch' - | 'read_file' - | 'search_files' - | 'session_search_recall' - | 'terminal' - | 'todo' - | 'vision_analyze' - | 'web_extract' - | 'web_search' - | 'write_file' - -interface ToolTitleCopy { - done: string - pending: string - pendingAction: string -} - -interface ModeOptionCopy { - label: string - description: string -} - -interface AuxTaskCopy { - label: string - hint: string -} - -export interface Translations { - common: { - apply: string - back: string - save: string - saving: string - cancel: string - change: string - choose: string - clear: string - close: string - collapse: string - confirm: string - connect: string - connecting: string - continue: string - copied: string - copy: string - copyFailed: string - delete: string - docs: string - done: string - error: string - failed: string - free: string - loading: string - notSet: string - refresh: string - remove: string - replace: string - retry: string - run: string - send: string - set: string - skip: string - update: string - on: string - off: string - } - - fileMenu: { - revealFinder: string - revealExplorer: string - revealFileManager: string - revealInSidebar: string - copyPath: string - copyRelativePath: string - rename: string - delete: string - renameTitle: string - renameLabel: string - deleteTitle: (name: string) => string - deleteBody: string - pathCopied: string - } - - boot: { - ready: string - desktopBootFailedWithMessage: (message: string) => string - steps: { - connectingGateway: string - loadingSettings: string - loadingSessions: string - startingDesktopConnection: string - startingHermesDesktop: string - } - errors: { - backgroundExited: string - backgroundExitedDuringStartup: string - backendStopped: string - desktopBootFailed: string - gatewayConnectionLost: string - gatewaySignInRequired: string - ipcBridgeUnavailable: string - } - failure: { - title: string - description: string - remoteTitle: string - remoteDescription: string - retry: string - repairInstall: string - useLocalGateway: string - openLogs: string - repairHint: string - remoteSignInHint: string - hideRecentLogs: string - showRecentLogs: string - signedInTitle: string - signedInMessage: string - signInIncompleteTitle: string - signInIncompleteMessage: string - signInFailed: string - signInToRemoteGateway: string - signInWithProvider: (provider: string) => string - identityProvider: string - } - } - - notifications: { - region: string - hide: string - show: string - more: (count: number) => string - clearAll: string - dismiss: string - details: string - copyDetail: string - copyDetailFailed: string - backendOutOfDateTitle: string - backendOutOfDateMessage: string - updateHermes: string - updateReadyTitle: string - updateReadyMessage: (count: number) => string - seeWhatsNew: string - errors: { - elevenLabsNeedsKey: string - elevenLabsRejectedKey: string - methodNotAllowed: string - microphonePermission: string - openaiRejectedApiKey: string - openaiRejectedApiKeyWithStatus: (status: string) => string - openaiTtsNeedsKey: string - } - voice: { - configureSpeechToText: string - couldNotStartSession: string - microphoneAccessDenied: string - microphoneConstraintsUnsupported: string - microphoneFailed: string - microphoneInUse: string - microphonePermissionDenied: string - microphoneStartFailed: string - microphoneUnsupported: string - noMicrophone: string - noSpeechDetected: string - playbackFailed: string - recordingFailed: string - transcriptionFailed: string - transcriptionUnavailable: string - tryRecordingAgain: string - unavailable: string - } - // Native OS notification copy (titles + generic fallback bodies). Dynamic - // bodies (the agent's reply, a command, an error) are passed through raw. - native: { - approvalTitle: string - approveAction: string - rejectAction: string - inputTitle: string - inputBody: string - turnDoneTitle: string - turnDoneBody: string - turnErrorTitle: string - backgroundDoneTitle: string - backgroundFailedTitle: string - } - } - - remoteDisplayBanner: { - message: (reason: string) => string - dismiss: string - } - - titlebar: { - hideSidebar: string - showSidebar: string - search: string - searchTitle: string - swapSidebarSides: string - swapSidebarSidesTitle: string - hideRightSidebar: string - showRightSidebar: string - muteHaptics: string - unmuteHaptics: string - openSettings: string - openStarmap: string - openKeybinds: string - } - - keybinds: { - title: string - subtitle: (open: string) => string - rebind: string - reset: string - resetAll: string - pressKey: string - set: string - conflictWith: (label: string) => string - categories: Record - actions: Record - } - - language: { - label: string - description: string - saving: string - saveError: string - switchTo: string - searchPlaceholder: string - noResults: string - } - - settings: { - closeSettings: string - exportConfig: string - importConfig: string - resetToDefaults: string - resetConfirm: string - exportFailed: string - resetFailed: string - nav: { - providers: string - providerAccounts: string - providerApiKeys: string - gateway: string - apiKeys: string - keysTools: string - keysSettings: string - mcp: string - archivedChats: string - about: string - notifications: string - } - notifications: { - title: string - intro: string - enableAll: string - enableAllDesc: string - focusedHint: string - kinds: Record< - 'approval' | 'backgroundDone' | 'input' | 'turnDone' | 'turnError', - { label: string; description: string } - > - test: string - testTitle: string - testBody: string - testSent: string - testUnsupported: string - completionSoundTitle: string - completionSoundDesc: string - completionSoundPreview: string - } - sections: Record - searchPlaceholder: Record<'about' | 'config' | 'gateway' | 'keys' | 'mcp' | 'sessions', string> - modeOptions: Record<'light' | 'dark' | 'system', ModeOptionCopy> - appearance: { - title: string - intro: string - colorMode: string - colorModeDesc: string - toolViewTitle: string - toolViewDesc: string - translucencyTitle: string - translucencyDesc: string - embedsTitle: string - embedsDesc: string - embedsAsk: string - embedsAlways: string - embedsOff: string - embedsReset: (count: number) => string - product: string - productDesc: string - technical: string - technicalDesc: string - themeTitle: string - themeDesc: string - themeProfileNote: (profile: string) => string - installTitle: string - installDesc: string - installPlaceholder: string - installButton: string - installing: string - installError: string - installed: (name: string) => string - removeTheme: string - importedBadge: string - pet: { - title: string - intro: string - restartHint: string - on: string - off: string - scaleTitle: string - scaleDesc: string - roamTitle: string - roamDesc: string - chooseTitle: string - chooseDesc: string - searchPlaceholder: string - unreachable: string - noMatch: (query: string) => string - installedTag: string - generatedTag: string - countCapped: (cap: number, total: number) => string - count: (n: number) => string - uninstall: (name: string) => string - delete: (name: string) => string - deleteTitle: (name: string) => string - deleteBody: string - deleteConfirm: string - rename: (name: string) => string - renameTitle: string - renamePlaceholder: string - renameSave: string - exportPet: (name: string) => string - adoptFailed: (slug: string) => string - uninstallFailed: (slug: string) => string - renameFailed: (slug: string) => string - exportFailed: (slug: string) => string - noneAvailable: string - turnOnFailed: string - turnOffFailed: string - } - } - fieldLabels: Record - fieldDescriptions: Record - about: { - heading: string - version: (value: string) => string - versionUnavailable: string - updates: string - checkNow: string - checking: string - seeWhatsNew: string - updateNow: string - releaseNotes: string - onLatest: string - installing: string - cantUpdate: string - cantReach: string - tapCheck: string - updateReady: (count: number) => string - lastChecked: (age: string) => string - justNowSuffix: string - automaticUpdates: string - automaticUpdatesDesc: string - branchCommit: (branch: string, commit: string) => string - never: string - justNow: string - minAgo: (count: number) => string - hoursAgo: (count: number) => string - daysAgo: (count: number) => string - } - config: { - none: string - noneParen: string - notSet: string - commaSeparated: string - loading: string - emptyTitle: string - emptyDesc: string - failedLoad: string - autosaveFailed: string - imported: string - invalidJson: string - } - credentials: { - pasteKey: string - pasteLabelKey: (label: string) => string - optional: string - enterValueFirst: string - couldNotSave: string - remove: string - or: string - escToCancel: string - getKey: string - saving: string - } - envActions: { - actionsFor: (label: string) => string - credentialActions: string - docs: string - hideValue: string - revealValue: string - replace: string - set: string - clear: string - } - gateway: { - loading: string - unavailableTitle: string - unavailableDesc: string - title: string - envOverride: string - intro: string - appliesTo: string - allProfiles: string - defaultConnection: string - profileConnection: (profile: string) => string - envOverrideTitle: string - envOverrideDesc: string - localTitle: string - localDesc: string - remoteTitle: string - remoteDesc: string - remoteUrlTitle: string - remoteUrlDesc: string - probing: string - probeError: string - signedIn: string - signIn: string - signOut: string - signInWith: (provider: string) => string - authTitle: string - authSignedInPassword: string - authSignedInOauth: string - authNeedsPassword: string - authNeedsOauth: (provider: string) => string - tokenTitle: string - tokenDesc: string - existingToken: (value: string) => string - savedToken: string - pasteSessionToken: string - testRemote: string - saveForRestart: string - saveAndReconnect: string - diagnostics: string - diagnosticsDesc: string - openLogs: string - incompleteTitle: string - incompleteSignIn: string - incompleteToken: string - incompleteSignInTest: string - incompleteTokenTest: string - enterUrlFirst: string - restartingTitle: string - savedTitle: string - restartingMessage: string - savedMessage: string - connectedTo: (baseUrl: string, version?: string) => string - reachableTitle: string - signedOutTitle: string - signedOutMessage: string - failedLoad: string - signInFailed: string - signOutFailed: string - testFailed: string - applyFailed: string - saveFailed: string - } - keys: { - loading: string - failedLoad: string - empty: string - } - mcp: { - loading: string - failedLoad: string - nameRequiredTitle: string - nameRequiredMessage: string - objectRequired: string - invalidJson: string - saveFailed: string - removeFailed: string - gatewayUnavailableTitle: string - gatewayUnavailableMessage: string - reloadedTitle: string - reloadedMessage: string - reloadFailed: string - savedTitle: string - savedMessage: (name: string) => string - newServer: string - reload: string - reloading: string - emptyTitle: string - emptyDesc: string - disabled: string - editServer: string - name: string - serverJson: string - remove: string - saveServer: string - } - model: { - loading: string - appliesDesc: string - provider: string - model: string - applying: string - defaultsLabel: string - reasoning: string - reasoningOff: string - defaultsFailed: string - auxiliaryTitle: string - resetAllToMain: string - auxiliaryDesc: string - setToMain: string - change: string - autoUseMain: string - providerDefault: string - tasks: Record - } - providers: { - connectAccount: string - haveApiKey: string - intro: string - connected: string - collapse: string - connectAnother: string - otherProviders: string - disconnect: string - disconnectInTerminal: string - removeConfirm: (provider: string) => string - removeExternalGeneric: (provider: string) => string - removeKeyManaged: (provider: string) => string - removeTerminalConfirm: (provider: string, command: string) => string - removeTerminalRunning: (provider: string) => string - removedTitle: string - removedMessage: (provider: string) => string - failedRemove: (provider: string) => string - noProviderKeys: string - searchKeys: string - noKeysMatch: string - loading: string - } - sessions: { - loading: string - archivedTitle: string - archivedIntro: string - emptyArchivedTitle: string - emptyArchivedDesc: string - unarchive: string - deletePermanently: string - messages: (count: number) => string - restored: string - deleteConfirm: (title: string) => string - defaultDirTitle: string - defaultDirDesc: string - defaultDirUpdated: string - defaultsTo: (label: string) => string - change: string - choose: string - clear: string - notSet: string - failedLoad: string - unarchiveFailed: string - deleteFailed: string - updateDirFailed: string - clearDirFailed: string - } - toolsets: { - loadingConfig: string - savedTitle: string - savedMessage: (key: string) => string - removedTitle: string - removedMessage: (key: string) => string - failedSave: (key: string) => string - failedRemove: (key: string) => string - failedReveal: (key: string) => string - removeConfirm: (key: string) => string - set: string - notSet: string - selectedTitle: string - selectedMessage: (provider: string) => string - failedSelect: (provider: string) => string - failedLoad: string - noProviderOptions: string - noProviders: string - ready: string - nousIncluded: string - noApiKeyRequired: string - postSetupHint: (step: string) => string - postSetupRun: string - postSetupRunning: string - postSetupStarting: string - postSetupCompleteTitle: string - postSetupCompleteMessage: (step: string) => string - postSetupErrorTitle: string - postSetupErrorMessage: (step: string) => string - postSetupFailed: (step: string) => string - } - } - - skills: { - tabSkills: string - tabToolsets: string - all: string - searchSkills: string - searchToolsets: string - refresh: string - refreshing: string - loading: string - noSkillsTitle: string - noSkillsDesc: string - noToolsetsTitle: string - noToolsetsDesc: string - noDescription: string - configured: string - needsKeys: string - toolsetsEnabled: (enabled: number, total: number) => string - configureToolset: (label: string) => string - toggleToolset: (label: string) => string - skillsLoadFailed: string - toolsetsRefreshFailed: string - skillEnabled: string - skillDisabled: string - toolsetEnabled: string - toolsetDisabled: string - appliesToNewSessions: (name: string) => string - failedToUpdate: (name: string) => string - } - - starmap: { - title: string - subtitle: (nodes: number, clusters: number) => string - close: string - refresh: string - memory: string - filterAll: string - filterUsed: string - filterLearned: string - viewGraph: string - loadFailed: string - loading: string - emptyTitle: string - emptyDesc: string - share: string - shareHint: string - shareTitle: string - sharePlaceholder: string - copy: string - copied: string - importMap: string - importBtn: string - importEmpty: string - importSuccess: (nodes: number) => string - importedBadge: string - resetToMine: string - } - agents: { - close: string - title: string - subtitle: string - emptyTitle: string - emptyDesc: string - running: string - failed: string - done: string - streaming: string - files: string - moreFiles: (count: number) => string - delegation: (index: number) => string - workers: (count: number) => string - workersActive: (count: number) => string - agentsCount: (count: number) => string - activeCount: (count: number) => string - failedCount: (count: number) => string - toolsCount: (count: number) => string - filesCount: (count: number) => string - updatedAgo: (age: string) => string - ageNow: string - ageSeconds: (seconds: number) => string - ageMinutes: (minutes: number) => string - ageHours: (hours: number) => string - durationSeconds: (seconds: string) => string - durationMinutes: (minutes: number, seconds: number) => string - tokensK: (k: string) => string - tokens: (value: number) => string - } - - commandCenter: { - close: string - paletteTitle: string - back: string - searchPlaceholder: string - goTo: string - goToSession: string - branches: string - startInBranch: (branch: string) => string - commandCenter: string - appearance: string - settings: string - changeTheme: string - changeColorMode: string - pets: { - title: string - placeholder: string - loading: string - error: string - staleBackend: string - empty: string - turnOff: string - turnOn: string - installed: string - generatedTag: string - adoptFailed: string - toggleFailed: string - noneAvailable: string - } - generatePet: { - title: string - placeholder: string - promptHint: string - readyHint: string - generate: string - generating: string - retry: string - hatch: string - spawning: string - hatching: string - hatchingSub: string - hatched: string - hatchRow: (state: string, done: number, total: number) => string - hatchComposing: string - hatchSaving: string - namePlaceholder: string - staleBackend: string - backgroundHint: string - slowProviderHint: string - remix: string - remixConfirmTitle: string - remixConfirmBody: string - genericError: string - referenceImageTooLarge: string - referenceImageInvalid: string - adopt: string - startOver: string - } - installTheme: { - title: string - placeholder: string - loading: string - error: string - empty: string - install: string - installing: string - installed: string - installs: (count: string) => string - } - settingsFields: string - mcpServers: string - archivedChats: string - sections: Record<'sessions' | 'system' | 'usage', string> - sectionDescriptions: Record<'sessions' | 'system' | 'usage', string> - nav: Record<'newChat' | 'settings' | 'skills' | 'messaging' | 'artifacts', { title: string; detail: string }> - sectionEntries: Record<'sessions' | 'system' | 'usage', { title: string; detail: string }> +export type Locale = 'en' | 'zh' | 'zh-hant' | 'ja' | 'ko' | 'de' | 'es' | 'fr' | 'pt-br' | 'ar' | 'hi' | 'th' | 'vi' | 'it' | 'ru', { title: string; detail: string }> providerNavigate: string providerSessions: string refresh: string diff --git a/apps/desktop/src/i18n/vi.ts b/apps/desktop/src/i18n/vi.ts new file mode 100644 index 000000000000..237a8efe4a0c --- /dev/null +++ b/apps/desktop/src/i18n/vi.ts @@ -0,0 +1,953 @@ +import { defineLocale } from './define-locale' + +export const vi = defineLocale( +{ + appearance: { + title: 'Giao diện', + description: 'Đây là các tùy chọn hiển thị chỉ dành cho desktop. Chế độ màu điều khiển độ sáng; chủ đề điều khiển bảng màu nhấn và kiểu dáng bề mặt trò chuyện.', + colorMode: 'Chế độ màu', + colorModeDesc: 'Chọn chế độ cố định hoặc để Hermes theo cài đặt hệ thống của bạn.', + theme: { + nous: 'Nous', + nousDesc: 'Tông trung tính kính với điểm nhấn xanh Nous', + midnight: 'Nửa đêm', + midnightDesc: 'Xanh tím đậm với điểm nhấn lạnh', + ember: 'Than hồng', + emberDesc: 'Đỏ thẫm và đồng ấm áp — phong cách lò rèn', + mono: 'Đơn sắc', + monoDesc: 'Thang xám sạch sẽ — tối giản và tập trung', + cyberpunk: 'Cyberpunk', + cyberpunkDesc: 'Xanh neon trên nền đen — terminal ma trận', + slate: 'Đá phiến', + slateDesc: 'Xanh đá phiến mát — chủ đề lập trình tập trung', + }, + themeDesc: 'Chọn bảng màu cho bề mặt trò chuyện và màu nhấn giao diện.', + mode: { + light: 'Sáng', + lightDesc: 'Bề mặt desktop sáng', + dark: 'Tối', + darkDesc: 'Không gian làm việc giảm chói', + system: 'Hệ thống', + systemDesc: 'Theo giao diện hệ điều hành', + }, + language: 'Ngôn ngữ', + languageDesc: 'Chọn ngôn ngữ giao diện hoặc để Hermes theo cài đặt hệ thống của bạn.', + toolCallDisplay: 'Hiển thị gọi công cụ', + toolCallDisplayDesc: 'Chế độ Sản phẩm ẩn tải trọng công cụ thô; Kỹ thuật hiển thị đầy đủ đầu vào/đầu ra.', + toolViewProduct: 'Sản phẩm', + toolViewTechnical: 'Kỹ thuật', + toolViewProductDesc: 'Hoạt động công cụ thân thiện với người dùng, tóm tắt ngắn gọn.', + toolViewTechnicalDesc: 'Bao gồm tham số/kết quả công cụ thô và chi tiết cấp thấp.', + }, + settings: { + title: 'Cài đặt', + appearance: 'Giao diện', + model: 'Mô hình', + gateway: 'Cổng kết nối', + sessions: 'Phiên', + tools: 'Công cụ & Kỹ năng', + section: { + chat: 'Trò chuyện', + workspace: 'Không gian làm việc', + safety: 'An toàn', + memory: 'Bộ nhớ & Ngữ cảnh', + voice: 'Giọng nói', + advanced: 'Nâng cao', + }, + mcp: 'Máy chủ MCP', + config: 'Cấu hình', + keys: 'Khóa API', + about: 'Giới thiệu', + closeSettings: 'Đóng cài đặt', + archivedChats: 'Trò chuyện đã lưu trữ', + exportConfig: 'Xuất cấu hình', + importConfig: 'Nhập cấu hình', + resetDefaults: 'Đặt lại mặc định', + llmProviders: 'Nhà cung cấp LLM', + searchPlaceholder: { + about: 'Giới thiệu về Hermes Desktop', + config: 'Tìm cài đặt…', + gateway: 'Kết nối cổng…', + keys: 'Tìm khóa API…', + mcp: 'Tìm máy chủ MCP…', + sessions: 'Tìm phiên đã lưu trữ…', + }, + }, + chat: { + placeholder: 'Hỏi tôi bất cứ điều gì…', + send: 'Gửi', + stop: 'Dừng', + thinking: 'Đang suy nghĩ…', + noSession: 'Không có phiên hoạt động. Bắt đầu cuộc trò chuyện mới.', + loadingSession: 'Đang tải phiên', + loadingResponse: 'Hermes đang tải phản hồi', + branchInNewChat: 'Phân nhánh trong trò chuyện mới', + readAloud: 'Đọc to', + preparingAudio: 'Đang chuẩn bị âm thanh...', + stopReading: 'Dừng đọc', + editMessage: 'Sửa tin nhắn', + editableCheckpoint: 'Điểm kiểm tra có thể sửa', + restoreCheckpoint: 'Khôi phục điểm kiểm tra', + goForward: 'Tiến tới', + restorePrevCheckpoint: 'Khôi phục điểm kiểm tra trước', + restoreNextCheckpoint: 'Khôi phục điểm kiểm tra sau', + composerTip: 'Mẹo: gõ @ để tham chiếu tệp trực tiếp.', + reconnecting: 'Đang kết nối lại với Hermes…', + }, + commandCenter: { + title: 'Trung tâm điều khiển', + noSessions: 'Chưa có phiên nào.', + loadingStatus: 'Đang tải trạng thái…', + recentLogs: 'Nhật ký gần đây', + dailyTokens: 'Token hôm nay', + noActivity: 'Không có hoạt động hôm nay.', + noModelUsage: 'Chưa có sử dụng mô hình nào.', + noSkillActivity: 'Chưa có hoạt động kỹ năng nào.', + sessionsPanel: 'Bảng phiên', + systemPanel: 'Bảng hệ thống', + usagePanel: 'Bảng sử dụng', + navigate: 'Điều hướng', + noMatchingResults: 'Không tìm thấy kết quả phù hợp.', + noSessionsYet: 'Chưa có phiên nào.', + unpinSession: 'Bỏ ghim phiên', + pinSession: 'Ghim phiên', + exportSession: 'Xuất phiên', + deleteSession: 'Xóa phiên', + gatewayRunning: 'Cổng nhắn tin đang chạy', + gatewayStopped: 'Cổng nhắn tin đã dừng', + restartMsg: 'Khởi động lại nhắn tin', + updateHermes: 'Cập nhật Hermes', + noLogsLoaded: 'Chưa tải nhật ký nào.', + closeLabel: 'Đóng trung tâm điều khiển', + searchPlaceholder: 'Tìm phiên, chế độ xem và hành động', + statSessions: 'Phiên', + statApiCalls: 'Lần gọi API', + statTokens: 'Token vào/ra', + statEstCost: 'Chi phí ước tính', + cost => `thực tế ${cost}`, + loadingUsage: 'Đang tải dữ liệu sử dụng...', + count => `Không có sử dụng trong ${count} ngày qua.`, + retry: 'Thử lại', + tokenInput: 'đầu vào', + tokenOutput: 'đầu ra', + noDailyActivity: 'Không có hoạt động hôm nay.', + topModels: 'Mô hình hàng đầu', + topSkills: 'Kỹ năng hàng đầu', + actionsLabel: 'hành động', + systemRunning: 'đang chạy', + systemDone: 'xong', + systemFailed: 'thất bại', + open: 'Mở Trung tâm điều khiển', + close: 'Đóng Trung tâm điều khiển', + }, + common: { + loading: 'Đang tải…', + save: 'Lưu', + cancel: 'Hủy', + close: 'Đóng', + delete: 'Xóa', + confirm: 'Xác nhận', + search: 'Tìm kiếm…', + clearSearch: 'Xóa tìm kiếm', + copy: 'Sao chép', + refresh: 'Làm mới', + moreActions: 'Thêm hành động', + tryAgain: 'Thử lại', + }, + onboarding: { + welcome: 'Chào mừng đến với Hermes', + getStarted: 'Bắt đầu bằng cách chọn nhà cung cấp và mô hình.', + skip: 'Bỏ qua', + continue: 'Tiếp tục', + finish: 'Hoàn tất', + setupTitle: 'Hãy thiết lập Hermes Agent cho bạn', + setupDesc: 'Kết nối nhà cung cấp mô hình để bắt đầu trò chuyện. Hầu hết chỉ cần một lần nhấp.', + preparing: 'Đang khởi động Hermes…', + installing: 'Hermes đang hoàn tất cài đặt. Lần đầu thường mất dưới một phút.', + lookingUp: 'Đang tra cứu nhà cung cấp...', + otherProviders: 'Nhà cung cấp khác', + collapse: 'Thu gọn', + iHaveKey: 'Tôi có khóa API', + recommended: 'Được đề xuất', + connected: 'Đã kết nối', + backToSignIn: 'Quay lại đăng nhập', + getKey: 'Lấy khóa', + pasteKey: 'Dán khóa API', + connect: 'Kết nối', + connecting: 'Đang kết nối', + copyCode: 'Sao chép', + startSignIn: 'Đang bắt đầu đăng nhập cho', + verifyingCode: 'Đang xác minh mã của bạn với', + pickingModel: 'đã kết nối. Đang chọn mô hình mặc định...', + signInFailed: 'Đăng nhập thất bại. Thử lại.', + pickDifferent: 'Chọn nhà cung cấp khác', + signInTitle: 'Đăng nhập với', + step1: 'Chúng tôi đã mở', + step1End: 'trong trình duyệt của bạn.', + step2: 'Ủy quyền cho Hermes tại đó.', + step3: 'Sao chép mã ủy quyền và dán vào bên dưới.', + pasteCode: 'Dán mã ủy quyền', + reopenAuth: 'Mở lại trang ủy quyền', + cancel: 'Hủy', + browserDesc: 'Chúng tôi đã mở', + browserDescEnd: 'trong trình duyệt của bạn. Ủy quyền cho Hermes tại đó và bạn sẽ được kết nối tự động — không cần sao chép hay dán gì cả.', + waitingAuth: 'Đang chờ bạn ủy quyền...', + reopenSignIn: 'Mở lại trang đăng nhập', + externalDesc: 'đăng nhập qua CLI riêng. Chạy lệnh này trong terminal, sau đó quay lại và chọn "Tôi đã đăng nhập":', + iSignedIn: 'Tôi đã đăng nhập', + enterCode: 'Chúng tôi đã mở', + enterCodeEnd: 'trong trình duyệt của bạn. Nhập mã này tại đó:', + reopenVerification: 'Mở lại trang xác minh', + defaultModel: 'Mô hình mặc định', + freeTier: 'Gói miễn phí', + pro: 'Pro', + change: 'Thay đổi', + startChatting: 'Bắt đầu trò chuyện', + docs: 'tài liệu', + close: 'Đóng', + savingError: 'Không thể lưu thông tin xác thực.', + openRouter: 'OpenRouter', + }, + file: { + browser: 'Trình duyệt tệp', + noFiles: 'Chưa có tệp nào.', + }, + terminal: { + title: 'Terminal', + newTab: 'Tab mới', + closeTab: 'Đóng tab', + }, + skills: { + title: 'Kỹ năng', + search: 'Tìm kỹ năng…', + noResults: 'Không tìm thấy kỹ năng nào.', + tools: 'Kỹ năng & Công cụ', + }, + profiles: { + title: 'Hồ sơ', + noProfilesYet: 'Chưa có hồ sơ nào.', + selectProfile: 'Chọn hồ sơ để xem chi tiết.', + deleteProfile: 'Xóa hồ sơ?', + soulMd: 'SOUL.md', + unsavedChanges: 'Thay đổi chưa lưu', + newProfile: 'Hồ sơ mới', + cloneFromDefault: 'Sao chép từ mặc định', + renameProfile: 'Đổi tên hồ sơ', + }, + cron: { + title: 'Công việc định kỳ', + noJobs: 'Không có công việc định kỳ nào.', + deleteCronJob: 'Xóa công việc định kỳ?', + optional: 'Tùy chọn', + label: 'Định kỳ', + open: 'Mở công việc định kỳ', + }, + messaging: { + title: 'Nhắn tin', + recommended: 'Được đề xuất', + recommendedTelegram: 'Được đề xuất. ID số phân cách bằng dấu phẩy từ @userinfobot. Nếu không có, bất kỳ ai cũng có thể nhắn tin cho bot của bạn.', + recommendedDiscord: 'Được đề xuất. ID người dùng Discord phân cách bằng dấu phẩy.', + recommendedSlack: 'Được đề xuất. ID người dùng Slack phân cách bằng dấu phẩy.', + recommendedMattermost: 'Được đề xuất. ID người dùng Mattermost phân cách bằng dấu phẩy.', + recommendedMatrix: 'Được đề xuất. ID người dùng phân cách bằng dấu phẩy theo định dạng @user:server.', + recommendedSignal: 'Được đề xuất. Định danh Signal phân cách bằng dấu phẩy.', + recommendedWhatsApp: 'Được đề xuất. Số điện thoại hoặc ID WhatsApp phân cách bằng dấu phẩy.', + gatewayStopped: 'Cổng nhắn tin đã dừng', + getCredentials: 'Lấy thông tin xác thực của bạn', + required: 'Bắt buộc', + unsavedChanges: 'Thay đổi chưa lưu', + saved: 'Đã lưu', + }, + about: { + version: 'Phiên bản', + checkUpdates: 'Kiểm tra cập nhật', + upToDate: 'Hermes đã là phiên bản mới nhất.', + updateAvailable: 'Có bản cập nhật mới.', + license: 'Giấy phép MIT', + hermesDesktop: 'Hermes Desktop', + versionUnavailable: 'Không có thông tin phiên bản', + updates: 'Cập nhật', + checkNow: 'Kiểm tra ngay', + checking: 'Đang kiểm tra…', + seeWhatsNew: 'Xem có gì mới', + releaseNotes: 'Ghi chú phát hành', + autoUpdates: 'Cập nhật tự động', + autoUpdatesDesc: 'Hermes tự động kiểm tra cập nhật trong nền và thông báo khi có bản mới sẵn sàng.', + selfUpdateUnsupported: 'Bản dựng này không thể tự cập nhật từ bên trong ứng dụng.', + cannotReachServer: 'Không thể kết nối đến máy chủ cập nhật.', + installingUpdate: 'Đang cài đặt bản cập nhật.', + count => `Đã có bản cập nhật mới (bao gồm ${count} thay đổi).`, + count => `Đã có bản cập nhật mới (bao gồm ${count} thay đổi).`, + onLatest: 'Bạn đang dùng phiên bản mới nhất.', + tapCheckNow: 'Nhấn "Kiểm tra ngay" để tìm bản cập nhật.', + time => `Kiểm tra lần cuối ${time}`, + justNow: 'vừa xong', + never: 'chưa bao giờ', + count => `${count} phút trước`, + count => `${count} giờ trước`, + count => `${count} ngày trước`, + (branch, sha) => `Nhánh ${branch} · Commit ${sha}`, + }, + keys: { + title: 'Khóa API', + noKeys: 'Chưa cấu hình khóa API nào.', + addKey: 'Thêm khóa', + loading: 'Đang tải khóa API và thông tin xác thực…', + docs: 'Tài liệu', + openDocs: 'Mở tài liệu nhà cung cấp', + hideValue: 'Ẩn giá trị', + revealValue: 'Hiện giá trị', + set: 'Đã đặt', + notSet: 'Chưa đặt', + replace: 'Thay thế', + replaceValue: 'Thay thế giá trị hiện tại', + enterValue: 'Nhập giá trị', + saving: 'Đang lưu', + save: 'Lưu', + cancel: 'Hủy', + clearValue: 'Xóa giá trị', + (count, total) => `Đã cấu hình ${count}/${total}`, + (count, total) => `Đã đặt ${count}/${total}`, + count => `Đã đặt ${count}`, + count => `${count} khóa`, + otherProviders: 'Nhà cung cấp khác', + categoryTools: 'Công cụ', + categoryMessaging: 'Nhắn tin', + categorySettings: 'Cài đặt', + openProviderDocs: 'Mở tài liệu nhà cung cấp', + showAdvanced: 'Hiện nâng cao', + loadFailed: 'Không thể tải khóa API', + credentialSaved: 'Đã lưu thông tin xác thực', + credentialRemoved: 'Đã xóa thông tin xác thực', + }, + config: { + title: 'Cấu hình', + edit: 'Chỉnh sửa cấu hình', + reload: 'Tải lại cấu hình', + notSet: 'Chưa đặt', + commaSeparated: 'giá trị phân cách bằng dấu phẩy', + on: 'Bật', + off: 'Tắt', + none: 'Không có', + emptyOption: '(không có)', + loading: 'Đang tải cấu hình Hermes…', + noMatching: 'Không có cài đặt phù hợp', + noMatchingDesc: 'Thử từ khóa tìm kiếm khác hoặc chọn mục khác.', + count => `${count} kết quả`, + count => `${count} kết quả`, + saving: 'Đang lưu…', + label: { + defaultModel: 'Mô hình mặc định', + contextWindow: 'Cửa sổ ngữ cảnh', + fallbackModels: 'Mô hình dự phòng', + enabledToolsets: 'Bộ công cụ đã bật', + timezone: 'Múi giờ', + personality: 'Tính cách', + reasoningBlocks: 'Khối suy luận', + maxAgentSteps: 'Số bước tác tử tối đa', + imageAttachments: 'Đính kèm hình ảnh', + workingDirectory: 'Thư mục làm việc', + executionBackend: 'Backend thực thi', + commandTimeout: 'Thời gian chờ lệnh', + persistentShell: 'Shell duy trì', + envPassthrough: 'Chuyển tiếp biến môi trường', + fileReadLimit: 'Giới hạn đọc tệp', + terminalOutputLimit: 'Giới hạn đầu ra terminal', + filePageLimit: 'Giới hạn trang tệp', + lineLengthLimit: 'Giới hạn độ dài dòng', + codeExecutionMode: 'Chế độ thực thi mã', + approvalMode: 'Chế độ phê duyệt', + approvalTimeout: 'Thời gian chờ phê duyệt', + confirmMcpReloads: 'Xác nhận tải lại MCP', + commandAllowlist: 'Danh sách lệnh cho phép', + redactSecrets: 'Ẩn bí mật', + allowPrivateUrls: 'Cho phép URL riêng tư', + browserPrivateUrls: 'URL riêng tư trình duyệt', + localBrowserForPrivateUrls: 'Trình duyệt cục bộ cho URL riêng tư', + fileCheckpoints: 'Điểm kiểm tra tệp', + checkpointLimit: 'Giới hạn điểm kiểm tra', + voiceShortcut: 'Phím tắt giọng nói', + maxRecordingLength: 'Độ dài ghi âm tối đa', + readResponsesAloud: 'Đọc to phản hồi', + speechToText: 'Chuyển lời nói thành văn bản', + speechToTextProvider: 'Nhà cung cấp chuyển lời nói', + localTranscriptionModel: 'Mô hình chuyển lời cục bộ', + transcriptionLanguage: 'Ngôn ngữ chuyển lời', + elevenlabsSttModel: 'Mô hình STT ElevenLabs', + elevenlabsLanguage: 'Ngôn ngữ ElevenLabs', + tagAudioEvents: 'Gắn thẻ sự kiện âm thanh', + speakerDiarization: 'Phân biệt người nói', + textToSpeechProvider: 'Nhà cung cấp văn bản thành giọng nói', + edgeVoice: 'Giọng Edge', + openaiTtsModel: 'Mô hình TTS OpenAI', + openaiVoice: 'Giọng OpenAI', + elevenlabsVoice: 'Giọng ElevenLabs', + elevenlabsModel: 'Mô hình ElevenLabs', + persistentMemory: 'Bộ nhớ duy trì', + userProfile: 'Hồ sơ người dùng', + memoryBudget: 'Ngân sách bộ nhớ', + profileBudget: 'Ngân sách hồ sơ', + memoryProvider: 'Nhà cung cấp bộ nhớ', + contextEngine: 'Cơ chế ngữ cảnh', + autoCompression: 'Tự động nén', + compressionThreshold: 'Ngưỡng nén', + compressionTarget: 'Mục tiêu nén', + protectedRecentMessages: 'Tin nhắn gần đây được bảo vệ', + apiRetries: 'Số lần thử lại API', + serviceTier: 'Cấp dịch vụ', + toolUseEnforcement: 'Thực thi sử dụng công cụ', + subagentModel: 'Mô hình tác tử phụ', + subagentProvider: 'Nhà cung cấp tác tử phụ', + subagentTurnLimit: 'Giới hạn lượt tác tử phụ', + parallelSubagents: 'Tác tử phụ song song', + subagentTimeout: 'Thời gian chờ tác tử phụ', + subagentReasoningEffort: 'Nỗ lực suy luận tác tử phụ', + }, + desc: { + defaultModel: 'Dùng cho trò chuyện mới trừ khi bạn chọn mô hình khác trong khung soạn.', + contextWindow: 'Để 0 để dùng cửa sổ ngữ cảnh được phát hiện của mô hình đã chọn.', + fallbackModels: 'Các mục nhà cung cấp:mô hình dự phòng để thử nếu mô hình mặc định thất bại.', + personality: 'Phong cách trợ lý mặc định cho phiên mới.', + timezone: 'Dùng khi Hermes cần ngữ cảnh thời gian địa phương. Để trống dùng múi giờ hệ thống.', + reasoningBlocks: 'Hiện các phần suy luận khi backend cung cấp.', + imageAttachments: 'Kiểm soát cách đính kèm hình ảnh được gửi đến mô hình.', + workingDirectory: 'Thư mục dự án mặc định cho công việc công cụ và terminal.', + codeExecutionMode: 'Mức độ giới hạn phạm vi thực thi mã trong dự án hiện tại.', + persistentShell: 'Giữ trạng thái shell giữa các lệnh khi backend hỗ trợ.', + envPassthrough: 'Biến môi trường cần chuyển tiếp vào quá trình thực thi công cụ.', + fileReadLimit: 'Số ký tự tối đa Hermes có thể đọc từ một yêu cầu tệp.', + approvalMode: 'Cách Hermes xử lý các lệnh cần phê duyệt rõ ràng.', + approvalTimeout: 'Thời gian chờ lời nhắc phê duyệt trước khi hết hạn.', + redactSecrets: 'Ẩn bí mật bị phát hiện khỏi nội dung hiển thị cho mô hình khi có thể.', + fileCheckpoints: 'Tạo ảnh chụp khôi phục trước khi chỉnh sửa tệp.', + persistentMemory: 'Lưu ký ức bền vững có thể giúp ích cho các phiên sau.', + userProfile: 'Duy trì hồ sơ gọn nhẹ về tùy chọn người dùng.', + contextEngine: 'Chiến lược quản lý hội thoại dài gần giới hạn ngữ cảnh.', + autoCompression: 'Tóm tắt ngữ cảnh cũ khi hội thoại trở nên lớn.', + readResponsesAloud: 'Tự động đọc to phản hồi của trợ lý.', + speechToText: 'Bật chuyển lời nói cục bộ hoặc qua nhà cung cấp.', + elevenlabsLanguage: 'Mã ngôn ngữ ISO-639-3 tùy chọn. Để trống để ElevenLabs tự động phát hiện.', + maxAgentSteps: 'Giới hạn trên cho số lượt gọi công cụ trước khi Hermes dừng một lần chạy.', + }, + }, + gateway: { + title: 'Cổng kết nối', + start: 'Khởi động cổng', + stop: 'Dừng cổng', + restart: 'Khởi động lại cổng', + running: 'Đang chạy', + stopped: 'Đã dừng', + loading: 'Đang tải cài đặt cổng…', + unavailable: 'Không có cài đặt cổng', + unavailableDesc: 'Cầu nối IPC desktop không hiển thị cài đặt cổng.', + connection: 'Kết nối cổng', + envOverride: 'ghi đè biến môi trường', + desc: 'Hermes Desktop tự khởi động cổng cục bộ riêng theo mặc định. Dùng cổng từ xa khi bạn muốn ứng dụng này điều khiển một backend Hermes đang chạy trên máy khác hoặc sau proxy tin cậy.', + envOverrideTitle: 'Biến môi trường đang điều khiển phiên desktop này.', + (urlVar, tokenVar) => `Bỏ đặt ${urlVar} và ${tokenVar} để dùng cài đặt đã lưu bên dưới.`, + localTitle: 'Cổng cục bộ', + localDesc: 'Khởi động backend Hermes riêng trên localhost. Đây là mặc định và hoạt động ngoại tuyến.', + remoteTitle: 'Cổng từ xa', + remoteDesc: 'Kết nối shell desktop này đến backend Hermes từ xa bằng token phiên của nó.', + remoteUrl: 'URL từ xa', + remoteUrlDesc: 'URL cơ sở cho backend bảng điều khiển từ xa. Hỗ trợ tiền tố đường dẫn, ví dụ /hermes.', + remoteUrlPlaceholder: 'https://gateway.example.com/hermes', + sessionToken: 'Token phiên', + sessionTokenDesc: 'Token phiên bảng điều khiển dùng cho truy cập REST và WebSocket. Để trống để giữ token đã lưu.', + sessionTokenPlaceholder: 'Dán token phiên', + preview => `Token hiện tại ${preview}`, + tokenSaved: 'đã lưu', + testRemote: 'Kiểm tra từ xa', + saveRestart: 'Lưu cho lần khởi động lại sau', + saveReconnect: 'Lưu và kết nối lại', + diagnostics: 'Chẩn đoán', + diagnosticsDesc: 'Hiện desktop.log trong trình quản lý tệp — hữu ích khi cổng không khởi động được.', + openLogs: 'Mở nhật ký', + connected: 'Đã kết nối', + connecting: 'Đang kết nối', + disconnected: 'Đã ngắt kết nối', + inferenceReady: 'Suy luận sẵn sàng', + inferenceNotReady: 'Suy luận chưa sẵn sàng', + checkingInference: 'Đang kiểm tra suy luận', + openSystemPanel: 'Mở bảng hệ thống', + connectionLabel: 'Kết nối:', + recentActivity: 'Hoạt động gần đây', + viewAllLogs: 'Xem tất cả nhật ký →', + messagingPlatforms: 'Nền tảng nhắn tin', + label: 'Cổng kết nối', + inferenceStatus: 'Trạng thái suy luận cổng', + enterUrlFirst: 'Nhập URL từ xa và token phiên trước khi chuyển đổi', + enterUrlFirstTest: 'Nhập URL từ xa và token phiên trước khi kiểm tra', + }, + sessions: { + title: 'Phiên', + search: 'Tìm phiên…', + noResults: 'Không tìm thấy phiên nào.', + export: 'Xuất', + delete: 'Xóa phiên', + loading: 'Đang tải…', + defaultProjectDir: 'Thư mục dự án mặc định', + defaultProjectDirDesc: 'Phiên mới bắt đầu trong thư mục này trừ khi bạn chọn thư mục khác. Để trống để dùng thư mục chính.', + fallback => `Mặc định là ${fallback}.`, + notSet: 'Chưa đặt', + change: 'Thay đổi', + choose: 'Chọn', + clear: 'Xóa', + archivedTitle: 'Phiên đã lưu trữ', + archivedDesc: 'Trò chuyện đã lưu trữ bị ẩn khỏi thanh bên nhưng giữ lại tất cả tin nhắn. Ctrl/⌘-nhấp vào trò chuyện trong thanh bên để lưu trữ.', + nothingArchived: 'Không có gì được lưu trữ', + noSearchMatch: 'Không có trò chuyện đã lưu trữ nào khớp với tìm kiếm.', + archiveToHide: 'Lưu trữ trò chuyện để ẩn ở đây.', + unarchive: 'Bỏ lưu trữ', + deletePermanently: 'Xóa vĩnh viễn', + count => `${count} tin nhắn`, + new: 'Phiên mới', + running: 'Phiên đang chạy', + actions: 'Hành động phiên', + reorder: 'Sắp xếp lại', + pin: 'Ghim', + unpin: 'Bỏ ghim', + copyId: 'Sao chép ID', + rename: 'Đổi tên', + archive: 'Lưu trữ', + renameDialog: 'Đổi tên phiên', + renameDesc: 'Đặt tiêu đề dễ nhớ cho trò chuyện này. Để trống để xóa.', + untitled: 'Phiên không tên', + renamed: 'Đã đổi tên', + renameFailed: 'Đổi tên thất bại', + pinned: 'Đã ghim', + results: 'Kết quả', + allPinned: 'Mọi thứ ở đây đều được ghim. Bỏ ghim trò chuyện để hiện trong mục gần đây.', + pinHint: 'Shift-nhấp để ghim · kéo để sắp xếp lại', + loadMore: 'Tải thêm', + noWorkspace: 'Không có không gian làm việc', + ungroup: 'Hiện phiên dưới dạng danh sách đơn', + groupByWorkspace: 'Nhóm phiên theo không gian làm việc', + loadStep: 'Tải', + moreLabel: 'thêm', + nothingArchivedTitle: 'Không có gì được lưu trữ', + deletePermanentlyTitle: 'Xóa vĩnh viễn', + defaultProjectDirTitle: 'Thư mục dự án mặc định', + loadingArchived: 'Đang tải phiên đã lưu trữ…', + restored: 'Đã khôi phục', + projectDirUpdated: 'Đã cập nhật thư mục dự án mặc định', + loadFailed: 'Không thể tải phiên đã lưu trữ', + unarchiveFailed: 'Bỏ lưu trữ thất bại', + deleteFailed: 'Xóa thất bại', + archiveHint: 'Lưu trữ trò chuyện để ẩn ở đây.', + updateDirFailed: 'Không thể cập nhật thư mục mặc định', + clearDirFailed: 'Không thể xóa thư mục mặc định', + }, + mcp: { + title: 'Máy chủ MCP', + addServer: 'Thêm máy chủ', + noServers: 'Chưa cấu hình máy chủ MCP nào.', + loading: 'Đang tải máy chủ MCP…', + servers: 'Máy chủ MCP', + count => `Đã cấu hình ${count}`, + newServer: 'Máy chủ mới', + reloadMCP: 'Tải lại MCP', + reloading: 'Đang tải lại...', + noServersDesc: 'Thêm máy chủ stdio hoặc HTTP để hiển thị công cụ MCP.', + name: 'Tên', + namePlaceholder: 'hệ thống tệp', + serverJSON: 'JSON máy chủ', + editServer: 'Sửa máy chủ', + saveServer: 'Lưu máy chủ', + saving: 'Đang lưu...', + remove: 'Xóa', + disabled: 'đã tắt', + nameRequired: 'Cần nhập tên', + nameRequiredDesc: 'Đặt khóa cấu hình cho máy chủ MCP này.', + invalidJson: 'Cấu hình máy chủ phải là đối tượng JSON', + invalidJsonDesc: 'JSON MCP không hợp lệ', + saved: 'Đã lưu máy chủ MCP', + name => `${name} sẽ có hiệu lực sau khi tải lại MCP.`, + saveFailed: 'Lưu thất bại', + removeFailed: 'Xóa thất bại', + gatewayUnavailable: 'Cổng không khả dụng', + gatewayUnavailableDesc: 'Kết nối lại cổng trước khi tải lại MCP.', + reloadedTitle: 'Đã tải lại công cụ MCP', + reloadedDesc: 'Lược đồ công cụ mới sẽ áp dụng cho các lượt mới.', + reloadFailed: 'Tải lại MCP thất bại', + giveConfigKey: 'Đặt khóa cấu hình cho máy chủ MCP này.', + reconnectGateway: 'Kết nối lại cổng trước khi tải lại MCP.', + newSchemas: 'Lược đồ công cụ mới sẽ áp dụng cho các lượt mới.', + loadingServers: 'Đang tải máy chủ MCP...', + serverName: 'Tên', + serversTitle: 'Máy chủ MCP', + noServersTitle: 'Không có máy chủ MCP', + failedToLoad: 'Không thể tải cấu hình MCP', + invalidJsonShort: 'JSON MCP không hợp lệ', + serverSaved: 'Đã lưu máy chủ MCP', + toolsReloaded: 'Đã tải lại công cụ MCP', + emptyDesc: 'Thêm máy chủ stdio hoặc HTTP để hiển thị công cụ MCP.', + }, + tools: { + title: 'Công cụ & Kỹ năng', + noTools: 'Không có công cụ nào khả dụng.', + }, + nav: { + home: 'Trang chủ', + chat: 'Trò chuyện', + settings: 'Cài đặt', + files: 'Tệp', + terminal: 'Terminal', + }, + header: { + search: 'Tìm kiếm hoặc nhập lệnh…', + }, + model: { + auxTask: { + vision: 'Thị giác', + visionHint: 'Phân tích hình ảnh', + web_extract: 'Trích xuất web', + web_extractHint: 'Tóm tắt trang', + compression: 'Nén', + compressionHint: 'Thu gọn ngữ cảnh', + session_search: 'Tìm phiên', + session_searchHint: 'Truy vấn gợi nhớ', + skills_hub: 'Trung tâm kỹ năng', + skills_hubHint: 'Tìm kỹ năng', + approval: 'Phê duyệt', + approvalHint: 'Tự động phê duyệt thông minh', + mcp: 'MCP', + mcpHint: 'Định tuyến công cụ MCP', + title_generation: 'Tạo tiêu đề', + title_generationHint: 'Tiêu đề phiên', + curator: 'Giám tuyển', + curatorHint: 'Đánh giá sử dụng kỹ năng', + }, + mainModel: 'Mô hình chính', + mainDesc: 'Áp dụng cho phiên mới. Dùng bộ chọn mô hình trong khung soạn để đổi nhanh cho trò chuyện hiện tại.', + providerPlaceholder: 'Nhà cung cấp', + modelPlaceholder: 'Mô hình', + apply: 'Áp dụng', + applying: 'Đang áp dụng…', + auxiliaryModels: 'Mô hình phụ trợ', + auxiliaryDesc: 'Các tác vụ phụ mặc định dùng mô hình chính. Gán mô hình riêng cho bất kỳ tác vụ nào để ghi đè.', + resetAllToMain: 'Đặt lại tất cả về chính', + setToMain: 'Đặt về chính', + change: 'Thay đổi', + cancel: 'Hủy', + autoUseMain: 'tự động · dùng mô hình chính', + providerDefault: '(mặc định nhà cung cấp)', + loading: 'Đang tải cấu hình mô hình…', + options: 'Tùy chọn', + thinking: 'Suy nghĩ', + fast: 'Nhanh', + effort: 'Nỗ lực', + noOptions: 'Không có tùy chọn cho mô hình này', + optionUpdateFailed: 'Cập nhật tùy chọn mô hình thất bại', + fastModeUpdateFailed: 'Cập nhật chế độ nhanh thất bại', + effortMinimal: 'Tối thiểu', + effortLow: 'Thấp', + effortMedium: 'Trung bình', + effortHigh: 'Cao', + effortMax: 'Tối đa', + switch: 'Đổi mô hình', + unknown: '(không xác định)', + filterPlaceholder: 'Lọc nhà cung cấp và mô hình...', + persistGlobal: 'Lưu toàn cục', + persistGlobalSession: 'Lưu toàn cục (nếu không chỉ cho phiên này)', + couldNotLoad: 'Không thể tải mô hình', + proLockedDesc: 'Mô hình Pro cần đăng ký Nous trả phí.', + priceTooltip: 'Giá đầu vào / đầu ra trên một triệu token', + freePrice: 'Miễn phí', + currentLabel: 'hiện tại:', + addProviderBtn: 'Thêm nhà cung cấp', + }, + updates: { + checking: 'Đang kiểm tra cập nhật…', + available: 'Có bản cập nhật', + downloading: 'Đang tải xuống…', + installing: 'Đang cài đặt…', + restart: 'Khởi động lại để cập nhật', + stageGettingReady: 'Đang chuẩn bị…', + stageDownloading: 'Đang tải xuống…', + stageAlmostThere: 'Sắp xong…', + stageFinishingUp: 'Đang hoàn tất…', + stageRestarting: 'Đang khởi động lại Hermes…', + stageManual: 'Cập nhật từ terminal của bạn', + stageError: 'Cập nhật bị tạm dừng', + updatingHermes: 'Đang cập nhật Hermes…', + lookingForUpdates: 'Đang tìm bản cập nhật…', + couldntCheck: 'Không thể kiểm tra cập nhật', + updateNotAvailable: 'Không có bản cập nhật', + checkConnection: 'Kiểm tra kết nối và thử lại.', + onLatest: 'Bạn đang chạy phiên bản mới nhất.', + allSet: 'Bạn đã sẵn sàng', + newUpdateAvailable: 'Có bản cập nhật mới', + readyToInstall: 'Phiên bản Hermes mới đã sẵn sàng để cài đặt.', + updateNow: 'Cập nhật ngay', + maybeLater: 'Để sau', + count => `+ ${count} thay đổi nữa được bao gồm.`, + count => `+ ${count} thay đổi nữa được bao gồm.`, + updateFromTerminal: 'Cập nhật từ terminal của bạn', + terminalDesc: 'Bạn đã cài đặt Hermes từ dòng lệnh, nên cập nhật cũng chạy ở đó. Dán lệnh này vào terminal của bạn:', + copied: 'Đã sao chép', + copy: 'Sao chép', + pickupNewVersion: 'Hermes sẽ nhận phiên bản mới vào lần khởi chạy tiếp theo.', + done: 'Xong', + updaterDesc: 'Trình cập nhật Hermes sẽ tiếp quản trong cửa sổ riêng và mở lại Hermes khi hoàn tất.', + closeToApply: 'Hermes sẽ đóng để áp dụng bản cập nhật.', + updateDidntFinish: 'Cập nhật chưa hoàn tất', + nothingLost: 'Đừng lo — không mất gì cả. Bạn có thể thử lại ngay bây giờ.', + notNow: 'Không phải bây giờ', + }, + errors: { + generic: 'Đã xảy ra lỗi.', + notFound: 'Không tìm thấy trang.', + noPermission: 'Bạn không có quyền truy cập vào đây.', + somethingBroke: 'Có lỗi trong giao diện', + viewCrashedDesc: 'Giao diện gặp lỗi không mong đợi. Trò chuyện và cài đặt của bạn vẫn an toàn - thử lại, hoặc tải lại cửa sổ.', + noProviders: 'Không có nhà cung cấp nào được xác thực.', + }, + tool: { + toolCall: 'Gọi công cụ', + result: 'Kết quả', + error: 'Lỗi', + timeout: 'Hết thời gian', + cancelled: 'Đã hủy', + running: 'Đang chạy', + recovered: 'Đã khôi phục', + done: 'Xong', + output: 'Đầu ra công cụ', + searchResults: 'Kết quả tìm kiếm', + rawResponse: 'Phản hồi thô', + stdout: 'stdout', + stderr: 'stderr', + copyActivity: 'Sao chép hoạt động', + recoveredAfter: 'Đã khôi phục sau 1 bước thất bại', + count => `Đã khôi phục sau ${count} bước thất bại`, + oneStepFailed: '1 bước thất bại', + count => `${count} bước thất bại`, + }, + composer: { + startingHermes: 'Đang khởi động Hermes...', + sendFollowUp: 'Gửi tiếp', + message: 'Tin nhắn', + editingQueued: 'Đang sửa lượt đã xếp hàng trong khung soạn', + attach: 'Đính kèm', + files: 'Tệp…', + folder: 'Thư mục…', + images: 'Hình ảnh…', + pasteImage: 'Dán hình ảnh', + url: 'URL…', + promptSnippets: 'Đoạn nhắc', + promptSnippetsDesc: 'Chọn một lời nhắc khởi đầu để thả vào khung soạn.', + voiceStart: 'Bắt đầu trò chuyện giọng nói', + queue: 'Xếp hàng tin nhắn', + speaking: 'Đang nói', + transcribing: 'Đang chuyển lời', + muted: 'Đã tắt tiếng', + listening: 'Đang nghe', + unmuteMic: 'Bật mic', + muteMic: 'Tắt mic', + stopListening: 'Dừng nghe và gửi', + endVoice: 'Kết thúc trò chuyện giọng nói', + end: 'Kết thúc', + stopDictation: 'Dừng đọc chính tả', + transcribingDictation: 'Đang chuyển lời đọc chính tả', + voiceDictation: 'Đọc chính tả bằng giọng nói', + addContext: 'Thêm ngữ cảnh', + }, + models: { + title: 'Mô hình', + search: 'Tìm mô hình', + addProvider: 'Thêm nhà cung cấp…', + }, + install: { + title: 'Hermes cần cài đặt một lần', + desc: 'Cài đặt tự động lần đầu chưa khả dụng trên', + descEnd: '. Mở Terminal và chạy lệnh bên dưới, sau đó khởi chạy lại ứng dụng này. Các lần sau sẽ bỏ qua bước này.', + installCommand: 'Lệnh cài đặt', + copyCommand: 'Sao chép lệnh', + viewDocs: 'Xem tài liệu cài đặt', + willInstallTo: 'Sẽ cài đặt vào', + iRanIt: 'Tôi đã chạy -- thử lại', + failed: 'Cài đặt thất bại', + settingUp: 'Đang thiết lập Hermes Agent', + finishingUp: 'Đang hoàn tất', + failedDesc: 'Một trong các bước cài đặt thất bại. Trên Windows, điều này có thể xảy ra nếu một phiên bản Hermes CLI hoặc desktop khác đang chạy. Dừng tất cả phiên bản Hermes đang chạy, sau đó thử lại. Kiểm tra chi tiết bên dưới hoặc nhật ký desktop để xem bản ghi đầy đủ.', + setupDesc: 'Đây là thiết lập một lần. Trình cài đặt Hermes đang tải các phụ thuộc và cấu hình máy của bạn. Các lần khởi chạy sau sẽ bỏ qua bước này.', + fetchingManifest: 'Đang tải tệp kê khai cài đặt...', + error: 'Lỗi', + showOutput: 'Hiện đầu ra cài đặt', + hideOutput: 'Ẩn đầu ra cài đặt', + noOutput: 'Chưa có đầu ra.', + cancelInstall: 'Hủy cài đặt', + cancelling: 'Đang hủy...', + copyOutput: 'Sao chép đầu ra', + copied: 'Đã sao chép!', + reloadRetry: 'Tải lại và thử lại', + saveLogs: 'Bản ghi đầy đủ đã lưu vào', + stepsComplete: 'bước đã hoàn thành', + nowLabel: 'bây giờ', + line: 'dòng', + lines: 'dòng', + }, + previewConsole: { + resizeLabel: 'Đổi kích thước bảng điều khiển xem trước', + noMessages: 'Chưa có tin nhắn bảng điều khiển nào.', + }, + boot: { + ipcUnavailable: 'Cầu nối IPC desktop không khả dụng.', + backendExited: 'Tiến trình nền Hermes đã thoát trong khi khởi động.', + backendStoppedTitle: 'Backend đã dừng', + backendStoppedMessage: 'Tiến trình nền Hermes đã thoát.', + startingConnection: 'Đang khởi động kết nối desktop', + connectingGateway: 'Đang kết nối cổng desktop trực tiếp', + loadingConfig: 'Đang tải cài đặt Hermes', + loadingSessions: 'Đang tải phiên gần đây', + desktopBootFailed: 'Khởi động desktop thất bại', + couldNotStart: 'Hermes không thể khởi động', + recoveryDesc: 'Cổng nền không khởi động được. Thử một trong các bước khôi phục bên dưới — không có gì ở đây xóa trò chuyện hoặc cài đặt của bạn.', + retry: 'Thử lại', + repairInstall: 'Sửa cài đặt', + useLocalGateway: 'Dùng cổng cục bộ', + openLogs: 'Mở nhật ký', + repairHint: 'Sửa chạy lại trình cài đặt và có thể mất vài phút trên máy mới.', + showLogs: 'Hiện nhật ký gần đây', + hideLogs: 'Ẩn nhật ký gần đây', + }, + urlDialog: { + title: 'Đính kèm URL', + description: 'Hermes sẽ tải trang và đưa vào làm ngữ cảnh cho lượt này.', + placeholder: 'https://example.com/bai-viet', + hint: 'Bao gồm URL đầy đủ, ví dụ:', + attach: 'Đính kèm', + }, + titlebar: { + hideSidebar: 'Ẩn thanh bên', + showSidebar: 'Hiện thanh bên', + search: 'Tìm kiếm', + searchTitle: 'Tìm phiên, chế độ xem và hành động', + hideRightSidebar: 'Ẩn thanh bên phải', + showRightSidebar: 'Hiện thanh bên phải', + unmuteHaptics: 'Bật phản hồi rung', + muteHaptics: 'Tắt phản hồi rung', + openSettings: 'Mở cài đặt', + profiles: 'Hồ sơ', + profilesDesc: 'Môi trường Hermes nâng cao cho các nhân vật, cấu hình, kỹ năng và SOUL.md riêng biệt.', + manageProfiles: 'Quản lý hồ sơ', + language: 'Ngôn ngữ', + languageDesc: 'Chọn ngôn ngữ hiển thị cho giao diện.', + }, + pagination: { + ariaLabel: 'phân trang', + prevAria: 'Đi đến trang trước', + prev: 'Trước', + nextAria: 'Đi đến trang sau', + next: 'Sau', + }, + bootstrap: { + pending: 'Đang chờ', + running: 'Đang cài đặt', + done: 'Xong', + skipped: 'Đã bỏ qua', + failed: 'Thất bại', + }, + sidebar: { + sheetTitle: 'Thanh bên', + sheetDesc: 'Hiển thị thanh bên trên di động.', + toggle: 'Chuyển đổi thanh bên', + }, + clarify: { + hermesIsAsking: 'Hermes đang hỏi', + loadingQuestion: 'Đang tải câu hỏi…', + otherTypeAnswer: 'Khác (nhập câu trả lời của bạn)', + placeholderAnswer: 'Nhập câu trả lời của bạn…', + cmdEnterToSend: '⌘/Ctrl + Enter để gửi', + back: 'Quay lại', + skip: 'Bỏ qua', + couldNotSend: 'Không thể gửi phản hồi làm rõ', + n => `1–${n} để chọn`, + }, + intro: { + fallback1h: 'Hôm nay chúng ta làm gì?', + fallback1b: 'Gửi lỗi, nhánh, kế hoạch hoặc ý tưởng thô. Tôi sẽ kiểm tra repo và biến nó thành bước cụ thể tiếp theo.', + fallback2h: 'Bạn đang nghĩ gì?', + fallback2b: 'Mang mã, câu hỏi hoặc phần bế tắc đến đây. Tôi sẽ đọc tình hình trước khi thực hiện thay đổi.', + fallback3h: 'Hermes nên xem gì?', + fallback3b: 'Gửi tác vụ, đường dẫn thất bại hoặc kế hoạch dang dở. Tôi sẽ giúp biến nó thành hành động.', + fallback4h: 'Chúng ta bắt đầu từ đâu?', + fallback4b: 'Mang vấn đề, mục tiêu hoặc tệp đến đây. Tôi sẽ kiểm tra trước và giữ bước tiếp theo cụ thể.', + fallback5h: 'Điều gì cần chú ý?', + fallback5b: 'Gửi ngữ cảnh bạn có. Tôi sẽ giúp sắp xếp thành kế hoạch hoặc bản sửa.', + personality: { + label => `Chế độ ${label} đang bật. Chúng ta nên làm gì?`, + body1: 'Gửi tác vụ, tệp hoặc ý tưởng thô. Tôi sẽ dùng giọng điệu đã cấu hình và giữ công việc gắn với repo này.', + label => `${label} Hermes cần xem gì?`, + body2: 'Mang ngữ cảnh hoặc phần bế tắc đến đây. Tôi sẽ thích ứng với tính cách đã cấu hình của bạn.', + label => `Chế độ ${label} đã sẵn sàng.`, + body3: 'Gửi vấn đề, tệp hoặc ý tưởng. Tôi sẽ theo tính cách bạn đã cấu hình.', + label => `${label} Hermes nên giải quyết gì?`, + body4: 'Thả tác vụ vào đây. Tôi sẽ giữ công việc gắn với repo.', + heading5: 'Chúng ta bắt đầu từ đâu?', + label => `Đưa tôi ngữ cảnh và tôi sẽ trả lời ở chế độ ${label}.`, + }, + brand: 'HERMES AGENT', + }, + artifacts: { + noArtifactsFound: 'Không tìm thấy tạo phẩm nào', + }, + agents: { + spawnTree: 'Cây phân nhánh', + liveSubagentActivity: 'Hoạt động subagent trực tiếp cho lượt hiện tại.', + noLiveSubagents: 'Không có subagent trực tiếp', + files: 'Tệp', + label: 'Tác tử', + open: 'Mở tác tử', + close: 'Đóng tác tử', + subagent: 'tác tử phụ', + subagents: 'tác tử phụ', + failed: 'thất bại', + running: 'đang chạy', + }, + provider: { + desc: { + nousPortal: 'Ghi đè URL cơ sở Cổng Nous', + openRouter: 'Khóa API OpenRouter (cho thị giác, trợ lý trích xuất web và MoA)', + google: 'Khóa API Google AI Studio (cũng được nhận dạng là GEMINI_API_KEY)', + gemini: 'ID dự án GCP cho các gói Gemini trả phí (gói miễn phí tự động cấp)', + anthropic: 'Khóa API Anthropic', + deepseek: 'URL cơ sở API DeepSeek tùy chỉnh (nâng cao)', + xai: 'Ghi đè URL cơ sở xAI', + huggingface: 'Ghi đè URL cơ sở Nhà cung cấp suy luận Hugging Face', + kimi: 'Khóa API Kimi / Moonshot Trung Quốc', + minimax: 'Ghi đè URL cơ sở MiniMax (Trung Quốc)', + minimaxCn: 'Khóa API MiniMax Trung Quốc', + dashscope: 'URL cơ sở DashScope tùy chỉnh (mặc định: điểm cuối tương thích OpenAI coding-intl)', + glm: 'Khóa API GLM (Z.AI)', + nvidia: 'Ghi đè URL cơ sở NVIDIA NIM (vd: http://localhost:8000/v1 cho NIM cục bộ)', + opencodeGo: 'Khóa API OpenCode Go', + opencodeZen: 'Khóa API OpenCode Zen', + xiaomi: 'Ghi đè URL cơ sở Xiaomi MiMo (mặc định: https://api.xiaomimimo.com/v1)', + kiloCode: 'Khóa API Kilo Code', + aiGateway: 'Khóa API AI Gateway (Vercel AI Gateway)', + browserbase: 'BROWSERBASE_API_KEY', + elevenLabs: 'Khóa API ElevenLabs', + openai: 'Khóa API OpenAI (cho xử lý giọng nói qua proxy)', + mistral: 'Khóa API Mistral (cho STT/TTS)', + groq: 'Khóa API Groq (cho STT)', + tavily: 'TAVILY_API_KEY', + firecrawl: 'URL API Firecrawl cho phiên bản tự lưu trữ (tùy chọn)', + fal: 'FAL_KEY', + nous: 'Ghi đè URL cơ sở Cổng Nous', + openrouter: 'Khóa API OpenRouter (cho thị giác, trợ lý trích xuất web và MoA)', + lmstudio: 'Ghi đè URL cơ sở Z.AI / GLM', + zai: 'URL cơ sở Azure Foundry (đặt qua \'hermes model\' cho cấu hình điểm cuối cụ thể)', + stepfun: 'Ghi đè URL cơ sở StepFun Step Plan', + arcee: 'Ghi đè URL cơ sở Arcee AI', + gmi: 'Ghi đè URL cơ sở GMI Cloud', + qwenportal: 'Ghi đè URL cơ sở Cổng Qwen (mặc định: https://portal.qwen.ai/v1)', + opencodego: 'Ghi đè URL cơ sở OpenCode Go', + ollamacloud: 'Ghi đè URL cơ sở Ollama Cloud (mặc định: https://ollama.com/v1)', + awsbedrock: 'Hồ sơ AWS được đặt tên cho xác thực Bedrock (từ ~/.aws/credentials)', + exa: 'Khóa API Exa cho tìm kiếm web và nội dung AI', + parallel: 'Khóa API Parallel cho tìm kiếm và trích xuất web AI', + }, + }, +} +) diff --git a/apps/desktop/src/locales/TRANSLATING.md b/apps/desktop/src/locales/TRANSLATING.md new file mode 100644 index 000000000000..9e61fc75a598 --- /dev/null +++ b/apps/desktop/src/locales/TRANSLATING.md @@ -0,0 +1,53 @@ +# Adding a New Language to Hermes Desktop + +## Quick Start + +1. Copy the English source file as your template: + ```bash + cp src/locales/en.json src/locales/{your-code}.json + ``` + +2. Translate the values in your new file. Group by section prefix: + - `appearance.*` — Settings > Appearance + - `settings.*` — Settings sidebar + - `chat.*` — Chat interface + - `commandCenter.*` — Command center + - `composer.*` — Message composer + - `gateway.*` — Gateway settings + - `model.*` — Model settings & auxiliary tasks + - `sessions.*` — Sessions list + - `onboarding.*` — First-run setup + - `config.*` — Config panel labels & descriptions + - `mcp.*` / `keys.*` — MCP & API Keys settings + - `common.*` — Shared labels (Save, Cancel, etc.) + - `nav.*` — Navigation + - `tool.*` — Tool output + - `errors.*` / `updates.*` / `boot.*` — System messages + +3. Add your language's self-name to the `language.{code}` entry + +4. Open a PR with just your new `{code}.json` file + +## Auto-Discovery + +The i18n system uses `import.meta.glob` — any `.json` file in `src/locales/` is automatically detected. The language selector in Settings > Appearance will pick it up without any code changes. + +## Translation Guidelines + +- Keep `{variable}` placeholders intact (e.g., `{count}`, `{name}`, `{time}`) +- Do NOT translate language self-name keys (`language.en`, `language.ja`, etc.) +- Do NOT translate provider names in `keys.*` descriptions +- Use natural, conversational tone +- Test by building and running: `npm run build && npm run pack` + +## Current Status + +| Language | Code | Keys Translated | Coverage | +|----------|------|----------------|----------| +| English (source) | en | 857/857 | 100% | +| Simplified Chinese | zh-CN | 843/857 | 98.4% | +| Japanese | ja | 79/857 | 9.2% | +| Korean | ko | 79/857 | 9.2% | +| German | de | 58/857 | 6.8% | +| Spanish | es | 58/857 | 6.8% | +| French | fr | 58/857 | 6.8% | diff --git a/apps/desktop/src/locales/ar.json b/apps/desktop/src/locales/ar.json new file mode 100644 index 000000000000..3557d0fab8ba --- /dev/null +++ b/apps/desktop/src/locales/ar.json @@ -0,0 +1,864 @@ +{ + "appearance.title": "المظهر", + "appearance.description": "هذه إعدادات عرض خاصة بسطح المكتب. يتحكم الوضع في السطوع؛ ويتحكم السمة في لوحة الألوان وتصميم سطح المحادثة.", + "appearance.colorMode": "وضع الألوان", + "appearance.colorModeDesc": "اختر وضعًا ثابتًا أو دع Hermes يتبع إعداد النظام.", + "appearance.theme": "السمة", + "appearance.themeDesc": "اختر لوحة ألوان لسطح المحادثة وألوان الواجهة.", + "appearance.mode.light": "فاتح", + "appearance.mode.lightDesc": "أسطح مكتب مشرقة", + "appearance.mode.dark": "داكن", + "appearance.mode.darkDesc": "مساحة عمل منخفضة الوهج", + "appearance.mode.system": "النظام", + "appearance.mode.systemDesc": "اتبع مظهر نظام التشغيل", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "ألوان محايدة زجاجية مع لمسات Nous الزرقاء", + "appearance.theme.midnight": "منتصف الليل", + "appearance.theme.midnightDesc": "أزرق بنفسجي عميق مع لمسات باردة", + "appearance.theme.ember": "جمرة", + "appearance.theme.emberDesc": "قرمزي وبرونزي دافئ — أجواء الحدادة", + "appearance.theme.mono": "أحادي", + "appearance.theme.monoDesc": "تدرج رمادي نظيف — بسيط ومركز", + "appearance.theme.cyberpunk": "سايبربانك", + "appearance.theme.cyberpunkDesc": "أخضر نيون على أسود — طرفية ماتركس", + "appearance.theme.slate": "أردوازي", + "appearance.theme.slateDesc": "أزرق أردوازي بارد — سمة مطور مركزة", + "appearance.language": "اللغة", + "appearance.languageDesc": "اختر لغة الواجهة أو دع Hermes يتبع إعداد النظام.", + "language.system": "اتبع النظام", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)", + "language.ar": "العربية", + "settings.title": "الإعدادات", + "settings.appearance": "المظهر", + "settings.model": "النموذج", + "settings.gateway": "البوابة", + "settings.sessions": "الجلسات", + "settings.tools": "الأدوات والمهارات", + "settings.section.chat": "المحادثة", + "settings.section.workspace": "مساحة العمل", + "settings.section.safety": "الأمان", + "settings.section.memory": "الذاكرة والسياق", + "settings.section.voice": "الصوت", + "settings.section.advanced": "متقدم", + "settings.mcp": "خوادم MCP", + "settings.config": "التهيئة", + "settings.keys": "مفاتيح API", + "settings.about": "حول", + "chat.placeholder": "اسألني أي شيء…", + "chat.send": "إرسال", + "chat.stop": "إيقاف", + "chat.thinking": "جاري التفكير…", + "chat.noSession": "لا توجد جلسة نشطة. ابدأ محادثة جديدة.", + "commandCenter.title": "مركز الأوامر", + "commandCenter.noSessions": "لا توجد جلسات بعد.", + "commandCenter.loadingStatus": "جاري تحميل الحالة…", + "commandCenter.recentLogs": "السجلات الحديثة", + "commandCenter.dailyTokens": "الرموز اليومية", + "commandCenter.noActivity": "لا يوجد نشاط يومي.", + "commandCenter.noModelUsage": "لا يوجد استخدام للنماذج بعد.", + "commandCenter.noSkillActivity": "لا يوجد نشاط مهارات بعد.", + "common.loading": "جاري التحميل…", + "common.save": "حفظ", + "common.cancel": "إلغاء", + "common.close": "إغلاق", + "common.delete": "حذف", + "common.confirm": "تأكيد", + "common.search": "بحث…", + "onboarding.welcome": "مرحبًا بك في Hermes", + "onboarding.getStarted": "ابدأ باختيار مزود ونموذج.", + "onboarding.skip": "تخطي", + "onboarding.continue": "متابعة", + "onboarding.finish": "إنهاء", + "file.browser": "متصفح الملفات", + "file.noFiles": "لا توجد ملفات بعد.", + "terminal.title": "الطرفية", + "terminal.newTab": "تبويب جديد", + "terminal.closeTab": "إغلاق التبويب", + "skills.title": "المهارات", + "skills.search": "البحث عن مهارات…", + "skills.noResults": "لم يتم العثور على مهارات.", + "profiles.title": "الملفات الشخصية", + "cron.title": "مهام Cron", + "cron.noJobs": "لا توجد مهام مجدولة.", + "messaging.title": "المراسلة", + "about.version": "الإصدار", + "about.checkUpdates": "التحقق من التحديثات", + "about.upToDate": "Hermes محدث.", + "about.updateAvailable": "يتوفر تحديث.", + "about.license": "رخصة MIT", + "keys.title": "مفاتيح API", + "keys.noKeys": "لم يتم تكوين مفاتيح API.", + "keys.addKey": "إضافة مفتاح", + "config.title": "التهيئة", + "config.edit": "تحرير التهيئة", + "config.reload": "إعادة تحميل التهيئة", + "gateway.title": "البوابة", + "gateway.start": "تشغيل البوابة", + "gateway.stop": "إيقاف البوابة", + "gateway.restart": "إعادة تشغيل البوابة", + "gateway.running": "قيد التشغيل", + "gateway.stopped": "متوقفة", + "sessions.title": "الجلسات", + "sessions.search": "البحث عن جلسات…", + "sessions.noResults": "لم يتم العثور على جلسات.", + "sessions.export": "تصدير", + "sessions.delete": "حذف الجلسة", + "mcp.title": "خوادم MCP", + "mcp.addServer": "إضافة خادم", + "mcp.noServers": "لم يتم تكوين خوادم MCP.", + "tools.title": "الأدوات والمهارات", + "tools.noTools": "لا توجد أدوات متاحة.", + "nav.home": "الرئيسية", + "nav.chat": "المحادثة", + "nav.settings": "الإعدادات", + "nav.files": "الملفات", + "nav.terminal": "الطرفية", + "header.search": "ابحث أو اكتب أمرًا…", + "settings.closeSettings": "إغلاق الإعدادات", + "settings.archivedChats": "المحادثات المؤرشفة", + "settings.exportConfig": "تصدير التهيئة", + "settings.importConfig": "استيراد التهيئة", + "settings.resetDefaults": "إعادة التعيين إلى الإعدادات الافتراضية", + "settings.llmProviders": "مزودو LLM", + "settings.searchPlaceholder.about": "حول Hermes Desktop", + "settings.searchPlaceholder.config": "البحث في الإعدادات…", + "settings.searchPlaceholder.gateway": "اتصال البوابة…", + "settings.searchPlaceholder.keys": "البحث عن مفاتيح API…", + "settings.searchPlaceholder.mcp": "البحث عن خوادم MCP…", + "settings.searchPlaceholder.sessions": "البحث عن الجلسات المؤرشفة…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "الإصدار غير متاح", + "about.updates": "التحديثات", + "about.checkNow": "تحقق الآن", + "about.checking": "جاري التحقق…", + "about.seeWhatsNew": "اطلع على الجديد", + "about.releaseNotes": "ملاحظات الإصدار", + "about.autoUpdates": "التحديثات التلقائية", + "about.autoUpdatesDesc": "يتحقق Hermes من التحديثات تلقائيًا في الخلفية ويخبرك عند توفر تحديث.", + "about.selfUpdateUnsupported": "لا يمكن لهذا الإصدار تحديث نفسه من داخل التطبيق.", + "about.cannotReachServer": "تعذر الوصول إلى خادم التحديثات.", + "about.installingUpdate": "يتم تثبيت تحديث حاليًا.", + "about.updateReady": "يتوفر تحديث جديد (يشمل {count} تغيير).", + "about.updateReady_plural": "يتوفر تحديث جديد (يشمل {count} تغييرات).", + "about.onLatest": "أنت تستخدم أحدث إصدار.", + "about.tapCheckNow": "اضغط \"تحقق الآن\" للبحث عن تحديثات.", + "about.lastChecked": "آخر فحص {time}", + "about.justNow": "الآن", + "about.never": "أبدًا", + "about.minAgo": "قبل {count} دقيقة", + "about.hoursAgo": "قبل {count} ساعة", + "about.daysAgo": "قبل {count} يوم", + "about.buildInfo": "فرع {branch} · إيداع {sha}", + "keys.loading": "جاري تحميل مفاتيح API وبيانات الاعتماد…", + "keys.docs": "الوثائق", + "keys.openDocs": "فتح وثائق المزود", + "keys.hideValue": "إخفاء القيمة", + "keys.revealValue": "إظهار القيمة", + "keys.set": "مُعيّن", + "keys.notSet": "غير مُعيّن", + "keys.replace": "استبدال", + "keys.replaceValue": "استبدال القيمة الحالية", + "keys.enterValue": "أدخل القيمة", + "keys.saving": "جاري الحفظ", + "keys.save": "حفظ", + "keys.cancel": "إلغاء", + "keys.clearValue": "مسح القيمة", + "keys.configured": "تم تكوين {count} من {total}", + "keys.setCount": "تم تعيين {count} من {total}", + "keys.countSet": "تم تعيين {count}", + "keys.countKeys": "{count} مفاتيح", + "keys.otherProviders": "مزودون آخرون", + "keys.categoryTools": "الأدوات", + "keys.categoryMessaging": "المراسلة", + "keys.categorySettings": "الإعدادات", + "config.notSet": "غير مُعيّن", + "config.commaSeparated": "قيم مفصولة بفواصل", + "config.on": "تشغيل", + "config.off": "إيقاف", + "config.none": "لا شيء", + "config.emptyOption": "(لا شيء)", + "config.loading": "جاري تحميل تهيئة Hermes…", + "config.noMatching": "لا توجد إعدادات مطابقة", + "config.noMatchingDesc": "جرّب مصطلح بحث مختلف أو اختر قسمًا آخر.", + "config.results": "{count} نتيجة", + "config.results_plural": "{count} نتائج", + "gateway.loading": "جاري تحميل إعدادات البوابة…", + "gateway.unavailable": "إعدادات البوابة غير متاحة", + "gateway.unavailableDesc": "لا يكشف جسر IPC لسطح المكتب عن إعدادات البوابة.", + "gateway.connection": "اتصال البوابة", + "gateway.envOverride": "تجاوز بيئي", + "gateway.desc": "يشغل Hermes Desktop بوابته المحلية افتراضيًا. استخدم بوابة بعيدة عندما تريد من هذا التطبيق التحكم في خلفية Hermes قيد التشغيل على جهاز آخر أو خلف وكيل موثوق.", + "gateway.envOverrideTitle": "متغيرات البيئة تتحكم في جلسة سطح المكتب هذه.", + "gateway.envOverrideDesc": "ألغِ تعيين {urlVar} و {tokenVar} لاستخدام الإعداد المحفوظ أدناه.", + "gateway.localTitle": "بوابة محلية", + "gateway.localDesc": "تشغيل خلفية Hermes خاصة على localhost. هذا هو الإعداد الافتراضي ويعمل دون اتصال.", + "gateway.remoteTitle": "بوابة بعيدة", + "gateway.remoteDesc": "ربط واجهة سطح المكتب هذه بخلفية Hermes بعيدة باستخدام رمز الجلسة الخاص بها.", + "gateway.remoteUrl": "الرابط البعيد", + "gateway.remoteUrlDesc": "الرابط الأساسي للوحة التحكم البعيدة. بادئات المسار مدعومة، مثل /hermes.", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "رمز الجلسة", + "gateway.sessionTokenDesc": "رمز جلسة لوحة التحكم المستخدم للوصول عبر REST و WebSocket. اتركه فارغًا للإبقاء على الرمز المحفوظ.", + "gateway.sessionTokenPlaceholder": "ألصق رمز الجلسة", + "gateway.existingToken": "رمز موجود {preview}", + "gateway.tokenSaved": "محفوظ", + "gateway.testRemote": "اختبار البعيد", + "gateway.saveRestart": "حفظ لإعادة التشغيل التالية", + "gateway.saveReconnect": "حفظ وإعادة الاتصال", + "gateway.diagnostics": "التشخيص", + "gateway.diagnosticsDesc": "إظهار desktop.log في مدير الملفات — مفيد عند فشل تشغيل البوابة.", + "gateway.openLogs": "فتح السجلات", + "sessions.loading": "جاري التحميل…", + "sessions.defaultProjectDir": "دليل المشروع الافتراضي", + "sessions.defaultProjectDirDesc": "تبدأ الجلسات الجديدة في هذا المجلد ما لم تختر مجلدًا آخر. اتركه فارغًا لاستخدام الدليل الرئيسي.", + "sessions.defaultDir": "الافتراضي هو {fallback}.", + "sessions.notSet": "غير مُعيّن", + "sessions.change": "تغيير", + "sessions.choose": "اختيار", + "sessions.clear": "مسح", + "sessions.archivedTitle": "الجلسات المؤرشفة", + "sessions.archivedDesc": "المحادثات المؤرشفة مخفية من الشريط الجانبي لكنها تحتفظ بجميع رسائلها. اضغط Ctrl/⌘ مع النقر على محادثة في الشريط الجانبي لأرشفتها.", + "sessions.nothingArchived": "لا شيء مؤرشَف", + "sessions.noSearchMatch": "لا توجد محادثات مؤرشفة تطابق بحثك.", + "sessions.archiveToHide": "أرشِف محادثة لإخفائها هنا.", + "sessions.unarchive": "إلغاء الأرشفة", + "sessions.deletePermanently": "حذف نهائي", + "sessions.messages": "{count} رسائل", + "mcp.loading": "جاري تحميل خوادم MCP…", + "mcp.servers": "خوادم MCP", + "mcp.configured": "تم تكوين {count}", + "mcp.newServer": "خادم جديد", + "mcp.reloadMCP": "إعادة تحميل MCP", + "mcp.reloading": "جاري إعادة التحميل...", + "mcp.noServersDesc": "أضف خادم stdio أو HTTP لعرض أدوات MCP.", + "mcp.name": "الاسم", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "JSON الخادم", + "mcp.editServer": "تحرير الخادم", + "mcp.saveServer": "حفظ الخادم", + "mcp.saving": "جاري الحفظ...", + "mcp.remove": "إزالة", + "mcp.disabled": "معطل", + "model.auxTask.vision": "الرؤية", + "model.auxTask.visionHint": "تحليل الصور", + "model.auxTask.web_extract": "استخراج الويب", + "model.auxTask.web_extractHint": "تلخيص الصفحات", + "model.auxTask.compression": "الضغط", + "model.auxTask.compressionHint": "ضغط السياق", + "model.auxTask.session_search": "بحث الجلسات", + "model.auxTask.session_searchHint": "استعلامات الاستدعاء", + "model.auxTask.skills_hub": "مركز المهارات", + "model.auxTask.skills_hubHint": "بحث المهارات", + "model.auxTask.approval": "الموافقة", + "model.auxTask.approvalHint": "موافقة تلقائية ذكية", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "توجيه أدوات MCP", + "model.auxTask.title_generation": "توليد العناوين", + "model.auxTask.title_generationHint": "عناوين الجلسات", + "model.auxTask.curator": "المنسق", + "model.auxTask.curatorHint": "مراجعة استخدام المهارات", + "model.mainModel": "النموذج الرئيسي", + "model.mainDesc": "ينطبق على الجلسات الجديدة. استخدم منتقي النماذج في المحرر للتبديل السريع للمحادثة النشطة.", + "model.providerPlaceholder": "المزود", + "model.modelPlaceholder": "النموذج", + "model.apply": "تطبيق", + "model.applying": "جاري التطبيق…", + "model.auxiliaryModels": "النماذج المساعدة", + "model.auxiliaryDesc": "تعمل المهام المساعدة على النموذج الرئيسي افتراضيًا. عيّن نموذجًا مخصصًا لأي مهمة للتجاوز.", + "model.resetAllToMain": "إعادة تعيين الكل إلى الرئيسي", + "model.setToMain": "تعيين إلى الرئيسي", + "model.change": "تغيير", + "model.cancel": "إلغاء", + "model.autoUseMain": "تلقائي · استخدام النموذج الرئيسي", + "model.providerDefault": "(افتراضي المزود)", + "model.loading": "جاري تحميل تهيئة النموذج…", + "updates.checking": "جاري التحقق من التحديثات…", + "updates.available": "يتوفر تحديث", + "updates.downloading": "جاري التنزيل…", + "updates.installing": "جاري التثبيت…", + "updates.restart": "أعد التشغيل للتحديث", + "errors.generic": "حدث خطأ ما.", + "errors.notFound": "الصفحة غير موجودة.", + "errors.noPermission": "ليس لديك صلاحية الوصول إلى هذا.", + "tool.toolCall": "استدعاء أداة", + "tool.result": "النتيجة", + "tool.error": "خطأ", + "tool.timeout": "انتهت المهلة", + "tool.cancelled": "مُلغى", + "tool.running": "قيد التشغيل", + "tool.recovered": "تم الاسترداد", + "tool.done": "تم", + "tool.output": "مخرجات الأداة", + "tool.searchResults": "نتائج البحث", + "tool.rawResponse": "الرد الخام", + "tool.stdout": "stdout", + "tool.stderr": "stderr", + "tool.copyActivity": "نسخ النشاط", + "composer.startingHermes": "جاري تشغيل Hermes...", + "composer.sendFollowUp": "إرسال متابعة", + "composer.message": "رسالة", + "composer.editingQueued": "تحرير الدور المُنتظر في المحرر", + "composer.attach": "إرفاق", + "composer.files": "ملفات…", + "composer.folder": "مجلد…", + "composer.images": "صور…", + "composer.pasteImage": "لصق صورة", + "composer.url": "رابط…", + "composer.promptSnippets": "مقتطفات التوجيه", + "composer.promptSnippetsDesc": "اختر توجيهًا بدائيًا لإدراجه في المحرر.", + "composer.voiceStart": "بدء محادثة صوتية", + "composer.queue": "وضع الرسالة في الطابور", + "composer.speaking": "يتحدث", + "composer.transcribing": "جاري النسخ", + "composer.muted": "مكتوم", + "composer.listening": "يستمع", + "composer.unmuteMic": "إلغاء كتم الميكروفون", + "composer.muteMic": "كتم الميكروفون", + "composer.stopListening": "إيقاف الاستماع والإرسال", + "composer.endVoice": "إنهاء المحادثة الصوتية", + "composer.end": "إنهاء", + "composer.stopDictation": "إيقاف الإملاء", + "composer.transcribingDictation": "جاري نسخ الإملاء", + "composer.voiceDictation": "الإملاء الصوتي", + "sessions.new": "جلسة جديدة", + "sessions.running": "الجلسة قيد التشغيل", + "sessions.actions": "إجراءات الجلسة", + "sessions.reorder": "إعادة ترتيب", + "sessions.pin": "تثبيت", + "sessions.unpin": "إلغاء التثبيت", + "sessions.copyId": "نسخ المعرّف", + "sessions.rename": "إعادة تسمية", + "sessions.archive": "أرشفة", + "sessions.renameDialog": "إعادة تسمية الجلسة", + "sessions.renameDesc": "أعطِ هذه المحادثة عنوانًا مميزًا. اتركه فارغًا للمسح.", + "sessions.untitled": "جلسة بدون عنوان", + "sessions.renamed": "تمت إعادة التسمية", + "sessions.renameFailed": "فشلت إعادة التسمية", + "sessions.pinned": "مُثبّت", + "sessions.results": "النتائج", + "sessions.allPinned": "كل ما هنا مُثبّت. ألغِ تثبيت محادثة لإظهارها في الحديثة.", + "sessions.pinHint": "Shift + نقرة لتثبيت محادثة · سحب لإعادة الترتيب", + "sessions.loadMore": "تحميل المزيد", + "sessions.noWorkspace": "بدون مساحة عمل", + "sessions.ungroup": "إظهار الجلسات كقائمة واحدة", + "sessions.groupByWorkspace": "تجميع الجلسات حسب مساحة العمل", + "skills.tools": "المهارات والأدوات", + "artifacts": "المُخرجات", + "common.clearSearch": "مسح البحث", + "common.copy": "نسخ", + "common.refresh": "تحديث", + "common.moreActions": "المزيد من الإجراءات", + "common.tryAgain": "حاول مرة أخرى", + "chat.loadingSession": "جاري تحميل الجلسة", + "chat.loadingResponse": "Hermes يحمّل ردًا", + "chat.branchInNewChat": "تفرع في محادثة جديدة", + "chat.readAloud": "قراءة بصوت عالٍ", + "chat.preparingAudio": "جاري تحضير الصوت...", + "chat.stopReading": "إيقاف القراءة", + "chat.editMessage": "تحرير الرسالة", + "chat.editableCheckpoint": "نقطة حفظ قابلة للتحرير", + "chat.restoreCheckpoint": "استعادة نقطة الحفظ", + "chat.goForward": "تقدم للأمام", + "chat.restorePrevCheckpoint": "استعادة نقطة الحفظ السابقة", + "chat.restoreNextCheckpoint": "استعادة نقطة الحفظ التالية", + "models.title": "النماذج", + "models.search": "البحث عن نماذج", + "models.addProvider": "إضافة مزود…", + "errors.somethingBroke": "حدث عطل في الواجهة", + "errors.viewCrashedDesc": "واجهت الواجهة خطأ غير متوقع. محادثاتك وإعداداتك آمنة - حاول مرة أخرى، أو أعد تحميل النافذة.", + "errors.noProviders": "لا يوجد مزودون مصرح لهم.", + "onboarding.setupTitle": "لنقم بإعداد Hermes Agent", + "onboarding.setupDesc": "اربط مزود نماذج لبدء الدردشة. معظم الخيارات تحتاج نقرة واحدة.", + "onboarding.preparing": "جاري تشغيل Hermes…", + "onboarding.installing": "Hermes يُكمل التثبيت. يستغرق هذا عادة أقل من دقيقة في أول تشغيل.", + "onboarding.lookingUp": "جاري البحث عن المزودين...", + "onboarding.otherProviders": "مزودون آخرون", + "onboarding.collapse": "طي", + "onboarding.iHaveKey": "لدي مفتاح API", + "onboarding.recommended": "موصى به", + "onboarding.connected": "متصل", + "onboarding.backToSignIn": "العودة إلى تسجيل الدخول", + "onboarding.getKey": "احصل على مفتاح", + "onboarding.pasteKey": "ألصق مفتاح API", + "onboarding.connect": "اتصال", + "onboarding.connecting": "جاري الاتصال", + "onboarding.copyCode": "نسخ", + "onboarding.startSignIn": "بدء تسجيل الدخول لـ", + "onboarding.verifyingCode": "جاري التحقق من الرمز مع", + "onboarding.pickingModel": "متصل. جاري اختيار نموذج افتراضي...", + "onboarding.signInFailed": "فشل تسجيل الدخول. حاول مرة أخرى.", + "onboarding.pickDifferent": "اختر مزودًا مختلفًا", + "onboarding.signInTitle": "تسجيل الدخول باستخدام", + "onboarding.step1": "فتحنا", + "onboarding.step1End": "في متصفحك.", + "onboarding.step2": "امنح Hermes الصلاحية هناك.", + "onboarding.step3": "انسخ رمز التفويض وألصقه أدناه.", + "onboarding.pasteCode": "ألصق رمز التفويض", + "onboarding.reopenAuth": "إعادة فتح صفحة التفويض", + "onboarding.cancel": "إلغاء", + "onboarding.browserDesc": "فتحنا", + "onboarding.browserDescEnd": "في متصفحك. امنح Hermes الصلاحية هناك وستتصل تلقائيًا — لا حاجة للنسخ أو اللصق.", + "onboarding.waitingAuth": "في انتظار منحك الصلاحية...", + "onboarding.reopenSignIn": "إعادة فتح صفحة تسجيل الدخول", + "onboarding.externalDesc": "يسجل الدخول من خلال CLI الخاص به. شغّل هذا الأمر في الطرفية، ثم عد واختر \"لقد سجلت الدخول\":", + "onboarding.iSignedIn": "لقد سجلت الدخول", + "onboarding.enterCode": "فتحنا", + "onboarding.enterCodeEnd": "في متصفحك. أدخل هذا الرمز هناك:", + "onboarding.reopenVerification": "إعادة فتح صفحة التحقق", + "onboarding.defaultModel": "النموذج الافتراضي", + "onboarding.freeTier": "الطبقة المجانية", + "onboarding.pro": "Pro", + "onboarding.change": "تغيير", + "onboarding.startChatting": "ابدأ الدردشة", + "onboarding.docs": "الوثائق", + "onboarding.close": "إغلاق", + "onboarding.savingError": "تعذر حفظ بيانات الاعتماد.", + "install.title": "يحتاج Hermes إلى تثبيت لمرة واحدة", + "install.desc": "التثبيت التلقائي لأول تشغيل غير متاح على", + "install.descEnd": "بعد. افتح الطرفية وشغّل الأمر أدناه، ثم أعد تشغيل هذا التطبيق. سيتخطى التشغيل اللاحق هذه الخطوة.", + "install.installCommand": "أمر التثبيت", + "install.copyCommand": "نسخ الأمر", + "install.viewDocs": "عرض وثائق التثبيت", + "install.willInstallTo": "سيتم التثبيت في", + "install.iRanIt": "لقد شغلته -- أعد المحاولة", + "install.failed": "فشل التثبيت", + "install.settingUp": "جاري إعداد Hermes Agent", + "install.finishingUp": "جاري الإنهاء", + "install.failedDesc": "فشلت إحدى خطوات التثبيت. على Windows، قد يحدث هذا إذا كان هناك مثيل آخر من Hermes CLI أو سطح المكتب قيد التشغيل. أوقف أي مثيلات Hermes قيد التشغيل، ثم أعد المحاولة. راجع التفاصيل أدناه أو سجل سطح المكتب للنص الكامل.", + "install.setupDesc": "هذا إعداد لمرة واحدة. يقوم مثبّت Hermes بتنزيل التبعيات وتهيئة جهازك. ستتخطى عمليات التشغيل اللاحقة هذه الخطوة.", + "install.fetchingManifest": "جاري جلب بيان التثبيت...", + "install.error": "خطأ", + "install.showOutput": "إظهار مخرجات التثبيت", + "install.hideOutput": "إخفاء مخرجات التثبيت", + "install.noOutput": "لا توجد مخرجات بعد.", + "install.cancelInstall": "إلغاء التثبيت", + "install.cancelling": "جاري الإلغاء...", + "install.copyOutput": "نسخ المخرجات", + "install.copied": "تم النسخ!", + "install.reloadRetry": "إعادة تحميل وإعادة المحاولة", + "install.saveLogs": "تم حفظ النص الكامل في", + "install.stepsComplete": "الخطوات مكتملة", + "install.nowLabel": "الآن", + "chat.composerTip": "نصيحة: اكتب @ للإشارة إلى الملفات مباشرة.", + "composer.addContext": "إضافة سياق", + "sessions.loadStep": "تحميل", + "sessions.moreLabel": "المزيد", + "chat.reconnecting": "جاري إعادة الاتصال بـ Hermes…", + "appearance.toolCallDisplay": "عرض استدعاءات الأدوات", + "appearance.toolCallDisplayDesc": "منتج يخفي حمولات الأدوات الخام؛ تقني يعرض الإدخال/الإخراج الكامل.", + "appearance.toolViewProduct": "منتج", + "appearance.toolViewTechnical": "تقني", + "appearance.toolViewProductDesc": "نشاط أدوات سهل القراءة مع ملخصات موجزة.", + "appearance.toolViewTechnicalDesc": "تضمين وسائط/نتائج الأدوات الخام والتفاصيل منخفضة المستوى.", + "messaging.recommended": "موصى به", + "messaging.recommendedTelegram": "موصى به. معرّفات رقمية مفصولة بفواصل من @userinfobot. بدون هذا، يمكن لأي شخص مراسلة بوتك.", + "messaging.recommendedDiscord": "موصى به. معرّفات مستخدم Discord مفصولة بفواصل.", + "messaging.recommendedSlack": "موصى به. معرّفات مستخدم Slack مفصولة بفواصل.", + "messaging.recommendedMattermost": "موصى به. معرّفات مستخدم Mattermost مفصولة بفواصل.", + "messaging.recommendedMatrix": "موصى به. معرّفات مستخدم مفصولة بفواصل بصيغة @user:server.", + "messaging.recommendedSignal": "موصى به. معرّفات Signal مفصولة بفواصل.", + "messaging.recommendedWhatsApp": "موصى به. أرقام هواتف أو معرّفات WhatsApp مفصولة بفواصل.", + "previewConsole.resizeLabel": "تغيير حجم طرفية المعاينة", + "boot.ipcUnavailable": "جسر IPC لسطح المكتب غير متاح.", + "boot.backendExited": "عملية Hermes الخلفية خرجت أثناء بدء التشغيل.", + "boot.backendStoppedTitle": "توقفت الخلفية", + "boot.backendStoppedMessage": "عملية Hermes الخلفية خرجت.", + "boot.startingConnection": "بدء اتصال سطح المكتب", + "boot.connectingGateway": "توصيل بوابة سطح المكتب الحية", + "boot.loadingConfig": "تحميل إعدادات Hermes", + "boot.loadingSessions": "تحميل الجلسات الحديثة", + "boot.desktopBootFailed": "فشل تشغيل سطح المكتب", + "updates.stageGettingReady": "جاري الاستعداد…", + "updates.stageDownloading": "جاري التنزيل…", + "updates.stageAlmostThere": "أوشكنا على الانتهاء…", + "updates.stageFinishingUp": "جاري الإنهاء…", + "updates.stageRestarting": "جاري إعادة تشغيل Hermes…", + "updates.stageManual": "حدّث من الطرفية", + "updates.stageError": "توقف التحديث مؤقتًا", + "updates.updatingHermes": "جاري تحديث Hermes…", + "updates.lookingForUpdates": "جاري البحث عن تحديثات…", + "updates.couldntCheck": "تعذر التحقق من التحديثات", + "updates.updateNotAvailable": "التحديث غير متاح", + "updates.checkConnection": "تحقق من اتصالك وحاول مرة أخرى.", + "updates.onLatest": "أنت تستخدم أحدث إصدار.", + "updates.allSet": "كل شيء جاهز", + "updates.newUpdateAvailable": "يتوفر تحديث جديد", + "updates.readyToInstall": "إصدار جديد من Hermes جاهز للتثبيت.", + "updates.updateNow": "حدّث الآن", + "updates.maybeLater": "ربما لاحقًا", + "updates.moreChanges": "+ {count} تغيير إضافي مضمن.", + "updates.moreChanges_plural": "+ {count} تغييرات إضافية مضمنة.", + "updates.updateFromTerminal": "حدّث من الطرفية", + "updates.terminalDesc": "لقد ثبّت Hermes من سطر الأوامر، لذا تعمل التحديثات هناك أيضًا. ألصق هذا في الطرفية:", + "updates.copied": "تم النسخ", + "updates.copy": "نسخ", + "updates.pickupNewVersion": "سيتبنى Hermes الإصدار الجديد عند تشغيله في المرة القادمة.", + "updates.done": "تم", + "updates.updaterDesc": "سيتولى مُحدِّث Hermes المهمة في نافذته الخاصة وسيعيد فتح Hermes عند الانتهاء.", + "updates.closeToApply": "سيُغلق Hermes لتطبيق التحديث.", + "updates.updateDidntFinish": "لم يكتمل التحديث", + "updates.nothingLost": "لا تقلق — لم يُفقد شيء. يمكنك المحاولة مرة أخرى الآن.", + "updates.notNow": "ليس الآن", + "commandCenter.sessionsPanel": "لوحة الجلسات", + "commandCenter.systemPanel": "لوحة النظام", + "commandCenter.usagePanel": "لوحة الاستخدام", + "commandCenter.navigate": "تنقل", + "commandCenter.noMatchingResults": "لم يتم العثور على نتائج مطابقة.", + "commandCenter.noSessionsYet": "لا توجد جلسات بعد.", + "commandCenter.unpinSession": "إلغاء تثبيت الجلسة", + "commandCenter.pinSession": "تثبيت الجلسة", + "commandCenter.exportSession": "تصدير الجلسة", + "commandCenter.deleteSession": "حذف الجلسة", + "commandCenter.gatewayRunning": "بوابة المراسلة قيد التشغيل", + "commandCenter.gatewayStopped": "بوابة المراسلة متوقفة", + "commandCenter.restartMsg": "إعادة تشغيل المراسلة", + "commandCenter.updateHermes": "تحديث Hermes", + "commandCenter.noLogsLoaded": "لم يتم تحميل سجلات بعد.", + "commandCenter.closeLabel": "إغلاق مركز الأوامر", + "commandCenter.searchPlaceholder": "البحث عن جلسات، عروض، وإجراءات", + "commandCenter.statSessions": "جلسات", + "commandCenter.statApiCalls": "استدعاءات API", + "commandCenter.statTokens": "الرموز دخول/خروج", + "commandCenter.statEstCost": "التكلفة المقدرة", + "commandCenter.actualCost": "الفعلي {cost}", + "commandCenter.loadingUsage": "جاري تحميل الاستخدام...", + "commandCenter.noUsageDesc": "لا يوجد استخدام في آخر {count} أيام.", + "commandCenter.retry": "إعادة المحاولة", + "commandCenter.tokenInput": "دخل", + "commandCenter.tokenOutput": "خرج", + "commandCenter.noDailyActivity": "لا يوجد نشاط يومي.", + "commandCenter.topModels": "أفضل النماذج", + "commandCenter.topSkills": "أفضل المهارات", + "commandCenter.actionsLabel": "إجراءات", + "commandCenter.systemRunning": "قيد التشغيل", + "commandCenter.systemDone": "تم", + "commandCenter.systemFailed": "فشل", + "mcp.nameRequired": "الاسم مطلوب", + "mcp.nameRequiredDesc": "أعطِ خادم MCP هذا مفتاح تهيئة.", + "mcp.invalidJson": "يجب أن تكون تهيئة الخادم كائن JSON", + "mcp.invalidJsonDesc": "JSON MCP غير صالح", + "mcp.saved": "تم حفظ خادم MCP", + "mcp.savedDesc": "{name} يُطبق بعد إعادة تحميل MCP.", + "mcp.saveFailed": "فشل الحفظ", + "mcp.removeFailed": "فشلت الإزالة", + "mcp.gatewayUnavailable": "البوابة غير متاحة", + "mcp.gatewayUnavailableDesc": "أعد توصيل البوابة قبل إعادة تحميل MCP.", + "mcp.reloadedTitle": "تم إعادة تحميل أدوات MCP", + "mcp.reloadedDesc": "مخططات الأدوات الجديدة تُطبق على الأدوار الجديدة.", + "mcp.reloadFailed": "فشلت إعادة تحميل MCP", + "urlDialog.title": "إرفاق رابط", + "urlDialog.description": "سيجلب Hermes الصفحة ويضمّنها كسياق لهذا الدور.", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "أدرج الرابط الكامل، مثل", + "urlDialog.attach": "إرفاق", + "model.options": "خيارات", + "model.thinking": "التفكير", + "model.fast": "سريع", + "model.effort": "الجهد", + "model.noOptions": "لا توجد خيارات لهذا النموذج", + "model.optionUpdateFailed": "فشل تحديث خيار النموذج", + "model.fastModeUpdateFailed": "فشل تحديث الوضع السريع", + "model.effortMinimal": "أدنى", + "model.effortLow": "منخفض", + "model.effortMedium": "متوسط", + "model.effortHigh": "عالي", + "model.effortMax": "أقصى", + "gateway.connected": "متصل", + "gateway.connecting": "جاري الاتصال", + "gateway.disconnected": "غير متصل", + "gateway.inferenceReady": "الاستدلال جاهز", + "gateway.inferenceNotReady": "الاستدلال غير جاهز", + "gateway.checkingInference": "جاري التحقق من الاستدلال", + "gateway.openSystemPanel": "فتح لوحة النظام", + "gateway.connectionLabel": "الاتصال:", + "gateway.recentActivity": "النشاط الحديث", + "gateway.viewAllLogs": "عرض جميع السجلات →", + "gateway.messagingPlatforms": "منصات المراسلة", + "titlebar.hideSidebar": "إخفاء الشريط الجانبي", + "titlebar.showSidebar": "إظهار الشريط الجانبي", + "titlebar.search": "بحث", + "titlebar.searchTitle": "البحث عن جلسات، عروض، وإجراءات", + "titlebar.hideRightSidebar": "إخفاء الشريط الجانبي الأيمن", + "titlebar.showRightSidebar": "إظهار الشريط الجانبي الأيمن", + "titlebar.unmuteHaptics": "إلغاء كتم الاهتزازات", + "titlebar.muteHaptics": "كتم الاهتزازات", + "titlebar.openSettings": "فتح الإعدادات", + "titlebar.profiles": "الملفات الشخصية", + "titlebar.profilesDesc": "بيئات Hermes متقدمة لشخصيات وتكوينات ومهارات وSOUL.md منفصلة.", + "titlebar.manageProfiles": "إدارة الملفات الشخصية", + "pagination.ariaLabel": "ترقيم الصفحات", + "pagination.prevAria": "الذهاب إلى الصفحة السابقة", + "pagination.prev": "السابق", + "pagination.nextAria": "الذهاب إلى الصفحة التالية", + "pagination.next": "التالي", + "boot.couldNotStart": "تعذر تشغيل Hermes", + "boot.recoveryDesc": "البوابة الخلفية لم تعمل. جرب إحدى خطوات الاسترداد أدناه — لا شيء هنا يحذف محادثاتك أو إعداداتك.", + "boot.retry": "إعادة المحاولة", + "boot.repairInstall": "إصلاح التثبيت", + "boot.useLocalGateway": "استخدام بوابة محلية", + "boot.openLogs": "فتح السجلات", + "boot.repairHint": "الإصلاح يعيد تشغيل المثبت وقد يستغرق بضع دقائق على جهاز جديد.", + "boot.showLogs": "إظهار السجلات الحديثة", + "boot.hideLogs": "إخفاء السجلات الحديثة", + "bootstrap.pending": "معلق", + "bootstrap.running": "جاري التثبيت", + "bootstrap.done": "تم", + "bootstrap.skipped": "تم التخطي", + "bootstrap.failed": "فشل", + "model.switch": "تبديل النموذج", + "model.unknown": "(غير معروف)", + "model.filterPlaceholder": "تصفية المزودين والنماذج...", + "model.persistGlobal": "حفظ بشكل عام", + "model.persistGlobalSession": "حفظ بشكل عام (وإلا لهذه الجلسة فقط)", + "model.couldNotLoad": "تعذر تحميل النماذج", + "model.proLockedDesc": "النماذج Pro تحتاج اشتراك Nous مدفوع.", + "model.priceTooltip": "سعر الإدخال / الإخراج لكل مليون رمز", + "model.freePrice": "مجاني", + "model.currentLabel": "الحالي:", + "model.addProviderBtn": "إضافة مزود", + "sidebar.sheetTitle": "الشريط الجانبي", + "sidebar.sheetDesc": "يعرض الشريط الجانبي للجوال.", + "sidebar.toggle": "تبديل الشريط الجانبي", + "clarify.hermesIsAsking": "Hermes يسأل", + "clarify.loadingQuestion": "جاري تحميل السؤال…", + "clarify.otherTypeAnswer": "أخرى (اكتب إجابتك)", + "clarify.placeholderAnswer": "اكتب إجابتك…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter للإرسال", + "clarify.back": "رجوع", + "clarify.skip": "تخطي", + "clarify.couldNotSend": "تعذر إرسال رد التوضيح", + "clarify.pickLabel": "١–{n} للاختيار", + "tool.recoveredAfter": "تم الاسترداد بعد خطوة فاشلة واحدة", + "tool.recoveredAfterN": "تم الاسترداد بعد {count} خطوات فاشلة", + "tool.oneStepFailed": "فشلت خطوة واحدة", + "tool.nStepsFailed": "فشلت {count} خطوات", + "intro.fallback1h": "ماذا نحرك اليوم؟", + "intro.fallback1b": "أرسل خطأ أو فرعًا أو خطة أو فكرة أولية. سأفحص المستودع وأحولها إلى الخطوة الملموسة التالية.", + "intro.fallback2h": "ما الذي يشغل بالك؟", + "intro.fallback2b": "أحضر الكود أو السؤال أو الجزء العالق. سأقرأ الغرفة قبل إجراء التغييرات.", + "intro.fallback3h": "ما الذي يجب أن ينظر إليه Hermes؟", + "intro.fallback3b": "أرسل المهمة أو المسار الفاشل أو الخطة غير المكتملة. سأساعد في تحويلها إلى عمل.", + "intro.fallback4h": "من أين نبدأ؟", + "intro.fallback4b": "أحضر المشكلة أو الهدف أو الملف. سأفحص أولاً وأبقي الخطوة التالية ملموسة.", + "intro.fallback5h": "ما الذي يحتاج اهتمامًا؟", + "intro.fallback5b": "أرسل السياق الذي لديك. سأساعد في ترتيبه إلى خطة أو إصلاح.", + "intro.personality.heading1": "وضع {label} قيد التشغيل. على ماذا نعمل؟", + "intro.personality.body1": "أرسل المهمة أو الملف أو الفكرة الأولية. سأستخدم صوتك المُعد وأبقي العمل مرتبطًا بهذا المستودع.", + "intro.personality.heading2": "ما الذي يحتاج {label} Hermes رؤيته؟", + "intro.personality.body2": "أحضر السياق أو الجزء العالق. سأتكيف مع شخصيتك المُعدة.", + "intro.personality.heading3": "وضع {label} جاهز.", + "intro.personality.body3": "أرسل المشكلة أو الملف أو الفكرة. سأتبع الشخصية التي قمت بتهيئتها.", + "intro.personality.heading4": "ما الذي يجب أن يعالجه {label} Hermes؟", + "intro.personality.body4": "ضع المهمة هنا. سأبقي العمل مرتبطًا بالمستودع.", + "intro.personality.heading5": "من أين نبدأ؟", + "intro.personality.body5": "أعطني السياق وسأجيب في وضع {label}.", + "intro.brand": "HERMES AGENT", + "install.line": "سطر", + "install.lines": "أسطر", + "artifacts.noArtifactsFound": "لم يتم العثور على مُخرجات", + "previewConsole.noMessages": "لا توجد رسائل طرفية بعد.", + "agents.spawnTree": "شجرة التفريخ", + "agents.liveSubagentActivity": "نشاط الوكيل الفرعي المباشر للدور الحالي.", + "agents.noLiveSubagents": "لا يوجد وكلاء فرعيون مباشرون", + "agents.files": "ملفات", + "profiles.noProfilesYet": "لا توجد ملفات شخصية بعد.", + "profiles.selectProfile": "اختر ملفًا شخصيًا لعرض تفاصيله.", + "profiles.deleteProfile": "حذف الملف الشخصي؟", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "تغييرات غير محفوظة", + "profiles.newProfile": "ملف شخصي جديد", + "profiles.cloneFromDefault": "نسخ من الافتراضي", + "profiles.renameProfile": "إعادة تسمية الملف الشخصي", + "messaging.gatewayStopped": "بوابة المراسلة متوقفة", + "messaging.getCredentials": "احصل على بيانات الاعتماد", + "messaging.required": "مطلوب", + "messaging.unsavedChanges": "تغييرات غير محفوظة", + "messaging.saved": "تم الحفظ", + "cron.deleteCronJob": "حذف مهمة Cron؟", + "cron.optional": "اختياري", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "البوابة", + "gateway.inferenceStatus": "حالة استدلال البوابة", + "agents.label": "الوكلاء", + "agents.open": "فتح الوكلاء", + "agents.close": "إغلاق الوكلاء", + "agents.subagent": "وكيل فرعي", + "agents.subagents": "وكلاء فرعيون", + "agents.failed": "فشل", + "agents.running": "قيد التشغيل", + "cron.label": "Cron", + "cron.open": "فتح مهام cron", + "commandCenter.open": "فتح مركز الأوامر", + "commandCenter.close": "إغلاق مركز الأوامر", + "mcp.giveConfigKey": "أعطِ خادم MCP هذا مفتاح تهيئة.", + "mcp.reconnectGateway": "أعد توصيل البوابة قبل إعادة تحميل MCP.", + "mcp.newSchemas": "مخططات الأدوات الجديدة تُطبق على الأدوار الجديدة.", + "mcp.loadingServers": "جاري تحميل خوادم MCP...", + "mcp.serverName": "الاسم", + "mcp.serversTitle": "خوادم MCP", + "mcp.noServersTitle": "لا توجد خوادم MCP", + "sessions.nothingArchivedTitle": "لا شيء مؤرشَف", + "sessions.deletePermanentlyTitle": "حذف نهائي", + "sessions.defaultProjectDirTitle": "دليل المشروع الافتراضي", + "sessions.loadingArchived": "جاري تحميل الجلسات المؤرشفة…", + "sessions.restored": "تمت الاستعادة", + "sessions.projectDirUpdated": "تم تحديث دليل المشروع الافتراضي", + "gateway.enterUrlFirst": "أدخل رابطًا بعيدًا ورمز جلسة قبل التبديل", + "gateway.enterUrlFirstTest": "أدخل رابطًا بعيدًا ورمز جلسة قبل الاختبار", + "config.saving": "جاري الحفظ…", + "keys.openProviderDocs": "فتح وثائق المزود", + "config.label.defaultModel": "النموذج الافتراضي", + "config.label.contextWindow": "نافذة السياق", + "config.label.fallbackModels": "النماذج الاحتياطية", + "config.label.enabledToolsets": "مجموعات الأدوات المفعلة", + "config.label.timezone": "المنطقة الزمنية", + "config.label.personality": "الشخصية", + "config.label.reasoningBlocks": "كتل الاستدلال", + "config.label.maxAgentSteps": "الحد الأقصى لخطوات الوكيل", + "config.label.imageAttachments": "مرفقات الصور", + "config.label.workingDirectory": "دليل العمل", + "config.label.executionBackend": "خلفية التنفيذ", + "config.label.commandTimeout": "مهلة الأوامر", + "config.label.persistentShell": "طرفية مستمرة", + "config.label.envPassthrough": "تمرير متغيرات البيئة", + "config.label.fileReadLimit": "حد قراءة الملفات", + "config.label.terminalOutputLimit": "حد مخرجات الطرفية", + "config.label.filePageLimit": "حد صفحات الملفات", + "config.label.lineLengthLimit": "حد طول السطر", + "config.label.codeExecutionMode": "وضع تنفيذ الكود", + "config.label.approvalMode": "وضع الموافقة", + "config.label.approvalTimeout": "مهلة الموافقة", + "config.label.confirmMcpReloads": "تأكيد إعادة تحميل MCP", + "config.label.commandAllowlist": "قائمة الأوامر المسموحة", + "config.label.redactSecrets": "حجب الأسرار", + "config.label.allowPrivateUrls": "السماح بالروابط الخاصة", + "config.label.browserPrivateUrls": "تصفح الروابط الخاصة", + "config.label.localBrowserForPrivateUrls": "متصفح محلي للروابط الخاصة", + "config.label.fileCheckpoints": "نقاط حفظ الملفات", + "config.label.checkpointLimit": "حد نقاط الحفظ", + "config.label.voiceShortcut": "اختصار الصوت", + "config.label.maxRecordingLength": "الحد الأقصى للتسجيل", + "config.label.readResponsesAloud": "قراءة الردود بصوت عالٍ", + "config.label.speechToText": "تحويل الكلام إلى نص", + "config.label.speechToTextProvider": "مزود تحويل الكلام إلى نص", + "config.label.localTranscriptionModel": "نموذج النسخ المحلي", + "config.label.transcriptionLanguage": "لغة النسخ", + "config.label.elevenlabsSttModel": "نموذج ElevenLabs STT", + "config.label.elevenlabsLanguage": "لغة ElevenLabs", + "config.label.tagAudioEvents": "وسم الأحداث الصوتية", + "config.label.speakerDiarization": "تمييز المتحدثين", + "config.label.textToSpeechProvider": "مزود تحويل النص إلى كلام", + "config.label.edgeVoice": "صوت Edge", + "config.label.openaiTtsModel": "نموذج OpenAI TTS", + "config.label.openaiVoice": "صوت OpenAI", + "config.label.elevenlabsVoice": "صوت ElevenLabs", + "config.label.elevenlabsModel": "نموذج ElevenLabs", + "config.label.persistentMemory": "ذاكرة دائمة", + "config.label.userProfile": "ملف المستخدم", + "config.label.memoryBudget": "ميزانية الذاكرة", + "config.label.profileBudget": "ميزانية الملف الشخصي", + "config.label.memoryProvider": "مزود الذاكرة", + "config.label.contextEngine": "محرك السياق", + "config.label.autoCompression": "الضغط التلقائي", + "config.label.compressionThreshold": "عتبة الضغط", + "config.label.compressionTarget": "هدف الضغط", + "config.label.protectedRecentMessages": "الرسائل الحديثة المحمية", + "config.label.apiRetries": "إعادة محاولات API", + "config.label.serviceTier": "مستوى الخدمة", + "config.label.toolUseEnforcement": "فرض استخدام الأدوات", + "config.label.subagentModel": "نموذج الوكيل الفرعي", + "config.label.subagentProvider": "مزود الوكيل الفرعي", + "config.label.subagentTurnLimit": "حد أدوار الوكيل الفرعي", + "config.label.parallelSubagents": "الوكلاء الفرعيون المتوازيون", + "config.label.subagentTimeout": "مهلة الوكيل الفرعي", + "config.label.subagentReasoningEffort": "جهد استدلال الوكيل الفرعي", + "config.desc.defaultModel": "يُستخدم للمحادثات الجديدة ما لم تختر نموذجًا مختلفًا في المحرر.", + "config.desc.contextWindow": "اتركه 0 لاستخدام نافذة السياق المكتشفة للنموذج المحدد.", + "config.desc.fallbackModels": "إدخالات مزود:نموذج احتياطية للتجربة إذا فشل النموذج الافتراضي.", + "config.desc.personality": "نمط المساعد الافتراضي للجلسات الجديدة.", + "config.desc.timezone": "يُستخدم عندما يحتاج Hermes إلى سياق التوقيت المحلي. الفراغ يستخدم المنطقة الزمنية للنظام.", + "config.desc.reasoningBlocks": "إظهار أقسام الاستدلال عندما توفرها الخلفية.", + "config.desc.imageAttachments": "يتحكم في كيفية إرسال مرفقات الصور إلى النموذج.", + "config.desc.workingDirectory": "مجلد المشروع الافتراضي لعمل الأدوات والطرفية.", + "config.desc.codeExecutionMode": "مدى صرامة نطاق تنفيذ الكود على المشروع الحالي.", + "config.desc.persistentShell": "الحفاظ على حالة الطرفية بين الأوامر عندما تدعمها الخلفية.", + "config.desc.envPassthrough": "متغيرات البيئة لتمريرها إلى تنفيذ الأدوات.", + "config.desc.fileReadLimit": "الحد الأقصى للأحرف التي يمكن لـ Hermes قراءتها من طلب ملف واحد.", + "config.desc.approvalMode": "كيفية تعامل Hermes مع الأوامر التي تحتاج موافقة صريحة.", + "config.desc.approvalTimeout": "مدة انتظار مطالبات الموافقة قبل انتهاء المهلة.", + "config.desc.redactSecrets": "إخفاء الأسرار المكتشفة من المحتوى المرئي للنموذج عندما يكون ممكنًا.", + "config.desc.fileCheckpoints": "إنشاء نسخ احتياطية للتراجع قبل تعديلات الملفات.", + "config.desc.persistentMemory": "حفظ ذكريات دائمة يمكن أن تساعد الجلسات المستقبلية.", + "config.desc.userProfile": "الاحتفاظ بملف مضغوط لتفضيلات المستخدم.", + "config.desc.contextEngine": "استراتيجية إدارة المحادثات الطويلة بالقرب من حد السياق.", + "config.desc.autoCompression": "تلخيص السياق الأقدم عندما تصبح المحادثات كبيرة.", + "config.desc.readResponsesAloud": "نطق ردود المساعد تلقائيًا.", + "config.desc.speechToText": "تفعيل النسخ الصوتي المحلي أو عبر مزود.", + "config.desc.elevenlabsLanguage": "رمز لغة ISO-639-3 اختياري. الفراغ يسمح لـ ElevenLabs بالكشف التلقائي.", + "config.desc.maxAgentSteps": "الحد الأعلى لأدوار استدعاء الأدوات قبل أن يوقف Hermes التشغيل.", + "mcp.failedToLoad": "فشل تحميل تهيئة MCP", + "mcp.invalidJsonShort": "JSON MCP غير صالح", + "mcp.serverSaved": "تم حفظ خادم MCP", + "mcp.toolsReloaded": "تم إعادة تحميل أدوات MCP", + "mcp.emptyDesc": "أضف خادم stdio أو HTTP لعرض أدوات MCP.", + "sessions.loadFailed": "تعذر تحميل الجلسات المؤرشفة", + "sessions.unarchiveFailed": "فشل إلغاء الأرشفة", + "sessions.deleteFailed": "فشل الحذف", + "sessions.archiveHint": "أرشِف محادثة لإخفائها هنا.", + "sessions.updateDirFailed": "تعذر تحديث الدليل الافتراضي", + "sessions.clearDirFailed": "تعذر مسح الدليل الافتراضي", + "keys.showAdvanced": "إظهار المتقدم", + "keys.loadFailed": "فشل تحميل مفاتيح API", + "keys.credentialSaved": "تم حفظ بيانات الاعتماد", + "keys.credentialRemoved": "تمت إزالة بيانات الاعتماد", + "provider.desc.nousPortal": "تجاوز الرابط الأساسي لبوابة Nous", + "provider.desc.openRouter": "مفتاح OpenRouter API (للرؤية ومساعدي كشط الويب و MoA)", + "provider.desc.google": "مفتاح Google AI Studio API (يُعرف أيضًا كـ GEMINI_API_KEY)", + "provider.desc.gemini": "معرّف مشروع GCP لطبقات Gemini المدفوعة (الطبقة المجانية تُجهّز تلقائيًا)", + "provider.desc.anthropic": "مفتاح Anthropic API", + "provider.desc.deepseek": "رابط DeepSeek API الأساسي المخصص (متقدم)", + "provider.desc.xai": "تجاوز الرابط الأساسي لـ xAI", + "provider.desc.huggingface": "تجاوز الرابط الأساسي لـ Hugging Face Inference Providers", + "provider.desc.kimi": "مفتاح Kimi / Moonshot China API", + "provider.desc.minimax": "تجاوز الرابط الأساسي لـ MiniMax (الصين)", + "provider.desc.minimaxCn": "مفتاح MiniMax China API", + "provider.desc.dashscope": "رابط DashScope أساسي مخصص (الافتراضي: نقطة نهاية coding-intl المتوافقة مع OpenAI)", + "provider.desc.glm": "مفتاح GLM API (Z.AI)", + "provider.desc.nvidia": "تجاوز الرابط الأساسي لـ NVIDIA NIM (مثل http://localhost:8000/v1 لـ NIM المحلي)", + "provider.desc.opencodeGo": "مفتاح OpenCode Go API", + "provider.desc.opencodeZen": "مفتاح OpenCode Zen API", + "provider.desc.xiaomi": "تجاوز الرابط الأساسي لـ Xiaomi MiMo (الافتراضي: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "مفتاح Kilo Code API", + "provider.desc.aiGateway": "مفتاح AI Gateway API (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "مفتاح ElevenLabs API", + "provider.desc.openai": "مفتاح OpenAI API (لمعالجة الصوت عبر الوكيل)", + "provider.desc.mistral": "مفتاح Mistral API (لـ STT/TTS)", + "provider.desc.groq": "مفتاح Groq API (لـ STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "رابط Firecrawl API للحالات المستضافة ذاتيًا (اختياري)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "تجاوز الرابط الأساسي لبوابة Nous", + "provider.desc.openrouter": "مفتاح OpenRouter API (للرؤية ومساعدي كشط الويب و MoA)", + "provider.desc.lmstudio": "تجاوز الرابط الأساسي لـ Z.AI / GLM", + "provider.desc.zai": "رابط Azure Foundry الأساسي (اضبط عبر 'hermes model' لتهيئة خاصة بنقطة النهاية)", + "provider.desc.stepfun": "تجاوز الرابط الأساسي لـ StepFun Step Plan", + "provider.desc.arcee": "تجاوز الرابط الأساسي لـ Arcee AI", + "provider.desc.gmi": "تجاوز الرابط الأساسي لـ GMI Cloud", + "provider.desc.qwenportal": "تجاوز الرابط الأساسي لبوابة Qwen (الافتراضي: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "تجاوز الرابط الأساسي لـ OpenCode Go", + "provider.desc.ollamacloud": "تجاوز الرابط الأساسي لـ Ollama Cloud (الافتراضي: https://ollama.com/v1)", + "provider.desc.awsbedrock": "ملف AWS المسمى لمصادقة Bedrock (من ~/.aws/credentials)", + "provider.desc.exa": "مفتاح Exa API للبحث واستخراج المحتوى المدعوم بالذكاء الاصطناعي", + "provider.desc.parallel": "مفتاح Parallel API للبحث والاستخراج المدعوم بالذكاء الاصطناعي", + "titlebar.language": "اللغة", + "titlebar.languageDesc": "اختر لغة عرض للواجهة." +} \ No newline at end of file diff --git a/apps/desktop/src/locales/de.json b/apps/desktop/src/locales/de.json new file mode 100644 index 000000000000..d3b9485966d7 --- /dev/null +++ b/apps/desktop/src/locales/de.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "Erscheinungsbild", + "appearance.description": "Dies sind Desktop-spezifische Anzeigeeinstellungen. Der Modus steuert die Helligkeit; das Design steuert die Akzentpalette und das Chat-Design.", + "appearance.colorMode": "Farbmodus", + "appearance.colorModeDesc": "Wähle einen festen Modus oder lass Hermes deiner Systemeinstellung folgen.", + "appearance.theme": "Design", + "appearance.themeDesc": "Wähle eine Farbpalette für die Chat-Oberfläche und die Akzente.", + "appearance.mode.light": "Hell", + "appearance.mode.lightDesc": "Helle Desktop-Oberflächen", + "appearance.mode.dark": "Dunkel", + "appearance.mode.darkDesc": "Blendarme Arbeitsumgebung", + "appearance.mode.system": "System", + "appearance.mode.systemDesc": "Systemeinstellung übernehmen", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Glas-Neutraltöne mit Nous-Blau-Akzenten", + "appearance.theme.midnight": "Mitternacht", + "appearance.theme.midnightDesc": "Tiefes Blauviolett mit kühlen Akzenten", + "appearance.theme.ember": "Glut", + "appearance.theme.emberDesc": "Warmes Karminrot und Bronze – Schmiede-Vibes", + "appearance.theme.mono": "Mono", + "appearance.theme.monoDesc": "Klares Graustufen-Design – minimalistisch und fokussiert", + "appearance.theme.cyberpunk": "Cyberpunk", + "appearance.theme.cyberpunkDesc": "Neon-Grün auf Schwarz – Matrix-Terminal", + "appearance.theme.slate": "Schiefer", + "appearance.theme.slateDesc": "Kühles Schieferblau – fokussiertes Entwickler-Design", + "appearance.language": "Sprache", + "appearance.languageDesc": "Wähle die UI-Sprache oder lass Hermes deiner Systemeinstellung folgen.", + "language.system": "System übernehmen", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "Einstellungen", + "settings.appearance": "Erscheinungsbild", + "settings.model": "Modell", + "settings.gateway": "Gateway", + "settings.sessions": "Sitzungen", + "settings.tools": "Tools & Skills", + "settings.section.chat": "Chat", + "settings.section.workspace": "Arbeitsbereich", + "settings.section.safety": "Sicherheit", + "settings.section.memory": "Speicher & Kontext", + "settings.section.voice": "Sprache", + "settings.section.advanced": "Erweitert", + "settings.mcp": "MCP-Server", + "settings.config": "Konfiguration", + "settings.keys": "API-Schlüssel", + "settings.about": "Über", + "chat.placeholder": "Frag mich etwas…", + "chat.send": "Senden", + "chat.stop": "Stopp", + "chat.thinking": "Denkt nach…", + "chat.noSession": "Keine aktive Sitzung. Starte eine neue Unterhaltung.", + "commandCenter.title": "Kommandozentrale", + "commandCenter.noSessions": "Noch keine Sitzungen.", + "commandCenter.loadingStatus": "Lade Status…", + "commandCenter.recentLogs": "Aktuelle Logs", + "commandCenter.dailyTokens": "Tägliche Token", + "commandCenter.noActivity": "Keine tägliche Aktivität.", + "commandCenter.noModelUsage": "Noch keine Modellnutzung.", + "commandCenter.noSkillActivity": "Noch keine Skill-Aktivität.", + "common.loading": "Lädt…", + "common.save": "Speichern", + "common.cancel": "Abbrechen", + "common.close": "Schließen", + "common.delete": "Löschen", + "common.confirm": "Bestätigen", + "common.search": "Suchen…", + "onboarding.welcome": "Willkommen bei Hermes", + "onboarding.getStarted": "Wähle einen Anbieter und ein Modell, um loszulegen.", + "onboarding.skip": "Überspringen", + "onboarding.continue": "Weiter", + "onboarding.finish": "Fertig", + "file.browser": "Dateibrowser", + "file.noFiles": "Noch keine Dateien.", + "terminal.title": "Terminal", + "terminal.newTab": "Neuer Tab", + "terminal.closeTab": "Tab schließen", + "skills.title": "Skills", + "skills.search": "Skills durchsuchen…", + "skills.noResults": "Keine Skills gefunden.", + "profiles.title": "Profile", + "cron.title": "Cron-Jobs", + "cron.noJobs": "Keine geplanten Jobs.", + "messaging.title": "Messaging", + "about.version": "Version", + "about.checkUpdates": "Nach Updates suchen", + "about.upToDate": "Hermes ist auf dem neuesten Stand.", + "about.updateAvailable": "Ein Update ist verfügbar.", + "about.license": "MIT-Lizenz", + "keys.title": "API-Schlüssel", + "keys.noKeys": "Keine API-Schlüssel konfiguriert.", + "keys.addKey": "Schlüssel hinzufügen", + "config.title": "Konfiguration", + "config.edit": "Konfiguration bearbeiten", + "config.reload": "Konfiguration neu laden", + "gateway.title": "Gateway", + "gateway.start": "Gateway starten", + "gateway.stop": "Gateway stoppen", + "gateway.restart": "Gateway neustarten", + "gateway.running": "Läuft", + "gateway.stopped": "Gestoppt", + "sessions.title": "Sitzungen", + "sessions.search": "Sitzungen durchsuchen…", + "sessions.noResults": "Keine Sitzungen gefunden.", + "sessions.export": "Exportieren", + "sessions.delete": "Sitzung löschen", + "mcp.title": "MCP-Server", + "mcp.addServer": "Server hinzufügen", + "mcp.noServers": "Keine MCP-Server konfiguriert.", + "tools.title": "Tools & Skills", + "tools.noTools": "Keine Tools verfügbar.", + "nav.home": "Start", + "nav.chat": "Chat", + "nav.settings": "Einstellungen", + "nav.files": "Dateien", + "nav.terminal": "Terminal", + "header.search": "Suchen oder Befehl eingeben…", + "settings.closeSettings": "Einstellungen schließen", + "settings.archivedChats": "Archivierte Chats", + "settings.exportConfig": "Konfiguration exportieren", + "settings.importConfig": "Konfiguration importieren", + "settings.resetDefaults": "Auf Standard zurücksetzen", + "settings.llmProviders": "LLM-Anbieter", + "settings.searchPlaceholder.about": "Über Hermes Desktop", + "settings.searchPlaceholder.config": "Einstellungen durchsuchen…", + "settings.searchPlaceholder.gateway": "Gateway-Verbindung…", + "settings.searchPlaceholder.keys": "API-Schlüssel durchsuchen…", + "settings.searchPlaceholder.mcp": "MCP-Server durchsuchen…", + "settings.searchPlaceholder.sessions": "Archivierte Sitzungen durchsuchen…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "Version nicht verfügbar", + "about.updates": "Updates", + "about.checkNow": "Jetzt prüfen", + "about.checking": "Prüfe…", + "about.seeWhatsNew": "Neuigkeiten anzeigen", + "about.releaseNotes": "Versionshinweise", + "about.autoUpdates": "Automatische Updates", + "about.autoUpdatesDesc": "Hermes prüft automatisch im Hintergrund nach Updates und benachrichtigt dich, wenn eins bereit ist.", + "about.selfUpdateUnsupported": "Dieser Build kann sich nicht selbst aus der App heraus aktualisieren.", + "about.cannotReachServer": "Der Update-Server konnte nicht erreicht werden.", + "about.installingUpdate": "Ein Update wird gerade installiert.", + "about.updateReady": "Ein neues Update ist bereit ({count} Änderung enthalten).", + "about.updateReady_plural": "Ein neues Update ist bereit ({count} Änderungen enthalten).", + "about.onLatest": "Du bist auf der neuesten Version.", + "about.tapCheckNow": "Tippe auf „Jetzt prüfen\", um nach Updates zu suchen.", + "about.lastChecked": "Zuletzt geprüft {time}", + "about.justNow": "gerade eben", + "about.never": "nie", + "about.minAgo": "vor {count} Min.", + "about.hoursAgo": "vor {count} Std.", + "about.daysAgo": "vor {count} Tagen", + "about.buildInfo": "Branch {branch} · Commit {sha}", + "keys.loading": "Lade API-Schlüssel und Zugangsdaten…", + "keys.docs": "Dokumentation", + "keys.openDocs": "Anbieter-Dokumentation öffnen", + "keys.hideValue": "Wert verbergen", + "keys.revealValue": "Wert anzeigen", + "keys.set": "Gesetzt", + "keys.notSet": "Nicht gesetzt", + "keys.replace": "Ersetzen", + "keys.replaceValue": "Aktuellen Wert ersetzen", + "keys.enterValue": "Wert eingeben", + "keys.saving": "Speichern", + "keys.save": "Speichern", + "keys.cancel": "Abbrechen", + "keys.clearValue": "Wert löschen", + "keys.configured": "{count} von {total} konfiguriert", + "keys.setCount": "{count} von {total} gesetzt", + "keys.countSet": "{count} gesetzt", + "keys.countKeys": "{count} Schlüssel", + "keys.otherProviders": "Andere Anbieter", + "keys.categoryTools": "Tools", + "keys.categoryMessaging": "Messaging", + "keys.categorySettings": "Einstellungen", + "config.notSet": "Nicht gesetzt", + "config.commaSeparated": "kommagetrennte Werte", + "config.on": "An", + "config.off": "Aus", + "config.none": "Keine", + "config.emptyOption": "(keine)", + "config.loading": "Lade Hermes-Konfiguration…", + "config.noMatching": "Keine passenden Einstellungen", + "config.noMatchingDesc": "Versuche einen anderen Suchbegriff oder wähle einen anderen Bereich.", + "config.results": "{count} Ergebnis", + "config.results_plural": "{count} Ergebnisse", + "gateway.loading": "Lade Gateway-Einstellungen…", + "gateway.unavailable": "Gateway-Einstellungen nicht verfügbar", + "gateway.unavailableDesc": "Die Desktop-IPC-Brücke stellt keine Gateway-Einstellungen bereit.", + "gateway.connection": "Gateway-Verbindung", + "gateway.envOverride": "env-Override", + "gateway.desc": "Hermes Desktop startet standardmäßig ein eigenes lokales Gateway. Verwende ein Remote-Gateway, wenn diese App ein bereits laufendes Hermes-Backend auf einem anderen Rechner oder hinter einem vertrauenswürdigen Proxy steuern soll.", + "gateway.envOverrideTitle": "Umgebungsvariablen steuern diese Desktop-Sitzung.", + "gateway.envOverrideDesc": "Entferne {urlVar} und {tokenVar}, um die gespeicherte Einstellung unten zu verwenden.", + "gateway.localTitle": "Lokales Gateway", + "gateway.localDesc": "Starte ein privates Hermes-Backend auf localhost. Dies ist die Standardeinstellung und funktioniert offline.", + "gateway.remoteTitle": "Remote-Gateway", + "gateway.remoteDesc": "Verbinde diese Desktop-Oberfläche mit einem entfernten Hermes-Backend über dessen Sitzungs-Token.", + "gateway.remoteUrl": "Remote-URL", + "gateway.remoteUrlDesc": "Basis-URL für das Remote-Dashboard-Backend. Pfad-Präfixe werden unterstützt, z.B. /hermes.", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "Sitzungs-Token", + "gateway.sessionTokenDesc": "Der Dashboard-Sitzungs-Token für REST- und WebSocket-Zugriff. Leer lassen, um den gespeicherten Token beizubehalten.", + "gateway.sessionTokenPlaceholder": "Sitzungs-Token einfügen", + "gateway.existingToken": "Vorhandener Token {preview}", + "gateway.tokenSaved": "gespeichert", + "gateway.testRemote": "Remote testen", + "gateway.saveRestart": "Für nächsten Neustart speichern", + "gateway.saveReconnect": "Speichern und neu verbinden", + "gateway.diagnostics": "Diagnose", + "gateway.diagnosticsDesc": "desktop.log im Dateimanager anzeigen – nützlich, wenn das Gateway nicht startet.", + "gateway.openLogs": "Logs öffnen", + "sessions.loading": "Lädt…", + "sessions.defaultProjectDir": "Standard-Projektverzeichnis", + "sessions.defaultProjectDirDesc": "Neue Sitzungen starten in diesem Ordner, sofern du keinen anderen wählst. Leer lassen, um dein Home-Verzeichnis zu verwenden.", + "sessions.defaultDir": "Standard: {fallback}.", + "sessions.notSet": "Nicht gesetzt", + "sessions.change": "Ändern", + "sessions.choose": "Auswählen", + "sessions.clear": "Löschen", + "sessions.archivedTitle": "Archivierte Sitzungen", + "sessions.archivedDesc": "Archivierte Chats sind in der Seitenleiste ausgeblendet, behalten aber alle Nachrichten. Strg/⌘-Klick auf einen Chat in der Seitenleiste, um ihn zu archivieren.", + "sessions.nothingArchived": "Nichts archiviert", + "sessions.noSearchMatch": "Keine archivierten Chats entsprechen deiner Suche.", + "sessions.archiveToHide": "Archiviere einen Chat, um ihn hier auszublenden.", + "sessions.unarchive": "Archivierung aufheben", + "sessions.deletePermanently": "Endgültig löschen", + "sessions.messages": "{count} Nachrichten", + "mcp.loading": "Lade MCP-Server…", + "mcp.servers": "MCP-Server", + "mcp.configured": "{count} konfiguriert", + "mcp.newServer": "Neuer Server", + "mcp.reloadMCP": "MCP neu laden", + "mcp.reloading": "Lade neu...", + "mcp.noServersDesc": "Füge einen STDIO- oder HTTP-Server hinzu, um MCP-Tools bereitzustellen.", + "mcp.name": "Name", + "mcp.namePlaceholder": "dateisystem", + "mcp.serverJSON": "Server-JSON", + "mcp.editServer": "Server bearbeiten", + "mcp.saveServer": "Server speichern", + "mcp.saving": "Speichere...", + "mcp.remove": "Entfernen", + "mcp.disabled": "deaktiviert", + "model.auxTask.vision": "Vision", + "model.auxTask.visionHint": "Bildanalyse", + "model.auxTask.web_extract": "Web-Extrakt", + "model.auxTask.web_extractHint": "Seitenzusammenfassung", + "model.auxTask.compression": "Kompression", + "model.auxTask.compressionHint": "Kontext-Verdichtung", + "model.auxTask.session_search": "Sitzungssuche", + "model.auxTask.session_searchHint": "Suchanfragen", + "model.auxTask.skills_hub": "Skills-Hub", + "model.auxTask.skills_hubHint": "Skill-Suche", + "model.auxTask.approval": "Genehmigung", + "model.auxTask.approvalHint": "Intelligente Auto-Genehmigung", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "MCP-Tool-Routing", + "model.auxTask.title_generation": "Titelgenerierung", + "model.auxTask.title_generationHint": "Sitzungstitel", + "model.auxTask.curator": "Kurator", + "model.auxTask.curatorHint": "Skill-Nutzungs-Überprüfung", + "model.mainModel": "Hauptmodell", + "model.mainDesc": "Gilt für neue Sitzungen. Verwende die Modellauswahl im Composer, um das aktive Modell zu wechseln.", + "model.providerPlaceholder": "Anbieter", + "model.modelPlaceholder": "Modell", + "model.apply": "Anwenden", + "model.applying": "Wende an…", + "model.auxiliaryModels": "Hilfsmodelle", + "model.auxiliaryDesc": "Hilfsaufgaben laufen standardmäßig mit dem Hauptmodell. Weise einer Aufgabe ein eigenes Modell zu, um dies zu überschreiben.", + "model.resetAllToMain": "Alle auf Hauptmodell zurücksetzen", + "model.setToMain": "Auf Hauptmodell setzen", + "model.change": "Ändern", + "model.cancel": "Abbrechen", + "model.autoUseMain": "auto · Hauptmodell verwenden", + "model.providerDefault": "(Anbieter-Standard)", + "model.loading": "Lade Modellkonfiguration…", + "updates.checking": "Suche nach Updates…", + "updates.available": "Update verfügbar", + "updates.downloading": "Lade herunter…", + "updates.installing": "Installiere…", + "updates.restart": "Neustarten zum Aktualisieren", + "errors.generic": "Etwas ist schiefgelaufen.", + "errors.notFound": "Seite nicht gefunden.", + "errors.noPermission": "Du hast keine Berechtigung, darauf zuzugreifen.", + "tool.toolCall": "Tool-Aufruf", + "tool.result": "Ergebnis", + "tool.error": "Fehler", + "tool.timeout": "Zeitüberschreitung", + "tool.cancelled": "Abgebrochen", + "tool.running": "Läuft", + "tool.recovered": "Wiederhergestellt", + "tool.done": "Fertig", + "tool.output": "Tool-Ausgabe", + "tool.searchResults": "Suchergebnisse", + "tool.rawResponse": "Rohantwort", + "tool.stdout": "Standardausgabe", + "tool.stderr": "Standardfehlerausgabe", + "tool.copyActivity": "Aktivität kopieren", + "composer.startingHermes": "Starte Hermes...", + "composer.sendFollowUp": "Nachfrage senden", + "composer.message": "Nachricht", + "composer.editingQueued": "Bearbeite wartenden Turn im Composer", + "composer.attach": "Anhängen", + "composer.files": "Dateien…", + "composer.folder": "Ordner…", + "composer.images": "Bilder…", + "composer.pasteImage": "Bild einfügen", + "composer.url": "URL…", + "composer.promptSnippets": "Prompt-Schnipsel", + "composer.promptSnippetsDesc": "Wähle einen Starter-Prompt zum Einfügen in den Composer.", + "composer.voiceStart": "Sprachunterhaltung starten", + "composer.queue": "Nachricht in Warteschlange", + "composer.speaking": "Spricht", + "composer.transcribing": "Transkribiert", + "composer.muted": "Stummgeschaltet", + "composer.listening": "Hört zu", + "composer.unmuteMic": "Mikrofon einschalten", + "composer.muteMic": "Mikrofon stummschalten", + "composer.stopListening": "Zuhören beenden und senden", + "composer.endVoice": "Sprachunterhaltung beenden", + "composer.end": "Beenden", + "composer.stopDictation": "Diktat beenden", + "composer.transcribingDictation": "Transkribiere Diktat", + "composer.voiceDictation": "Sprachdiktat", + "sessions.new": "Neue Sitzung", + "sessions.running": "Sitzung läuft", + "sessions.actions": "Sitzungsaktionen", + "sessions.reorder": "Neu anordnen", + "sessions.pin": "Anheften", + "sessions.unpin": "Lösen", + "sessions.copyId": "ID kopieren", + "sessions.rename": "Umbenennen", + "sessions.archive": "Archivieren", + "sessions.renameDialog": "Sitzung umbenennen", + "sessions.renameDesc": "Gib diesem Chat einen einprägsamen Titel. Leer lassen zum Löschen.", + "sessions.untitled": "Unbenannte Sitzung", + "sessions.renamed": "Umbenannt", + "sessions.renameFailed": "Umbenennung fehlgeschlagen", + "sessions.pinned": "Angeheftet", + "sessions.results": "Ergebnisse", + "sessions.allPinned": "Alles hier ist angeheftet. Löse einen Chat, um ihn in den letzten anzuzeigen.", + "sessions.pinHint": "Shift-Klick auf einen Chat zum Anheften · Ziehen zum Neuanordnen", + "sessions.loadMore": "Mehr laden", + "sessions.noWorkspace": "Kein Arbeitsbereich", + "sessions.ungroup": "Sitzungen als einzelne Liste anzeigen", + "sessions.groupByWorkspace": "Sitzungen nach Arbeitsbereich gruppieren", + "skills.tools": "Skills & Tools", + "artifacts": "Artefakte", + "common.clearSearch": "Suche löschen", + "common.copy": "Kopieren", + "common.refresh": "Aktualisieren", + "common.moreActions": "Weitere Aktionen", + "common.tryAgain": "Erneut versuchen", + "chat.loadingSession": "Lade Sitzung", + "chat.loadingResponse": "Hermes lädt eine Antwort", + "chat.branchInNewChat": "In neuem Chat abzweigen", + "chat.readAloud": "Vorlesen", + "chat.preparingAudio": "Bereite Audio vor...", + "chat.stopReading": "Vorlesen beenden", + "chat.editMessage": "Nachricht bearbeiten", + "chat.editableCheckpoint": "Bearbeitbarer Checkpoint", + "chat.restoreCheckpoint": "Checkpoint wiederherstellen", + "chat.goForward": "Vorwärts", + "chat.restorePrevCheckpoint": "Vorherigen Checkpoint wiederherstellen", + "chat.restoreNextCheckpoint": "Nächsten Checkpoint wiederherstellen", + "models.title": "Modelle", + "models.search": "Modelle durchsuchen", + "models.addProvider": "Anbieter hinzufügen…", + "errors.somethingBroke": "Etwas ist in der Oberfläche kaputtgegangen", + "errors.viewCrashedDesc": "Die Ansicht hat einen unerwarteten Fehler gefunden. Deine Chats und Einstellungen sind sicher – versuche es erneut oder lade das Fenster neu.", + "errors.noProviders": "Keine authentifizierten Anbieter.", + "onboarding.setupTitle": "Lass uns Hermes Agent einrichten", + "onboarding.setupDesc": "Verbinde einen Modellanbieter, um zu chatten. Die meisten Optionen brauchen nur einen Klick.", + "onboarding.preparing": "Starte Hermes…", + "onboarding.installing": "Hermes schließt die Installation ab. Das dauert beim ersten Start normalerweise unter einer Minute.", + "onboarding.lookingUp": "Suche nach Anbietern...", + "onboarding.otherProviders": "Andere Anbieter", + "onboarding.collapse": "Einklappen", + "onboarding.iHaveKey": "Ich habe einen API-Schlüssel", + "onboarding.recommended": "Empfohlen", + "onboarding.connected": "Verbunden", + "onboarding.backToSignIn": "Zurück zur Anmeldung", + "onboarding.getKey": "Schlüssel besorgen", + "onboarding.pasteKey": "API-Schlüssel einfügen", + "onboarding.connect": "Verbinden", + "onboarding.connecting": "Verbinde", + "onboarding.copyCode": "Kopieren", + "onboarding.startSignIn": "Starte Anmeldung für", + "onboarding.verifyingCode": "Überprüfe deinen Code mit", + "onboarding.pickingModel": "verbunden. Wähle ein Standardmodell...", + "onboarding.signInFailed": "Anmeldung fehlgeschlagen. Erneut versuchen.", + "onboarding.pickDifferent": "Anderen Anbieter wählen", + "onboarding.signInTitle": "Anmelden mit", + "onboarding.step1": "Wir haben", + "onboarding.step1End": "in deinem Browser geöffnet.", + "onboarding.step2": "Autorisiere Hermes dort.", + "onboarding.step3": "Kopiere den Autorisierungscode und füge ihn unten ein.", + "onboarding.pasteCode": "Autorisierungscode einfügen", + "onboarding.reopenAuth": "Autorisierungsseite erneut öffnen", + "onboarding.cancel": "Abbrechen", + "onboarding.browserDesc": "Wir haben", + "onboarding.browserDescEnd": "in deinem Browser geöffnet. Autorisiere Hermes dort und du wirst automatisch verbunden – nichts zum Kopieren oder Einfügen.", + "onboarding.waitingAuth": "Warte auf deine Autorisierung...", + "onboarding.reopenSignIn": "Anmeldeseite erneut öffnen", + "onboarding.externalDesc": "meldet sich über die eigene CLI an. Führe diesen Befehl im Terminal aus, komm zurück und wähle „Ich habe mich angemeldet\":", + "onboarding.iSignedIn": "Ich habe mich angemeldet", + "onboarding.enterCode": "Wir haben", + "onboarding.enterCodeEnd": "in deinem Browser geöffnet. Gib diesen Code dort ein:", + "onboarding.reopenVerification": "Verifizierungsseite erneut öffnen", + "onboarding.defaultModel": "Standardmodell", + "onboarding.freeTier": "Kostenlos", + "onboarding.pro": "Pro", + "onboarding.change": "Ändern", + "onboarding.startChatting": "Chat starten", + "onboarding.docs": "Dokumentation", + "onboarding.close": "Schließen", + "onboarding.savingError": "Zugangsdaten konnten nicht gespeichert werden.", + "install.title": "Hermes benötigt eine einmalige Installation", + "install.desc": "Automatische Erstinstallation ist nicht verfügbar auf", + "install.descEnd": "noch. Öffne das Terminal und führe den folgenden Befehl aus, dann starte die App neu. Nachfolgende Starts überspringen diesen Schritt.", + "install.installCommand": "Installationsbefehl", + "install.copyCommand": "Befehl kopieren", + "install.viewDocs": "Installationsdokumentation anzeigen", + "install.willInstallTo": "Wird installiert nach", + "install.iRanIt": "Ich habe es ausgeführt – erneut versuchen", + "install.failed": "Installation fehlgeschlagen", + "install.settingUp": "Richte Hermes Agent ein", + "install.finishingUp": "Fertigstellung", + "install.failedDesc": "Einer der Installationsschritte ist fehlgeschlagen. Unter Windows kann das passieren, wenn eine andere Hermes-CLI- oder Desktop-Instanz läuft. Beende alle laufenden Hermes-Instanzen und versuche es erneut. Details unten oder im Desktop-Log für das vollständige Protokoll.", + "install.setupDesc": "Dies ist eine einmalige Einrichtung. Der Hermes-Installer lädt Abhängigkeiten herunter und konfiguriert deinen Rechner. Nachfolgende Starts überspringen diesen Schritt.", + "install.fetchingManifest": "Lade Installations-Manifest...", + "install.error": "Fehler", + "install.showOutput": "Installer-Ausgabe anzeigen", + "install.hideOutput": "Installer-Ausgabe ausblenden", + "install.noOutput": "Noch keine Ausgabe.", + "install.cancelInstall": "Installation abbrechen", + "install.cancelling": "Breche ab...", + "install.copyOutput": "Ausgabe kopieren", + "install.copied": "Kopiert!", + "install.reloadRetry": "Neu laden und erneut versuchen", + "install.saveLogs": "Vollständiges Protokoll gespeichert unter", + "install.stepsComplete": "Schritte abgeschlossen", + "install.nowLabel": "jetzt", + "chat.composerTip": "Tipp: Gib @ ein, um Dateien inline zu referenzieren.", + "composer.addContext": "Kontext hinzufügen", + "sessions.loadStep": "Laden", + "sessions.moreLabel": "mehr", + "chat.reconnecting": "Verbinde erneut mit Hermes…", + "appearance.toolCallDisplay": "Tool-Aufruf-Anzeige", + "appearance.toolCallDisplayDesc": "Produkt blendet rohe Tool-Daten aus; Technisch zeigt vollständige Ein-/Ausgabe.", + "appearance.toolViewProduct": "Produkt", + "appearance.toolViewTechnical": "Technisch", + "appearance.toolViewProductDesc": "Menschenfreundliche Tool-Aktivität mit kurzen Zusammenfassungen.", + "appearance.toolViewTechnicalDesc": "Rohe Tool-Argumente/Ergebnisse und Details auf niedriger Ebene einbeziehen.", + "messaging.recommended": "Empfohlen", + "messaging.recommendedTelegram": "Empfohlen. Kommagetrennte numerische IDs von @userinfobot. Ohne dies kann jeder deinem Bot eine DM schicken.", + "messaging.recommendedDiscord": "Empfohlen. Kommagetrennte Discord-Benutzer-IDs.", + "messaging.recommendedSlack": "Empfohlen. Kommagetrennte Slack-Benutzer-IDs.", + "messaging.recommendedMattermost": "Empfohlen. Kommagetrennte Mattermost-Benutzer-IDs.", + "messaging.recommendedMatrix": "Empfohlen. Kommagetrennte Benutzer-IDs im Format @benutzer:server.", + "messaging.recommendedSignal": "Empfohlen. Kommagetrennte Signal-Identifikatoren.", + "messaging.recommendedWhatsApp": "Empfohlen. Kommagetrennte Telefonnummern oder WhatsApp-IDs.", + "previewConsole.resizeLabel": "Vorschau-Konsole skalieren", + "boot.ipcUnavailable": "Desktop-IPC-Brücke ist nicht verfügbar.", + "boot.backendExited": "Hermes-Hintergrundprozess wurde während des Starts beendet.", + "boot.backendStoppedTitle": "Backend gestoppt", + "boot.backendStoppedMessage": "Hermes-Hintergrundprozess wurde beendet.", + "boot.startingConnection": "Starte Desktop-Verbindung", + "boot.connectingGateway": "Verbinde Live-Desktop-Gateway", + "boot.loadingConfig": "Lade Hermes-Einstellungen", + "boot.loadingSessions": "Lade letzte Sitzungen", + "boot.desktopBootFailed": "Desktop-Start fehlgeschlagen", + "updates.stageGettingReady": "Vorbereitung…", + "updates.stageDownloading": "Herunterladen…", + "updates.stageAlmostThere": "Fast geschafft…", + "updates.stageFinishingUp": "Abschluss…", + "updates.stageRestarting": "Starte Hermes neu…", + "updates.stageManual": "Update über dein Terminal", + "updates.stageError": "Update pausiert", + "updates.updatingHermes": "Aktualisiere Hermes…", + "updates.lookingForUpdates": "Suche nach Updates…", + "updates.couldntCheck": "Konnte nicht nach Updates suchen", + "updates.updateNotAvailable": "Update nicht verfügbar", + "updates.checkConnection": "Überprüfe deine Verbindung und versuche es erneut.", + "updates.onLatest": "Du verwendest die neueste Version.", + "updates.allSet": "Alles bereit", + "updates.newUpdateAvailable": "Neues Update verfügbar", + "updates.readyToInstall": "Eine neue Version von Hermes ist zur Installation bereit.", + "updates.updateNow": "Jetzt aktualisieren", + "updates.maybeLater": "Vielleicht später", + "updates.moreChanges": "+ {count} weitere Änderung enthalten.", + "updates.moreChanges_plural": "+ {count} weitere Änderungen enthalten.", + "updates.updateFromTerminal": "Update über dein Terminal", + "updates.terminalDesc": "Du hast Hermes von der Kommandozeile installiert, daher laufen Updates auch dort. Füge dies in dein Terminal ein:", + "updates.copied": "Kopiert", + "updates.copy": "Kopieren", + "updates.pickupNewVersion": "Hermes übernimmt die neue Version beim nächsten Start.", + "updates.done": "Fertig", + "updates.updaterDesc": "Der Hermes-Updater übernimmt in einem eigenen Fenster und öffnet Hermes erneut, wenn er fertig ist.", + "updates.closeToApply": "Hermes wird geschlossen, um das Update anzuwenden.", + "updates.updateDidntFinish": "Update wurde nicht abgeschlossen", + "updates.nothingLost": "Keine Sorge – nichts ist verloren. Du kannst es jetzt erneut versuchen.", + "updates.notNow": "Nicht jetzt", + "commandCenter.sessionsPanel": "Sitzungs-Panel", + "commandCenter.systemPanel": "System-Panel", + "commandCenter.usagePanel": "Nutzungs-Panel", + "commandCenter.navigate": "Navigieren", + "commandCenter.noMatchingResults": "Keine passenden Ergebnisse gefunden.", + "commandCenter.noSessionsYet": "Noch keine Sitzungen.", + "commandCenter.unpinSession": "Sitzung lösen", + "commandCenter.pinSession": "Sitzung anheften", + "commandCenter.exportSession": "Sitzung exportieren", + "commandCenter.deleteSession": "Sitzung löschen", + "commandCenter.gatewayRunning": "Messaging-Gateway läuft", + "commandCenter.gatewayStopped": "Messaging-Gateway gestoppt", + "commandCenter.restartMsg": "Messaging neustarten", + "commandCenter.updateHermes": "Hermes aktualisieren", + "commandCenter.noLogsLoaded": "Noch keine Logs geladen.", + "commandCenter.closeLabel": "Kommandozentrale schließen", + "commandCenter.searchPlaceholder": "Sitzungen, Ansichten und Aktionen durchsuchen", + "commandCenter.statSessions": "Sitzungen", + "commandCenter.statApiCalls": "API-Aufrufe", + "commandCenter.statTokens": "Token ein/aus", + "commandCenter.statEstCost": "Gesch. Kosten", + "commandCenter.actualCost": "tatsächlich {cost}", + "commandCenter.loadingUsage": "Lade Nutzung...", + "commandCenter.noUsageDesc": "Keine Nutzung in den letzten {count} Tagen.", + "commandCenter.retry": "Wiederholen", + "commandCenter.tokenInput": "Eingabe", + "commandCenter.tokenOutput": "Ausgabe", + "commandCenter.noDailyActivity": "Keine tägliche Aktivität.", + "commandCenter.topModels": "Top-Modelle", + "commandCenter.topSkills": "Top-Skills", + "commandCenter.actionsLabel": "Aktionen", + "commandCenter.systemRunning": "läuft", + "commandCenter.systemDone": "fertig", + "commandCenter.systemFailed": "fehlgeschlagen", + "mcp.nameRequired": "Name erforderlich", + "mcp.nameRequiredDesc": "Gib diesem MCP-Server einen Konfigurationsschlüssel.", + "mcp.invalidJson": "Server-Konfiguration muss ein JSON-Objekt sein", + "mcp.invalidJsonDesc": "Ungültiges MCP-JSON", + "mcp.saved": "MCP-Server gespeichert", + "mcp.savedDesc": "{name} wird nach MCP-Neuladen wirksam.", + "mcp.saveFailed": "Speichern fehlgeschlagen", + "mcp.removeFailed": "Entfernen fehlgeschlagen", + "mcp.gatewayUnavailable": "Gateway nicht verfügbar", + "mcp.gatewayUnavailableDesc": "Verbinde das Gateway erneut, bevor du MCP neu lädst.", + "mcp.reloadedTitle": "MCP-Tools neu geladen", + "mcp.reloadedDesc": "Neue Tool-Schemas gelten für neue Turns.", + "mcp.reloadFailed": "MCP-Neuladen fehlgeschlagen", + "urlDialog.title": "URL anhängen", + "urlDialog.description": "Hermes ruft die Seite ab und fügt sie als Kontext für diesen Turn hinzu.", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "Gib die vollständige URL ein, z.B.", + "urlDialog.attach": "Anhängen", + "model.options": "Optionen", + "model.thinking": "Nachdenken", + "model.fast": "Schnell", + "model.effort": "Aufwand", + "model.noOptions": "Keine Optionen für dieses Modell", + "model.optionUpdateFailed": "Modelloption-Update fehlgeschlagen", + "model.fastModeUpdateFailed": "Schnellmodus-Update fehlgeschlagen", + "model.effortMinimal": "Minimal", + "model.effortLow": "Niedrig", + "model.effortMedium": "Mittel", + "model.effortHigh": "Hoch", + "model.effortMax": "Maximal", + "gateway.connected": "Verbunden", + "gateway.connecting": "Verbinde", + "gateway.disconnected": "Getrennt", + "gateway.inferenceReady": "Inferenz bereit", + "gateway.inferenceNotReady": "Inferenz nicht bereit", + "gateway.checkingInference": "Prüfe Inferenz", + "gateway.openSystemPanel": "System-Panel öffnen", + "gateway.connectionLabel": "Verbindung:", + "gateway.recentActivity": "Aktuelle Aktivität", + "gateway.viewAllLogs": "Alle Logs anzeigen →", + "gateway.messagingPlatforms": "Messaging-Plattformen", + "titlebar.hideSidebar": "Seitenleiste ausblenden", + "titlebar.showSidebar": "Seitenleiste anzeigen", + "titlebar.search": "Suchen", + "titlebar.searchTitle": "Sitzungen, Ansichten und Aktionen durchsuchen", + "titlebar.hideRightSidebar": "Rechte Seitenleiste ausblenden", + "titlebar.showRightSidebar": "Rechte Seitenleiste anzeigen", + "titlebar.unmuteHaptics": "Haptik einschalten", + "titlebar.muteHaptics": "Haptik ausschalten", + "titlebar.openSettings": "Einstellungen öffnen", + "titlebar.profiles": "Profile", + "titlebar.profilesDesc": "Erweiterte Hermes-Umgebungen für separate Personas, Konfiguration, Skills und SOUL.md.", + "titlebar.manageProfiles": "Profile verwalten", + "pagination.ariaLabel": "Seitennummerierung", + "pagination.prevAria": "Zur vorherigen Seite", + "pagination.prev": "Zurück", + "pagination.nextAria": "Zur nächsten Seite", + "pagination.next": "Weiter", + "boot.couldNotStart": "Hermes konnte nicht starten", + "boot.recoveryDesc": "Das Hintergrund-Gateway ist nicht gestartet. Versuche einen der Wiederherstellungsschritte unten – nichts hier löscht deine Chats oder Einstellungen.", + "boot.retry": "Wiederholen", + "boot.repairInstall": "Installation reparieren", + "boot.useLocalGateway": "Lokales Gateway verwenden", + "boot.openLogs": "Logs öffnen", + "boot.repairHint": "Reparieren führt den Installer erneut aus und kann auf einem frischen Rechner einige Minuten dauern.", + "boot.showLogs": "Aktuelle Logs anzeigen", + "boot.hideLogs": "Aktuelle Logs ausblenden", + "bootstrap.pending": "Ausstehend", + "bootstrap.running": "Installiere", + "bootstrap.done": "Fertig", + "bootstrap.skipped": "Übersprungen", + "bootstrap.failed": "Fehlgeschlagen", + "model.switch": "Modell wechseln", + "model.unknown": "(unbekannt)", + "model.filterPlaceholder": "Anbieter und Modelle filtern...", + "model.persistGlobal": "Global speichern", + "model.persistGlobalSession": "Global speichern (sonst nur diese Sitzung)", + "model.couldNotLoad": "Modelle konnten nicht geladen werden", + "model.proLockedDesc": "Pro-Modelle benötigen ein kostenpflichtiges Nous-Abonnement.", + "model.priceTooltip": "Eingabe-/Ausgabepreis pro Million Token", + "model.freePrice": "Kostenlos", + "model.currentLabel": "aktuell:", + "model.addProviderBtn": "Anbieter hinzufügen", + "sidebar.sheetTitle": "Seitenleiste", + "sidebar.sheetDesc": "Zeigt die mobile Seitenleiste an.", + "sidebar.toggle": "Seitenleiste umschalten", + "clarify.hermesIsAsking": "Hermes fragt", + "clarify.loadingQuestion": "Lade Frage…", + "clarify.otherTypeAnswer": "Anderes (Antwort eingeben)", + "clarify.placeholderAnswer": "Antwort eingeben…", + "clarify.cmdEnterToSend": "⌘/Strg + Enter zum Senden", + "clarify.back": "Zurück", + "clarify.skip": "Überspringen", + "clarify.couldNotSend": "Konnte Klärungsantwort nicht senden", + "clarify.pickLabel": "1–{n} zum Auswählen", + "tool.recoveredAfter": "Nach 1 fehlgeschlagenen Schritt wiederhergestellt", + "tool.recoveredAfterN": "Nach {count} fehlgeschlagenen Schritten wiederhergestellt", + "tool.oneStepFailed": "1 Schritt fehlgeschlagen", + "tool.nStepsFailed": "{count} Schritte fehlgeschlagen", + "intro.fallback1h": "Was bewegen wir heute?", + "intro.fallback1b": "Schick einen Bug, Branch, Plan oder eine grobe Idee. Ich schaue mir das Repo an und mache den nächsten konkreten Schritt daraus.", + "intro.fallback2h": "Was beschäftigt dich?", + "intro.fallback2b": "Bring den Code, die Frage oder den hängenden Teil. Ich lese die Lage, bevor ich Änderungen mache.", + "intro.fallback3h": "Was soll Hermes sich ansehen?", + "intro.fallback3b": "Schick die Aufgabe, den fehlerhaften Pfad oder den halbfertigen Plan. Ich helfe, es in die Tat umzusetzen.", + "intro.fallback4h": "Wo sollen wir anfangen?", + "intro.fallback4b": "Bring das Problem, Ziel oder die Datei. Ich schaue es mir zuerst an und halte den nächsten Schritt konkret.", + "intro.fallback5h": "Was braucht Aufmerksamkeit?", + "intro.fallback5b": "Schick den Kontext, den du hast. Ich helfe, ihn in einen Plan oder eine Lösung zu sortieren.", + "intro.personality.heading1": "{label}-Modus ist an. Woran sollen wir arbeiten?", + "intro.personality.body1": "Schick die Aufgabe, Datei oder grobe Idee. Ich verwende deine konfigurierte Stimme und halte die Arbeit in diesem Repo verankert.", + "intro.personality.heading2": "Was muss {label} Hermes sehen?", + "intro.personality.body2": "Bring den Kontext oder den hängenden Teil. Ich passe mich deiner konfigurierten Persönlichkeit an.", + "intro.personality.heading3": "{label}-Modus ist bereit.", + "intro.personality.body3": "Schick das Problem, die Datei oder Idee. Ich folge der von dir konfigurierten Persönlichkeit.", + "intro.personality.heading4": "Was soll {label} Hermes angehen?", + "intro.personality.body4": "Wirf die Aufgabe hier rein. Ich halte die Arbeit im Repo verankert.", + "intro.personality.heading5": "Wo sollen wir beginnen?", + "intro.personality.body5": "Gib mir den Kontext und ich antworte im {label}-Modus.", + "intro.brand": "HERMES AGENT", + "install.line": "Zeile", + "install.lines": "Zeilen", + "artifacts.noArtifactsFound": "Keine Artefakte gefunden", + "previewConsole.noMessages": "Noch keine Konsolen-Nachrichten.", + "agents.spawnTree": "Spawn-Baum", + "agents.liveSubagentActivity": "Live-Subagent-Aktivität für den aktuellen Turn.", + "agents.noLiveSubagents": "Keine Live-Subagents", + "agents.files": "Dateien", + "profiles.noProfilesYet": "Noch keine Profile.", + "profiles.selectProfile": "Wähle ein Profil, um Details anzuzeigen.", + "profiles.deleteProfile": "Profil löschen?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "Ungespeicherte Änderungen", + "profiles.newProfile": "Neues Profil", + "profiles.cloneFromDefault": "Von Standard kopieren", + "profiles.renameProfile": "Profil umbenennen", + "messaging.gatewayStopped": "Messaging-Gateway gestoppt", + "messaging.getCredentials": "Zugangsdaten besorgen", + "messaging.required": "Erforderlich", + "messaging.unsavedChanges": "Ungespeicherte Änderungen", + "messaging.saved": "Gespeichert", + "cron.deleteCronJob": "Cron-Job löschen?", + "cron.optional": "Optional", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "Gateway", + "gateway.inferenceStatus": "Gateway-Inferenzstatus", + "agents.label": "Agents", + "agents.open": "Agents öffnen", + "agents.close": "Agents schließen", + "agents.subagent": "Subagent", + "agents.subagents": "Subagents", + "agents.failed": "fehlgeschlagen", + "agents.running": "läuft", + "cron.label": "Cron", + "cron.open": "Cron-Jobs öffnen", + "commandCenter.open": "Kommandozentrale öffnen", + "commandCenter.close": "Kommandozentrale schließen", + "mcp.giveConfigKey": "Gib diesem MCP-Server einen Konfigurationsschlüssel.", + "mcp.reconnectGateway": "Verbinde das Gateway erneut, bevor du MCP neu lädst.", + "mcp.newSchemas": "Neue Tool-Schemas gelten für neue Turns.", + "mcp.loadingServers": "Lade MCP-Server...", + "mcp.serverName": "Name", + "mcp.serversTitle": "MCP-Server", + "mcp.noServersTitle": "Keine MCP-Server", + "sessions.nothingArchivedTitle": "Nichts archiviert", + "sessions.deletePermanentlyTitle": "Endgültig löschen", + "sessions.defaultProjectDirTitle": "Standard-Projektverzeichnis", + "sessions.loadingArchived": "Lade archivierte Sitzungen…", + "sessions.restored": "Wiederhergestellt", + "sessions.projectDirUpdated": "Standard-Projektverzeichnis aktualisiert", + "gateway.enterUrlFirst": "Gib zuerst eine Remote-URL und einen Sitzungs-Token ein, bevor du wechselst", + "gateway.enterUrlFirstTest": "Gib zuerst eine Remote-URL und einen Sitzungs-Token ein, bevor du testest", + "config.saving": "Speichere…", + "keys.openProviderDocs": "Anbieter-Dokumentation öffnen", + "config.label.defaultModel": "Standardmodell", + "config.label.contextWindow": "Kontextfenster", + "config.label.fallbackModels": "Fallback-Modelle", + "config.label.enabledToolsets": "Aktivierte Toolsets", + "config.label.timezone": "Zeitzone", + "config.label.personality": "Persönlichkeit", + "config.label.reasoningBlocks": "Reasoning-Blöcke", + "config.label.maxAgentSteps": "Max. Agent-Schritte", + "config.label.imageAttachments": "Bildanhänge", + "config.label.workingDirectory": "Arbeitsverzeichnis", + "config.label.executionBackend": "Ausführungs-Backend", + "config.label.commandTimeout": "Befehls-Timeout", + "config.label.persistentShell": "Persistente Shell", + "config.label.envPassthrough": "Umgebungsvariablen-Durchleitung", + "config.label.fileReadLimit": "Datei-Lese-Limit", + "config.label.terminalOutputLimit": "Terminal-Ausgabe-Limit", + "config.label.filePageLimit": "Datei-Seiten-Limit", + "config.label.lineLengthLimit": "Zeilenlängen-Limit", + "config.label.codeExecutionMode": "Code-Ausführungsmodus", + "config.label.approvalMode": "Genehmigungsmodus", + "config.label.approvalTimeout": "Genehmigungs-Timeout", + "config.label.confirmMcpReloads": "MCP-Neuladen bestätigen", + "config.label.commandAllowlist": "Befehls-Allowlist", + "config.label.redactSecrets": "Geheimnisse schwärzen", + "config.label.allowPrivateUrls": "Private URLs erlauben", + "config.label.browserPrivateUrls": "Browser für private URLs", + "config.label.localBrowserForPrivateUrls": "Lokaler Browser für private URLs", + "config.label.fileCheckpoints": "Datei-Checkpoints", + "config.label.checkpointLimit": "Checkpoint-Limit", + "config.label.voiceShortcut": "Sprach-Shortcut", + "config.label.maxRecordingLength": "Max. Aufnahmelänge", + "config.label.readResponsesAloud": "Antworten vorlesen", + "config.label.speechToText": "Sprache-zu-Text", + "config.label.speechToTextProvider": "Sprache-zu-Text-Anbieter", + "config.label.localTranscriptionModel": "Lokales Transkriptionsmodell", + "config.label.transcriptionLanguage": "Transkriptionssprache", + "config.label.elevenlabsSttModel": "ElevenLabs-STT-Modell", + "config.label.elevenlabsLanguage": "ElevenLabs-Sprache", + "config.label.tagAudioEvents": "Audio-Ereignisse taggen", + "config.label.speakerDiarization": "Sprecher-Diarisierung", + "config.label.textToSpeechProvider": "Text-zu-Sprache-Anbieter", + "config.label.edgeVoice": "Edge-Stimme", + "config.label.openaiTtsModel": "OpenAI-TTS-Modell", + "config.label.openaiVoice": "OpenAI-Stimme", + "config.label.elevenlabsVoice": "ElevenLabs-Stimme", + "config.label.elevenlabsModel": "ElevenLabs-Modell", + "config.label.persistentMemory": "Persistenter Speicher", + "config.label.userProfile": "Benutzerprofil", + "config.label.memoryBudget": "Speicher-Budget", + "config.label.profileBudget": "Profil-Budget", + "config.label.memoryProvider": "Speicher-Anbieter", + "config.label.contextEngine": "Kontext-Engine", + "config.label.autoCompression": "Auto-Kompression", + "config.label.compressionThreshold": "Kompressions-Schwelle", + "config.label.compressionTarget": "Kompressions-Ziel", + "config.label.protectedRecentMessages": "Geschützte aktuelle Nachrichten", + "config.label.apiRetries": "API-Wiederholungen", + "config.label.serviceTier": "Service-Stufe", + "config.label.toolUseEnforcement": "Tool-Nutzungs-Erzwingung", + "config.label.subagentModel": "Subagent-Modell", + "config.label.subagentProvider": "Subagent-Anbieter", + "config.label.subagentTurnLimit": "Subagent-Turn-Limit", + "config.label.parallelSubagents": "Parallele Subagents", + "config.label.subagentTimeout": "Subagent-Timeout", + "config.label.subagentReasoningEffort": "Subagent-Reasoning-Aufwand", + "config.desc.defaultModel": "Wird für neue Chats verwendet, es sei denn, du wählst ein anderes Modell im Composer.", + "config.desc.contextWindow": "Auf 0 lassen, um das erkannte Kontextfenster des ausgewählten Modells zu verwenden.", + "config.desc.fallbackModels": "Backup-Anbieter:Modell-Einträge, die versucht werden, wenn das Standardmodell ausfällt.", + "config.desc.personality": "Standard-Assistentenstil für neue Sitzungen.", + "config.desc.timezone": "Wird verwendet, wenn Hermes lokalen Zeitkontext benötigt. Leer lassen für System-Zeitzone.", + "config.desc.reasoningBlocks": "Reasoning-Abschnitte anzeigen, wenn das Backend sie bereitstellt.", + "config.desc.imageAttachments": "Steuert, wie Bildanhänge an das Modell gesendet werden.", + "config.desc.workingDirectory": "Standard-Projektordner für Tool- und Terminal-Arbeit.", + "config.desc.codeExecutionMode": "Wie strikt die Code-Ausführung auf das aktuelle Projekt beschränkt ist.", + "config.desc.persistentShell": "Shell-Zustand zwischen Befehlen beibehalten, wenn das Backend dies unterstützt.", + "config.desc.envPassthrough": "Umgebungsvariablen, die an die Tool-Ausführung durchgereicht werden.", + "config.desc.fileReadLimit": "Maximale Zeichen, die Hermes aus einer Dateianfrage lesen kann.", + "config.desc.approvalMode": "Wie Hermes Befehle behandelt, die explizite Genehmigung erfordern.", + "config.desc.approvalTimeout": "Wie lange Genehmigungsaufforderungen warten, bevor sie ablaufen.", + "config.desc.redactSecrets": "Erkannte Geheimnisse nach Möglichkeit vor modellsichtbaren Inhalten verbergen.", + "config.desc.fileCheckpoints": "Rollback-Snapshots vor Dateibearbeitungen erstellen.", + "config.desc.persistentMemory": "Dauerhafte Erinnerungen speichern, die zukünftigen Sitzungen helfen können.", + "config.desc.userProfile": "Ein kompaktes Profil der Benutzereinstellungen pflegen.", + "config.desc.contextEngine": "Strategie zur Verwaltung langer Unterhaltungen nahe dem Kontextlimit.", + "config.desc.autoCompression": "Älteren Kontext zusammenfassen, wenn Unterhaltungen groß werden.", + "config.desc.readResponsesAloud": "Assistentenantworten automatisch vorlesen.", + "config.desc.speechToText": "Lokale oder anbieter-gestützte Sprach-Transkription aktivieren.", + "config.desc.elevenlabsLanguage": "Optionaler ISO-639-3-Sprachcode. Leer lassen für Auto-Erkennung durch ElevenLabs.", + "config.desc.maxAgentSteps": "Obergrenze für Tool-Aufruf-Turns, bevor Hermes einen Lauf stoppt.", + "mcp.failedToLoad": "MCP-Konfiguration konnte nicht geladen werden", + "mcp.invalidJsonShort": "Ungültiges MCP-JSON", + "mcp.serverSaved": "MCP-Server gespeichert", + "mcp.toolsReloaded": "MCP-Tools neu geladen", + "mcp.emptyDesc": "Füge einen STDIO- oder HTTP-Server hinzu, um MCP-Tools bereitzustellen.", + "sessions.loadFailed": "Archivierte Sitzungen konnten nicht geladen werden", + "sessions.unarchiveFailed": "Archivierung aufheben fehlgeschlagen", + "sessions.deleteFailed": "Löschen fehlgeschlagen", + "sessions.archiveHint": "Archiviere einen Chat, um ihn hier auszublenden.", + "sessions.updateDirFailed": "Standardverzeichnis konnte nicht aktualisiert werden", + "sessions.clearDirFailed": "Standardverzeichnis konnte nicht gelöscht werden", + "keys.showAdvanced": "Erweitert anzeigen", + "keys.loadFailed": "API-Schlüssel konnten nicht geladen werden", + "keys.credentialSaved": "Zugangsdaten gespeichert", + "keys.credentialRemoved": "Zugangsdaten entfernt", + "provider.desc.nousPortal": "Nous Portal Basis-URL-Override", + "provider.desc.openRouter": "OpenRouter API-Schlüssel (für Vision, Web-Scraping-Helfer und MoA)", + "provider.desc.google": "Google AI Studio API-Schlüssel (auch als GEMINI_API_KEY erkannt)", + "provider.desc.gemini": "GCP-Projekt-ID für kostenpflichtige Gemini-Tiers (Free-Tier wird automatisch bereitgestellt)", + "provider.desc.anthropic": "Anthropic API-Schlüssel", + "provider.desc.deepseek": "Benutzerdefinierte DeepSeek API-Basis-URL (erweitert)", + "provider.desc.xai": "xAI Basis-URL-Override", + "provider.desc.huggingface": "Hugging Face Inference Providers Basis-URL-Override", + "provider.desc.kimi": "Kimi / Moonshot China API-Schlüssel", + "provider.desc.minimax": "MiniMax (China) Basis-URL-Override", + "provider.desc.minimaxCn": "MiniMax China API-Schlüssel", + "provider.desc.dashscope": "Benutzerdefinierte DashScope Basis-URL (Standard: coding-intl OpenAI-kompatibler Endpunkt)", + "provider.desc.glm": "GLM API-Schlüssel (Z.AI)", + "provider.desc.nvidia": "NVIDIA NIM Basis-URL-Override (z.B. http://localhost:8000/v1 für lokales NIM)", + "provider.desc.opencodeGo": "OpenCode Go API-Schlüssel", + "provider.desc.opencodeZen": "OpenCode Zen API-Schlüssel", + "provider.desc.xiaomi": "Xiaomi MiMo Basis-URL-Override (Standard: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Kilo Code API-Schlüssel", + "provider.desc.aiGateway": "AI Gateway API-Schlüssel (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "ElevenLabs API-Schlüssel", + "provider.desc.openai": "OpenAI API-Schlüssel (für Sprachverarbeitung via Proxy)", + "provider.desc.mistral": "Mistral API-Schlüssel (für STT/TTS)", + "provider.desc.groq": "Groq API-Schlüssel (für STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "Firecrawl API-URL für selbst gehostete Instanzen (optional)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Nous Portal Basis-URL-Override", + "provider.desc.openrouter": "OpenRouter API-Schlüssel (für Vision, Web-Scraping-Helfer und MoA)", + "provider.desc.lmstudio": "Z.AI / GLM Basis-URL-Override", + "provider.desc.zai": "Azure Foundry Basis-URL (über 'hermes model' für endpunktspezifische Konfiguration setzen)", + "provider.desc.stepfun": "StepFun Step Plan Basis-URL-Override", + "provider.desc.arcee": "Arcee AI Basis-URL-Override", + "provider.desc.gmi": "GMI Cloud Basis-URL-Override", + "provider.desc.qwenportal": "Qwen Portal Basis-URL-Override (Standard: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "OpenCode Go Basis-URL-Override", + "provider.desc.ollamacloud": "Ollama Cloud Basis-URL-Override (Standard: https://ollama.com/v1)", + "provider.desc.awsbedrock": "AWS Named Profile für Bedrock-Authentifizierung (aus ~/.aws/credentials)", + "provider.desc.exa": "Exa API-Schlüssel für KI-native Websuche und Inhalte", + "provider.desc.parallel": "Parallel API-Schlüssel für KI-native Websuche und Extraktion", + "titlebar.language": "Sprache", + "titlebar.languageDesc": "Wähle eine Anzeigesprache für die Oberfläche.", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} \ No newline at end of file diff --git a/apps/desktop/src/locales/en.json b/apps/desktop/src/locales/en.json new file mode 100644 index 000000000000..8a16fec4d0a3 --- /dev/null +++ b/apps/desktop/src/locales/en.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "Appearance", + "appearance.description": "These are desktop-only display preferences. Mode controls brightness; theme controls the accent palette and chat surface styling.", + "appearance.colorMode": "Color Mode", + "appearance.colorModeDesc": "Pick a fixed mode or let Hermes follow your system setting.", + "appearance.theme": "Theme", + "appearance.themeDesc": "Choose a color palette for the chat surface and interface accents.", + "appearance.mode.light": "Light", + "appearance.mode.lightDesc": "Bright desktop surfaces", + "appearance.mode.dark": "Dark", + "appearance.mode.darkDesc": "Low-glare workspace", + "appearance.mode.system": "System", + "appearance.mode.systemDesc": "Follow OS appearance", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Glass neutrals with Nous blue accents", + "appearance.theme.midnight": "Midnight", + "appearance.theme.midnightDesc": "Deep blue-violet with cool accents", + "appearance.theme.ember": "Ember", + "appearance.theme.emberDesc": "Warm crimson and bronze — forge vibes", + "appearance.theme.mono": "Mono", + "appearance.theme.monoDesc": "Clean grayscale — minimal and focused", + "appearance.theme.cyberpunk": "Cyberpunk", + "appearance.theme.cyberpunkDesc": "Neon green on black — matrix terminal", + "appearance.theme.slate": "Slate", + "appearance.theme.slateDesc": "Cool slate blue — focused developer theme", + "appearance.language": "Language", + "appearance.languageDesc": "Choose the UI language or let Hermes follow your system setting.", + "language.system": "Follow system", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "Settings", + "settings.appearance": "Appearance", + "settings.model": "Model", + "settings.gateway": "Gateway", + "settings.sessions": "Sessions", + "settings.tools": "Tools & Skills", + "settings.section.chat": "Chat", + "settings.section.workspace": "Workspace", + "settings.section.safety": "Safety", + "settings.section.memory": "Memory & Context", + "settings.section.voice": "Voice", + "settings.section.advanced": "Advanced", + "settings.mcp": "MCP Servers", + "settings.config": "Config", + "settings.keys": "API Keys", + "settings.about": "About", + "chat.placeholder": "Ask me anything…", + "chat.send": "Send", + "chat.stop": "Stop", + "chat.thinking": "Thinking…", + "chat.noSession": "No active session. Start a new conversation.", + "commandCenter.title": "Command Center", + "commandCenter.noSessions": "No sessions yet.", + "commandCenter.loadingStatus": "Loading status…", + "commandCenter.recentLogs": "Recent logs", + "commandCenter.dailyTokens": "Daily tokens", + "commandCenter.noActivity": "No daily activity.", + "commandCenter.noModelUsage": "No model usage yet.", + "commandCenter.noSkillActivity": "No skill activity yet.", + "common.loading": "Loading…", + "common.save": "Save", + "common.cancel": "Cancel", + "common.close": "Close", + "common.delete": "Delete", + "common.confirm": "Confirm", + "common.search": "Search…", + "onboarding.welcome": "Welcome to Hermes", + "onboarding.getStarted": "Get started by choosing a provider and model.", + "onboarding.skip": "Skip", + "onboarding.continue": "Continue", + "onboarding.finish": "Finish", + "file.browser": "File Browser", + "file.noFiles": "No files yet.", + "terminal.title": "Terminal", + "terminal.newTab": "New Tab", + "terminal.closeTab": "Close Tab", + "skills.title": "Skills", + "skills.search": "Search skills…", + "skills.noResults": "No skills found.", + "profiles.title": "Profiles", + "cron.title": "Cron Jobs", + "cron.noJobs": "No scheduled jobs.", + "messaging.title": "Messaging", + "about.version": "Version", + "about.checkUpdates": "Check for Updates", + "about.upToDate": "Hermes is up to date.", + "about.updateAvailable": "An update is available.", + "about.license": "MIT License", + "keys.title": "API Keys", + "keys.noKeys": "No API keys configured.", + "keys.addKey": "Add Key", + "config.title": "Configuration", + "config.edit": "Edit Config", + "config.reload": "Reload Config", + "gateway.title": "Gateway", + "gateway.start": "Start Gateway", + "gateway.stop": "Stop Gateway", + "gateway.restart": "Restart Gateway", + "gateway.running": "Running", + "gateway.stopped": "Stopped", + "sessions.title": "Sessions", + "sessions.search": "Search sessions…", + "sessions.noResults": "No sessions found.", + "sessions.export": "Export", + "sessions.delete": "Delete Session", + "mcp.title": "MCP Servers", + "mcp.addServer": "Add Server", + "mcp.noServers": "No MCP servers configured.", + "tools.title": "Tools & Skills", + "tools.noTools": "No tools available.", + "nav.home": "Home", + "nav.chat": "Chat", + "nav.settings": "Settings", + "nav.files": "Files", + "nav.terminal": "Terminal", + "header.search": "Search or type a command…", + "settings.closeSettings": "Close settings", + "settings.archivedChats": "Archived Chats", + "settings.exportConfig": "Export config", + "settings.importConfig": "Import config", + "settings.resetDefaults": "Reset to defaults", + "settings.llmProviders": "LLM providers", + "settings.searchPlaceholder.about": "About Hermes Desktop", + "settings.searchPlaceholder.config": "Search settings…", + "settings.searchPlaceholder.gateway": "Gateway connection…", + "settings.searchPlaceholder.keys": "Search API keys…", + "settings.searchPlaceholder.mcp": "Search MCP servers…", + "settings.searchPlaceholder.sessions": "Search archived sessions…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "Version unavailable", + "about.updates": "Updates", + "about.checkNow": "Check now", + "about.checking": "Checking…", + "about.seeWhatsNew": "See what's new", + "about.releaseNotes": "Release notes", + "about.autoUpdates": "Automatic updates", + "about.autoUpdatesDesc": "Hermes checks for updates automatically in the background and lets you know when one is ready.", + "about.selfUpdateUnsupported": "This build can't update itself from inside the app.", + "about.cannotReachServer": "We couldn't reach the update server.", + "about.installingUpdate": "An update is currently installing.", + "about.updateReady": "A new update is ready ({count} change included).", + "about.updateReady_plural": "A new update is ready ({count} changes included).", + "about.onLatest": "You're on the latest version.", + "about.tapCheckNow": "Tap \"Check now\" to look for updates.", + "about.lastChecked": "Last checked {time}", + "about.justNow": "just now", + "about.never": "never", + "about.minAgo": "{count} min ago", + "about.hoursAgo": "{count} hours ago", + "about.daysAgo": "{count} days ago", + "about.buildInfo": "Branch {branch} · Commit {sha}", + "keys.loading": "Loading API keys and credentials…", + "keys.docs": "Docs", + "keys.openDocs": "Open provider docs", + "keys.hideValue": "Hide value", + "keys.revealValue": "Reveal value", + "keys.set": "Set", + "keys.notSet": "Not set", + "keys.replace": "Replace", + "keys.replaceValue": "Replace current value", + "keys.enterValue": "Enter value", + "keys.saving": "Saving", + "keys.save": "Save", + "keys.cancel": "Cancel", + "keys.clearValue": "Clear value", + "keys.configured": "{count} of {total} configured", + "keys.setCount": "{count} of {total} set", + "keys.countSet": "{count} set", + "keys.countKeys": "{count} keys", + "keys.otherProviders": "Other providers", + "keys.categoryTools": "Tools", + "keys.categoryMessaging": "Messaging", + "keys.categorySettings": "Settings", + "config.notSet": "Not set", + "config.commaSeparated": "comma-separated values", + "config.on": "On", + "config.off": "Off", + "config.none": "None", + "config.emptyOption": "(none)", + "config.loading": "Loading Hermes configuration…", + "config.noMatching": "No matching settings", + "config.noMatchingDesc": "Try a different search term or choose another section.", + "config.results": "{count} result", + "config.results_plural": "{count} results", + "gateway.loading": "Loading gateway settings…", + "gateway.unavailable": "Gateway settings unavailable", + "gateway.unavailableDesc": "The desktop IPC bridge does not expose gateway settings.", + "gateway.connection": "Gateway Connection", + "gateway.envOverride": "env override", + "gateway.desc": "Hermes Desktop starts its own local gateway by default. Use a remote gateway when you want this app to control an already-running Hermes backend on another machine or behind a trusted proxy.", + "gateway.envOverrideTitle": "Environment variables are controlling this desktop session.", + "gateway.envOverrideDesc": "Unset {urlVar} and {tokenVar} to use the saved setting below.", + "gateway.localTitle": "Local gateway", + "gateway.localDesc": "Start a private Hermes backend on localhost. This is the default and works offline.", + "gateway.remoteTitle": "Remote gateway", + "gateway.remoteDesc": "Connect this desktop shell to a remote Hermes backend using its session token.", + "gateway.remoteUrl": "Remote URL", + "gateway.remoteUrlDesc": "Base URL for the remote dashboard backend. Path prefixes are supported, for example /hermes.", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "Session token", + "gateway.sessionTokenDesc": "The dashboard session token used for REST and WebSocket access. Leave blank to keep the saved token.", + "gateway.sessionTokenPlaceholder": "Paste session token", + "gateway.existingToken": "Existing token {preview}", + "gateway.tokenSaved": "saved", + "gateway.testRemote": "Test remote", + "gateway.saveRestart": "Save for next restart", + "gateway.saveReconnect": "Save and reconnect", + "gateway.diagnostics": "Diagnostics", + "gateway.diagnosticsDesc": "Reveal desktop.log in your file manager — useful when the gateway fails to start.", + "gateway.openLogs": "Open logs", + "sessions.loading": "Loading…", + "sessions.defaultProjectDir": "Default project directory", + "sessions.defaultProjectDirDesc": "New sessions start in this folder unless you pick another. Leave it unset to use your home directory.", + "sessions.defaultDir": "Defaults to {fallback}.", + "sessions.notSet": "Not set", + "sessions.change": "Change", + "sessions.choose": "Choose", + "sessions.clear": "Clear", + "sessions.archivedTitle": "Archived sessions", + "sessions.archivedDesc": "Archived chats are hidden from the sidebar but keep all their messages. Ctrl/⌘-click a chat in the sidebar to archive it.", + "sessions.nothingArchived": "Nothing archived", + "sessions.noSearchMatch": "No archived chats match your search.", + "sessions.archiveToHide": "Archive a chat to hide it here.", + "sessions.unarchive": "Unarchive", + "sessions.deletePermanently": "Delete permanently", + "sessions.messages": "{count} messages", + "mcp.loading": "Loading MCP servers…", + "mcp.servers": "MCP servers", + "mcp.configured": "{count} configured", + "mcp.newServer": "New server", + "mcp.reloadMCP": "Reload MCP", + "mcp.reloading": "Reloading...", + "mcp.noServersDesc": "Add a stdio or HTTP server to expose MCP tools.", + "mcp.name": "Name", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "Server JSON", + "mcp.editServer": "Edit server", + "mcp.saveServer": "Save server", + "mcp.saving": "Saving...", + "mcp.remove": "Remove", + "mcp.disabled": "disabled", + "model.auxTask.vision": "Vision", + "model.auxTask.visionHint": "Image analysis", + "model.auxTask.web_extract": "Web extract", + "model.auxTask.web_extractHint": "Page summarization", + "model.auxTask.compression": "Compression", + "model.auxTask.compressionHint": "Context compaction", + "model.auxTask.session_search": "Session search", + "model.auxTask.session_searchHint": "Recall queries", + "model.auxTask.skills_hub": "Skills hub", + "model.auxTask.skills_hubHint": "Skill search", + "model.auxTask.approval": "Approval", + "model.auxTask.approvalHint": "Smart auto-approve", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "MCP tool routing", + "model.auxTask.title_generation": "Title gen", + "model.auxTask.title_generationHint": "Session titles", + "model.auxTask.curator": "Curator", + "model.auxTask.curatorHint": "Skill-usage review", + "model.mainModel": "Main model", + "model.mainDesc": "Applies to new sessions. Use the model picker in the composer to hot-swap the active chat.", + "model.providerPlaceholder": "Provider", + "model.modelPlaceholder": "Model", + "model.apply": "Apply", + "model.applying": "Applying…", + "model.auxiliaryModels": "Auxiliary models", + "model.auxiliaryDesc": "Helper tasks run on the main model by default. Assign a dedicated model to any task to override.", + "model.resetAllToMain": "Reset all to main", + "model.setToMain": "Set to main", + "model.change": "Change", + "model.cancel": "Cancel", + "model.autoUseMain": "auto · use main model", + "model.providerDefault": "(provider default)", + "model.loading": "Loading model configuration…", + "updates.checking": "Checking for updates…", + "updates.available": "Update available", + "updates.downloading": "Downloading…", + "updates.installing": "Installing…", + "updates.restart": "Restart to update", + "errors.generic": "Something went wrong.", + "errors.notFound": "Page not found.", + "errors.noPermission": "You don't have permission to access this.", + "tool.toolCall": "Tool Call", + "tool.result": "Result", + "tool.error": "Error", + "tool.timeout": "Timed out", + "tool.cancelled": "Cancelled", + "tool.running": "Running", + "tool.recovered": "Recovered", + "tool.done": "Done", + "tool.output": "Tool output", + "tool.searchResults": "Search results", + "tool.rawResponse": "Raw response", + "tool.stdout": "stdout", + "tool.stderr": "stderr", + "tool.copyActivity": "Copy activity", + "composer.startingHermes": "Starting Hermes...", + "composer.sendFollowUp": "Send follow-up", + "composer.message": "Message", + "composer.editingQueued": "Editing queued turn in composer", + "composer.attach": "Attach", + "composer.files": "Files…", + "composer.folder": "Folder…", + "composer.images": "Images…", + "composer.pasteImage": "Paste image", + "composer.url": "URL…", + "composer.promptSnippets": "Prompt snippets", + "composer.promptSnippetsDesc": "Pick a starter prompt to drop into the composer.", + "composer.voiceStart": "Start voice conversation", + "composer.queue": "Queue message", + "composer.speaking": "Speaking", + "composer.transcribing": "Transcribing", + "composer.muted": "Muted", + "composer.listening": "Listening", + "composer.unmuteMic": "Unmute microphone", + "composer.muteMic": "Mute microphone", + "composer.stopListening": "Stop listening and send", + "composer.endVoice": "End voice conversation", + "composer.end": "End", + "composer.stopDictation": "Stop dictation", + "composer.transcribingDictation": "Transcribing dictation", + "composer.voiceDictation": "Voice dictation", + "sessions.new": "New session", + "sessions.running": "Session running", + "sessions.actions": "Session actions", + "sessions.reorder": "Reorder", + "sessions.pin": "Pin", + "sessions.unpin": "Unpin", + "sessions.copyId": "Copy ID", + "sessions.rename": "Rename", + "sessions.archive": "Archive", + "sessions.renameDialog": "Rename session", + "sessions.renameDesc": "Give this chat a memorable title. Leave empty to clear.", + "sessions.untitled": "Untitled session", + "sessions.renamed": "Renamed", + "sessions.renameFailed": "Rename failed", + "sessions.pinned": "Pinned", + "sessions.results": "Results", + "sessions.allPinned": "Everything here is pinned. Unpin a chat to show it in recents.", + "sessions.pinHint": "Shift-click a chat to pin · drag to reorder", + "sessions.loadMore": "Load more", + "sessions.noWorkspace": "No workspace", + "sessions.ungroup": "Show sessions as a single list", + "sessions.groupByWorkspace": "Group sessions by workspace", + "skills.tools": "Skills & Tools", + "artifacts": "Artifacts", + "common.clearSearch": "Clear search", + "common.copy": "Copy", + "common.refresh": "Refresh", + "common.moreActions": "More actions", + "common.tryAgain": "Try again", + "chat.loadingSession": "Loading session", + "chat.loadingResponse": "Hermes is loading a response", + "chat.branchInNewChat": "Branch in new chat", + "chat.readAloud": "Read aloud", + "chat.preparingAudio": "Preparing audio...", + "chat.stopReading": "Stop reading", + "chat.editMessage": "Edit message", + "chat.editableCheckpoint": "Editable checkpoint", + "chat.restoreCheckpoint": "Restore checkpoint", + "chat.goForward": "Go forward", + "chat.restorePrevCheckpoint": "Restore previous checkpoint", + "chat.restoreNextCheckpoint": "Restore next checkpoint", + "models.title": "Models", + "models.search": "Search models", + "models.addProvider": "Add provider…", + "errors.somethingBroke": "Something broke in the interface", + "errors.viewCrashedDesc": "The view hit an unexpected error. Your chats and settings are safe - try again, or reload the window.", + "errors.noProviders": "No authenticated providers.", + "onboarding.setupTitle": "Let's get you setup with Hermes Agent", + "onboarding.setupDesc": "Connect a model provider to start chatting. Most options take one click.", + "onboarding.preparing": "Starting Hermes…", + "onboarding.installing": "Hermes is finishing install. This usually takes under a minute on first run.", + "onboarding.lookingUp": "Looking up providers...", + "onboarding.otherProviders": "Other providers", + "onboarding.collapse": "Collapse", + "onboarding.iHaveKey": "I have an API key", + "onboarding.recommended": "Recommended", + "onboarding.connected": "Connected", + "onboarding.backToSignIn": "Back to sign in", + "onboarding.getKey": "Get a key", + "onboarding.pasteKey": "Paste API key", + "onboarding.connect": "Connect", + "onboarding.connecting": "Connecting", + "onboarding.copyCode": "Copy", + "onboarding.startSignIn": "Starting sign-in for", + "onboarding.verifyingCode": "Verifying your code with", + "onboarding.pickingModel": "connected. Picking a default model...", + "onboarding.signInFailed": "Sign-in failed. Try again.", + "onboarding.pickDifferent": "Pick a different provider", + "onboarding.signInTitle": "Sign in with", + "onboarding.step1": "We opened", + "onboarding.step1End": "in your browser.", + "onboarding.step2": "Authorize Hermes there.", + "onboarding.step3": "Copy the authorization code and paste it below.", + "onboarding.pasteCode": "Paste authorization code", + "onboarding.reopenAuth": "Re-open authorization page", + "onboarding.cancel": "Cancel", + "onboarding.browserDesc": "We opened", + "onboarding.browserDescEnd": "in your browser. Authorize Hermes there and you'll be connected automatically — nothing to copy or paste.", + "onboarding.waitingAuth": "Waiting for you to authorize...", + "onboarding.reopenSignIn": "Re-open sign-in page", + "onboarding.externalDesc": "signs in through its own CLI. Run this command in a terminal, then come back and pick \"I've signed in\":", + "onboarding.iSignedIn": "I've signed in", + "onboarding.enterCode": "We opened", + "onboarding.enterCodeEnd": "in your browser. Enter this code there:", + "onboarding.reopenVerification": "Re-open verification page", + "onboarding.defaultModel": "Default model", + "onboarding.freeTier": "Free tier", + "onboarding.pro": "Pro", + "onboarding.change": "Change", + "onboarding.startChatting": "Start chatting", + "onboarding.docs": "docs", + "onboarding.close": "Close", + "onboarding.savingError": "Could not save credential.", + "install.title": "Hermes needs a one-time install", + "install.desc": "Automated first-launch install isn't available on", + "install.descEnd": "yet. Open Terminal and run the command below, then relaunch this app. Subsequent launches will skip this step.", + "install.installCommand": "Install command", + "install.copyCommand": "Copy command", + "install.viewDocs": "View install docs", + "install.willInstallTo": "Will install to", + "install.iRanIt": "I've run it -- retry", + "install.failed": "Installation failed", + "install.settingUp": "Setting up Hermes Agent", + "install.finishingUp": "Finishing up", + "install.failedDesc": "One of the install steps failed. On Windows, this can happen if another Hermes CLI or desktop instance is running. Stop any running Hermes instances, then retry. Check the details below or the desktop log for the full transcript.", + "install.setupDesc": "This is a one-time setup. The Hermes installer is downloading dependencies and configuring your machine. Subsequent launches will skip this step.", + "install.fetchingManifest": "Fetching installer manifest...", + "install.error": "Error", + "install.showOutput": "Show installer output", + "install.hideOutput": "Hide installer output", + "install.noOutput": "No output yet.", + "install.cancelInstall": "Cancel install", + "install.cancelling": "Cancelling...", + "install.copyOutput": "Copy output", + "install.copied": "Copied!", + "install.reloadRetry": "Reload and retry", + "install.saveLogs": "Full transcript saved to", + "install.stepsComplete": "steps complete", + "install.nowLabel": "now", + "chat.composerTip": "Tip: type @ to reference files inline.", + "composer.addContext": "Add context", + "sessions.loadStep": "Load", + "sessions.moreLabel": "more", + "chat.reconnecting": "Reconnecting to Hermes…", + "appearance.toolCallDisplay": "Tool Call Display", + "appearance.toolCallDisplayDesc": "Product hides raw tool payloads; Technical shows full input/output.", + "appearance.toolViewProduct": "Product", + "appearance.toolViewTechnical": "Technical", + "appearance.toolViewProductDesc": "Human-friendly tool activity with concise summaries.", + "appearance.toolViewTechnicalDesc": "Include raw tool args/results and low-level details.", + "messaging.recommended": "Recommended", + "messaging.recommendedTelegram": "Recommended. Comma-separated numeric IDs from @userinfobot. Without this, anyone can DM your bot.", + "messaging.recommendedDiscord": "Recommended. Comma-separated Discord user IDs.", + "messaging.recommendedSlack": "Recommended. Comma-separated Slack user IDs.", + "messaging.recommendedMattermost": "Recommended. Comma-separated Mattermost user IDs.", + "messaging.recommendedMatrix": "Recommended. Comma-separated user IDs in @user:server format.", + "messaging.recommendedSignal": "Recommended. Comma-separated Signal identifiers.", + "messaging.recommendedWhatsApp": "Recommended. Comma-separated phone numbers or WhatsApp IDs.", + "previewConsole.resizeLabel": "Resize preview console", + "boot.ipcUnavailable": "Desktop IPC bridge is unavailable.", + "boot.backendExited": "Hermes background process exited during startup.", + "boot.backendStoppedTitle": "Backend stopped", + "boot.backendStoppedMessage": "Hermes background process exited.", + "boot.startingConnection": "Starting desktop connection", + "boot.connectingGateway": "Connecting live desktop gateway", + "boot.loadingConfig": "Loading Hermes settings", + "boot.loadingSessions": "Loading recent sessions", + "boot.desktopBootFailed": "Desktop boot failed", + "updates.stageGettingReady": "Getting ready…", + "updates.stageDownloading": "Downloading…", + "updates.stageAlmostThere": "Almost there…", + "updates.stageFinishingUp": "Finishing up…", + "updates.stageRestarting": "Restarting Hermes…", + "updates.stageManual": "Update from your terminal", + "updates.stageError": "Update paused", + "updates.updatingHermes": "Updating Hermes…", + "updates.lookingForUpdates": "Looking for updates…", + "updates.couldntCheck": "Couldn't check for updates", + "updates.updateNotAvailable": "Update not available", + "updates.checkConnection": "Check your connection and try again.", + "updates.onLatest": "You're running the latest version.", + "updates.allSet": "You're all set", + "updates.newUpdateAvailable": "New update available", + "updates.readyToInstall": "A new version of Hermes is ready to install.", + "updates.updateNow": "Update now", + "updates.maybeLater": "Maybe later", + "updates.moreChanges": "+ {count} more change included.", + "updates.moreChanges_plural": "+ {count} more changes included.", + "updates.updateFromTerminal": "Update from your terminal", + "updates.terminalDesc": "You installed Hermes from the command line, so updates run there too. Paste this into your terminal:", + "updates.copied": "Copied", + "updates.copy": "Copy", + "updates.pickupNewVersion": "Hermes will pick up the new version next time you launch it.", + "updates.done": "Done", + "updates.updaterDesc": "The Hermes updater will take over in its own window and reopen Hermes when it’s done.", + "updates.closeToApply": "Hermes will close to apply the update.", + "updates.updateDidntFinish": "Update didn’t finish", + "updates.nothingLost": "No worries — nothing was lost. You can try again now.", + "updates.notNow": "Not now", + "commandCenter.sessionsPanel": "Sessions panel", + "commandCenter.systemPanel": "System panel", + "commandCenter.usagePanel": "Usage panel", + "commandCenter.navigate": "Navigate", + "commandCenter.noMatchingResults": "No matching results found.", + "commandCenter.noSessionsYet": "No sessions yet.", + "commandCenter.unpinSession": "Unpin session", + "commandCenter.pinSession": "Pin session", + "commandCenter.exportSession": "Export session", + "commandCenter.deleteSession": "Delete session", + "commandCenter.gatewayRunning": "Messaging gateway running", + "commandCenter.gatewayStopped": "Messaging gateway stopped", + "commandCenter.restartMsg": "Restart messaging", + "commandCenter.updateHermes": "Update Hermes", + "commandCenter.noLogsLoaded": "No logs loaded yet.", + "commandCenter.closeLabel": "Close command center", + "commandCenter.searchPlaceholder": "Search sessions, views, and actions", + "commandCenter.statSessions": "Sessions", + "commandCenter.statApiCalls": "API calls", + "commandCenter.statTokens": "Tokens in/out", + "commandCenter.statEstCost": "Est. cost", + "commandCenter.actualCost": "actual {cost}", + "commandCenter.loadingUsage": "Loading usage...", + "commandCenter.noUsageDesc": "No usage in the last {count} days.", + "commandCenter.retry": "Retry", + "commandCenter.tokenInput": "input", + "commandCenter.tokenOutput": "output", + "commandCenter.noDailyActivity": "No daily activity.", + "commandCenter.topModels": "Top models", + "commandCenter.topSkills": "Top skills", + "commandCenter.actionsLabel": "actions", + "commandCenter.systemRunning": "running", + "commandCenter.systemDone": "done", + "commandCenter.systemFailed": "failed", + "mcp.nameRequired": "Name required", + "mcp.nameRequiredDesc": "Give this MCP server a config key.", + "mcp.invalidJson": "Server config must be a JSON object", + "mcp.invalidJsonDesc": "Invalid MCP JSON", + "mcp.saved": "MCP server saved", + "mcp.savedDesc": "{name} applies after MCP reload.", + "mcp.saveFailed": "Save failed", + "mcp.removeFailed": "Remove failed", + "mcp.gatewayUnavailable": "Gateway unavailable", + "mcp.gatewayUnavailableDesc": "Reconnect the gateway before reloading MCP.", + "mcp.reloadedTitle": "MCP tools reloaded", + "mcp.reloadedDesc": "New tool schemas apply to fresh turns.", + "mcp.reloadFailed": "MCP reload failed", + "urlDialog.title": "Attach a URL", + "urlDialog.description": "Hermes will fetch the page and include it as context for this turn.", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "Include the full URL, e.g.", + "urlDialog.attach": "Attach", + "model.options": "Options", + "model.thinking": "Thinking", + "model.fast": "Fast", + "model.effort": "Effort", + "model.noOptions": "No options for this model", + "model.optionUpdateFailed": "Model option update failed", + "model.fastModeUpdateFailed": "Fast mode update failed", + "model.effortMinimal": "Minimal", + "model.effortLow": "Low", + "model.effortMedium": "Medium", + "model.effortHigh": "High", + "model.effortMax": "Max", + "gateway.connected": "Connected", + "gateway.connecting": "Connecting", + "gateway.disconnected": "Disconnected", + "gateway.inferenceReady": "Inference ready", + "gateway.inferenceNotReady": "Inference not ready", + "gateway.checkingInference": "Checking inference", + "gateway.openSystemPanel": "Open system panel", + "gateway.connectionLabel": "Connection:", + "gateway.recentActivity": "Recent activity", + "gateway.viewAllLogs": "View all logs →", + "gateway.messagingPlatforms": "Messaging platforms", + "titlebar.hideSidebar": "Hide sidebar", + "titlebar.showSidebar": "Show sidebar", + "titlebar.search": "Search", + "titlebar.searchTitle": "Search sessions, views, and actions", + "titlebar.hideRightSidebar": "Hide right sidebar", + "titlebar.showRightSidebar": "Show right sidebar", + "titlebar.unmuteHaptics": "Unmute haptics", + "titlebar.muteHaptics": "Mute haptics", + "titlebar.openSettings": "Open settings", + "titlebar.profiles": "Profiles", + "titlebar.profilesDesc": "Advanced Hermes environments for separate personas, config, skills, and SOUL.md.", + "titlebar.manageProfiles": "Manage profiles", + "pagination.ariaLabel": "pagination", + "pagination.prevAria": "Go to previous page", + "pagination.prev": "Prev", + "pagination.nextAria": "Go to next page", + "pagination.next": "Next", + "boot.couldNotStart": "Hermes couldn't start", + "boot.recoveryDesc": "The background gateway didn't come up. Try one of the recovery steps below — nothing here deletes your chats or settings.", + "boot.retry": "Retry", + "boot.repairInstall": "Repair install", + "boot.useLocalGateway": "Use local gateway", + "boot.openLogs": "Open logs", + "boot.repairHint": "Repair re-runs the installer and can take a few minutes on a fresh machine.", + "boot.showLogs": "Show recent logs", + "boot.hideLogs": "Hide recent logs", + "bootstrap.pending": "Pending", + "bootstrap.running": "Installing", + "bootstrap.done": "Done", + "bootstrap.skipped": "Skipped", + "bootstrap.failed": "Failed", + "model.switch": "Switch model", + "model.unknown": "(unknown)", + "model.filterPlaceholder": "Filter providers and models...", + "model.persistGlobal": "Persist globally", + "model.persistGlobalSession": "Persist globally (otherwise this session only)", + "model.couldNotLoad": "Could not load models", + "model.proLockedDesc": "Pro models need a paid Nous subscription.", + "model.priceTooltip": "Input / Output price per million tokens", + "model.freePrice": "Free", + "model.currentLabel": "current:", + "model.addProviderBtn": "Add provider", + "sidebar.sheetTitle": "Sidebar", + "sidebar.sheetDesc": "Displays the mobile sidebar.", + "sidebar.toggle": "Toggle Sidebar", + "clarify.hermesIsAsking": "Hermes is asking", + "clarify.loadingQuestion": "Loading question…", + "clarify.otherTypeAnswer": "Other (type your answer)", + "clarify.placeholderAnswer": "Type your answer…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter to send", + "clarify.back": "Back", + "clarify.skip": "Skip", + "clarify.couldNotSend": "Could not send clarify response", + "clarify.pickLabel": "1–{n} to pick", + "tool.recoveredAfter": "Recovered after 1 failed step", + "tool.recoveredAfterN": "Recovered after {count} failed steps", + "tool.oneStepFailed": "1 step failed", + "tool.nStepsFailed": "{count} steps failed", + "intro.fallback1h": "What are we moving today?", + "intro.fallback1b": "Send a bug, branch, plan, or rough idea. I'll inspect the repo and turn it into the next concrete step.", + "intro.fallback2h": "What's on your mind?", + "intro.fallback2b": "Bring the code, question, or stuck part. I'll read the room before making changes.", + "intro.fallback3h": "What should Hermes look at?", + "intro.fallback3b": "Send the task, failing path, or half-formed plan. I'll help turn it into action.", + "intro.fallback4h": "Where should we start?", + "intro.fallback4b": "Bring the problem, goal, or file. I'll inspect first and keep the next step concrete.", + "intro.fallback5h": "What needs attention?", + "intro.fallback5b": "Send the context you have. I'll help sort it into a plan or a fix.", + "intro.personality.heading1": "{label} mode is on. What should we work on?", + "intro.personality.body1": "Send the task, file, or rough idea. I'll use your configured voice and keep the work grounded in this repo.", + "intro.personality.heading2": "What does {label} Hermes need to see?", + "intro.personality.body2": "Bring the context or the stuck part. I'll adapt to your configured personality.", + "intro.personality.heading3": "{label} mode is ready.", + "intro.personality.body3": "Send the problem, file, or idea. I'll follow the personality you've configured.", + "intro.personality.heading4": "What should {label} Hermes tackle?", + "intro.personality.body4": "Drop the task here. I'll keep the work grounded in the repo.", + "intro.personality.heading5": "Where should we begin?", + "intro.personality.body5": "Give me the context and I'll answer in {label} mode.", + "intro.brand": "HERMES AGENT", + "install.line": "line", + "install.lines": "lines", + "artifacts.noArtifactsFound": "No artifacts found", + "previewConsole.noMessages": "No console messages yet.", + "agents.spawnTree": "Spawn tree", + "agents.liveSubagentActivity": "Live subagent activity for the current turn.", + "agents.noLiveSubagents": "No live subagents", + "agents.files": "Files", + "profiles.noProfilesYet": "No profiles yet.", + "profiles.selectProfile": "Select a profile to view its details.", + "profiles.deleteProfile": "Delete profile?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "Unsaved changes", + "profiles.newProfile": "New profile", + "profiles.cloneFromDefault": "Clone from default", + "profiles.renameProfile": "Rename profile", + "messaging.gatewayStopped": "Messaging gateway stopped", + "messaging.getCredentials": "Get your credentials", + "messaging.required": "Required", + "messaging.unsavedChanges": "Unsaved changes", + "messaging.saved": "Saved", + "cron.deleteCronJob": "Delete cron job?", + "cron.optional": "Optional", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "Gateway", + "gateway.inferenceStatus": "Gateway inference status", + "agents.label": "Agents", + "agents.open": "Open agents", + "agents.close": "Close agents", + "agents.subagent": "subagent", + "agents.subagents": "subagents", + "agents.failed": "failed", + "agents.running": "running", + "cron.label": "Cron", + "cron.open": "Open cron jobs", + "commandCenter.open": "Open Command Center", + "commandCenter.close": "Close Command Center", + "mcp.giveConfigKey": "Give this MCP server a config key.", + "mcp.reconnectGateway": "Reconnect the gateway before reloading MCP.", + "mcp.newSchemas": "New tool schemas apply to fresh turns.", + "mcp.loadingServers": "Loading MCP servers...", + "mcp.serverName": "Name", + "mcp.serversTitle": "MCP servers", + "mcp.noServersTitle": "No MCP servers", + "sessions.nothingArchivedTitle": "Nothing archived", + "sessions.deletePermanentlyTitle": "Delete permanently", + "sessions.defaultProjectDirTitle": "Default project directory", + "sessions.loadingArchived": "Loading archived sessions…", + "sessions.restored": "Restored", + "sessions.projectDirUpdated": "Default project directory updated", + "gateway.enterUrlFirst": "Enter a remote URL and session token before switching", + "gateway.enterUrlFirstTest": "Enter a remote URL and session token before testing", + "config.saving": "Saving…", + "keys.openProviderDocs": "Open provider docs", + "config.label.defaultModel": "Default Model", + "config.label.contextWindow": "Context Window", + "config.label.fallbackModels": "Fallback Models", + "config.label.enabledToolsets": "Enabled Toolsets", + "config.label.timezone": "Timezone", + "config.label.personality": "Personality", + "config.label.reasoningBlocks": "Reasoning Blocks", + "config.label.maxAgentSteps": "Max Agent Steps", + "config.label.imageAttachments": "Image Attachments", + "config.label.workingDirectory": "Working Directory", + "config.label.executionBackend": "Execution Backend", + "config.label.commandTimeout": "Command Timeout", + "config.label.persistentShell": "Persistent Shell", + "config.label.envPassthrough": "Environment Passthrough", + "config.label.fileReadLimit": "File Read Limit", + "config.label.terminalOutputLimit": "Terminal Output Limit", + "config.label.filePageLimit": "File Page Limit", + "config.label.lineLengthLimit": "Line Length Limit", + "config.label.codeExecutionMode": "Code Execution Mode", + "config.label.approvalMode": "Approval Mode", + "config.label.approvalTimeout": "Approval Timeout", + "config.label.confirmMcpReloads": "Confirm MCP Reloads", + "config.label.commandAllowlist": "Command Allowlist", + "config.label.redactSecrets": "Redact Secrets", + "config.label.allowPrivateUrls": "Allow Private URLs", + "config.label.browserPrivateUrls": "Browser Private URLs", + "config.label.localBrowserForPrivateUrls": "Local Browser For Private URLs", + "config.label.fileCheckpoints": "File Checkpoints", + "config.label.checkpointLimit": "Checkpoint Limit", + "config.label.voiceShortcut": "Voice Shortcut", + "config.label.maxRecordingLength": "Max Recording Length", + "config.label.readResponsesAloud": "Read Responses Aloud", + "config.label.speechToText": "Speech To Text", + "config.label.speechToTextProvider": "Speech-To-Text Provider", + "config.label.localTranscriptionModel": "Local Transcription Model", + "config.label.transcriptionLanguage": "Transcription Language", + "config.label.elevenlabsSttModel": "ElevenLabs STT Model", + "config.label.elevenlabsLanguage": "ElevenLabs Language", + "config.label.tagAudioEvents": "Tag Audio Events", + "config.label.speakerDiarization": "Speaker Diarization", + "config.label.textToSpeechProvider": "Text-To-Speech Provider", + "config.label.edgeVoice": "Edge Voice", + "config.label.openaiTtsModel": "OpenAI TTS Model", + "config.label.openaiVoice": "OpenAI Voice", + "config.label.elevenlabsVoice": "ElevenLabs Voice", + "config.label.elevenlabsModel": "ElevenLabs Model", + "config.label.persistentMemory": "Persistent Memory", + "config.label.userProfile": "User Profile", + "config.label.memoryBudget": "Memory Budget", + "config.label.profileBudget": "Profile Budget", + "config.label.memoryProvider": "Memory Provider", + "config.label.contextEngine": "Context Engine", + "config.label.autoCompression": "Auto-Compression", + "config.label.compressionThreshold": "Compression Threshold", + "config.label.compressionTarget": "Compression Target", + "config.label.protectedRecentMessages": "Protected Recent Messages", + "config.label.apiRetries": "API Retries", + "config.label.serviceTier": "Service Tier", + "config.label.toolUseEnforcement": "Tool-Use Enforcement", + "config.label.subagentModel": "Subagent Model", + "config.label.subagentProvider": "Subagent Provider", + "config.label.subagentTurnLimit": "Subagent Turn Limit", + "config.label.parallelSubagents": "Parallel Subagents", + "config.label.subagentTimeout": "Subagent Timeout", + "config.label.subagentReasoningEffort": "Subagent Reasoning Effort", + "config.desc.defaultModel": "Used for new chats unless you pick a different model in the composer.", + "config.desc.contextWindow": "Leave at 0 to use the selected model's detected context window.", + "config.desc.fallbackModels": "Backup provider:model entries to try if the default model fails.", + "config.desc.personality": "Default assistant style for new sessions.", + "config.desc.timezone": "Used when Hermes needs local time context. Blank uses the system timezone.", + "config.desc.reasoningBlocks": "Show reasoning sections when the backend provides them.", + "config.desc.imageAttachments": "Controls how image attachments are sent to the model.", + "config.desc.workingDirectory": "Default project folder for tool and terminal work.", + "config.desc.codeExecutionMode": "How strictly code execution is scoped to the current project.", + "config.desc.persistentShell": "Keep shell state between commands when the backend supports it.", + "config.desc.envPassthrough": "Environment variables to pass into tool execution.", + "config.desc.fileReadLimit": "Maximum characters Hermes can read from one file request.", + "config.desc.approvalMode": "How Hermes handles commands that need explicit approval.", + "config.desc.approvalTimeout": "How long approval prompts wait before timing out.", + "config.desc.redactSecrets": "Hide detected secrets from model-visible content when possible.", + "config.desc.fileCheckpoints": "Create rollback snapshots before file edits.", + "config.desc.persistentMemory": "Save durable memories that can help future sessions.", + "config.desc.userProfile": "Maintain a compact profile of user preferences.", + "config.desc.contextEngine": "Strategy for managing long conversations near the context limit.", + "config.desc.autoCompression": "Summarize older context when conversations get large.", + "config.desc.readResponsesAloud": "Automatically speak assistant responses.", + "config.desc.speechToText": "Enable local or provider-backed speech transcription.", + "config.desc.elevenlabsLanguage": "Optional ISO-639-3 language code. Blank lets ElevenLabs auto-detect.", + "config.desc.maxAgentSteps": "Upper bound for tool-calling turns before Hermes stops a run.", + "mcp.failedToLoad": "MCP config failed to load", + "mcp.invalidJsonShort": "Invalid MCP JSON", + "mcp.serverSaved": "MCP server saved", + "mcp.toolsReloaded": "MCP tools reloaded", + "mcp.emptyDesc": "Add a stdio or HTTP server to expose MCP tools.", + "sessions.loadFailed": "Could not load archived sessions", + "sessions.unarchiveFailed": "Unarchive failed", + "sessions.deleteFailed": "Delete failed", + "sessions.archiveHint": "Archive a chat to hide it here.", + "sessions.updateDirFailed": "Could not update default directory", + "sessions.clearDirFailed": "Could not clear default directory", + "keys.showAdvanced": "Show advanced", + "keys.loadFailed": "API keys failed to load", + "keys.credentialSaved": "Credential saved", + "keys.credentialRemoved": "Credential removed", + "provider.desc.nousPortal": "Nous Portal base URL override", + "provider.desc.openRouter": "OpenRouter API key (for vision, web scraping helpers, and MoA)", + "provider.desc.google": "Google AI Studio API key (also recognized as GEMINI_API_KEY)", + "provider.desc.gemini": "GCP project ID for paid Gemini tiers (free tier auto-provisions)", + "provider.desc.anthropic": "Anthropic API key", + "provider.desc.deepseek": "Custom DeepSeek API base URL (advanced)", + "provider.desc.xai": "xAI base URL override", + "provider.desc.huggingface": "Hugging Face Inference Providers base URL override", + "provider.desc.kimi": "Kimi / Moonshot China API key", + "provider.desc.minimax": "MiniMax (China) base URL override", + "provider.desc.minimaxCn": "MiniMax China API key", + "provider.desc.dashscope": "Custom DashScope base URL (default: coding-intl OpenAI-compat endpoint)", + "provider.desc.glm": "GLM API key (Z.AI)", + "provider.desc.nvidia": "NVIDIA NIM base URL override (e.g. http://localhost:8000/v1 for local NIM)", + "provider.desc.opencodeGo": "OpenCode Go API key", + "provider.desc.opencodeZen": "OpenCode Zen API key", + "provider.desc.xiaomi": "Xiaomi MiMo base URL override (default: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Kilo Code API key", + "provider.desc.aiGateway": "AI Gateway API key (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "ElevenLabs API key", + "provider.desc.openai": "OpenAI API key (for voice processing via proxy)", + "provider.desc.mistral": "Mistral API key (for STT/TTS)", + "provider.desc.groq": "Groq API key (for STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "Firecrawl API URL for self-hosted instances (optional)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Nous Portal base URL override", + "provider.desc.openrouter": "OpenRouter API key (for vision, web scraping helpers, and MoA)", + "provider.desc.lmstudio": "Z.AI / GLM base URL override", + "provider.desc.zai": "Azure Foundry base URL (set via 'hermes model' for endpoint-specific config)", + "provider.desc.stepfun": "StepFun Step Plan base URL override", + "provider.desc.arcee": "Arcee AI base URL override", + "provider.desc.gmi": "GMI Cloud base URL override", + "provider.desc.qwenportal": "Qwen Portal base URL override (default: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "OpenCode Go base URL override", + "provider.desc.ollamacloud": "Ollama Cloud base URL override (default: https://ollama.com/v1)", + "provider.desc.awsbedrock": "AWS named profile for Bedrock authentication (from ~/.aws/credentials)", + "provider.desc.exa": "Exa API key for AI-native web search and contents", + "provider.desc.parallel": "Parallel API key for AI-native web search and extract", + "titlebar.language": "Language", + "titlebar.languageDesc": "Choose a display language for the interface.", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} diff --git a/apps/desktop/src/locales/es.json b/apps/desktop/src/locales/es.json new file mode 100644 index 000000000000..e89d7583eb3a --- /dev/null +++ b/apps/desktop/src/locales/es.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "Apariencia", + "appearance.description": "Preferencias de visualización exclusivas del escritorio. El modo controla el brillo; el tema controla la paleta de acentos y el estilo de la superficie de chat.", + "appearance.colorMode": "Modo de color", + "appearance.colorModeDesc": "Elige un modo fijo o deja que Hermes siga la configuración de tu sistema.", + "appearance.theme": "Tema", + "appearance.themeDesc": "Elige una paleta de colores para la superficie de chat y los acentos de la interfaz.", + "appearance.mode.light": "Claro", + "appearance.mode.lightDesc": "Superficies de escritorio brillantes", + "appearance.mode.dark": "Oscuro", + "appearance.mode.darkDesc": "Espacio de trabajo de bajo deslumbramiento", + "appearance.mode.system": "Sistema", + "appearance.mode.systemDesc": "Seguir la apariencia del SO", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Neutros cristal con acentos azul Nous", + "appearance.theme.midnight": "Medianoche", + "appearance.theme.midnightDesc": "Azul violeta profundo con acentos fríos", + "appearance.theme.ember": "Ascua", + "appearance.theme.emberDesc": "Carmesí cálido y bronce — ambiente de forja", + "appearance.theme.mono": "Mono", + "appearance.theme.monoDesc": "Escala de grises limpia — minimalista y enfocado", + "appearance.theme.cyberpunk": "Cyberpunk", + "appearance.theme.cyberpunkDesc": "Verde neón sobre negro — terminal matrix", + "appearance.theme.slate": "Pizarra", + "appearance.theme.slateDesc": "Azul pizarra frío — tema enfocado para desarrolladores", + "appearance.language": "Idioma", + "appearance.languageDesc": "Elige el idioma de la interfaz o deja que Hermes siga la configuración de tu sistema.", + "language.system": "Seguir sistema", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "Configuración", + "settings.appearance": "Apariencia", + "settings.model": "Modelo", + "settings.gateway": "Gateway", + "settings.sessions": "Sesiones", + "settings.tools": "Herramientas y skills", + "settings.section.chat": "Chat", + "settings.section.workspace": "Espacio de trabajo", + "settings.section.safety": "Seguridad", + "settings.section.memory": "Memoria y contexto", + "settings.section.voice": "Voz", + "settings.section.advanced": "Avanzado", + "settings.mcp": "Servidores MCP", + "settings.config": "Configuración", + "settings.keys": "Claves API", + "settings.about": "Acerca de", + "chat.placeholder": "Pregúntame lo que sea…", + "chat.send": "Enviar", + "chat.stop": "Detener", + "chat.thinking": "Pensando…", + "chat.noSession": "Sin sesión activa. Inicia una nueva conversación.", + "commandCenter.title": "Centro de mando", + "commandCenter.noSessions": "Aún no hay sesiones.", + "commandCenter.loadingStatus": "Cargando estado…", + "commandCenter.recentLogs": "Registros recientes", + "commandCenter.dailyTokens": "Tokens diarios", + "commandCenter.noActivity": "Sin actividad diaria.", + "commandCenter.noModelUsage": "Aún no hay uso de modelos.", + "commandCenter.noSkillActivity": "Aún no hay actividad de skills.", + "common.loading": "Cargando…", + "common.save": "Guardar", + "common.cancel": "Cancelar", + "common.close": "Cerrar", + "common.delete": "Eliminar", + "common.confirm": "Confirmar", + "common.search": "Buscar…", + "onboarding.welcome": "Bienvenido a Hermes", + "onboarding.getStarted": "Comienza eligiendo un proveedor y un modelo.", + "onboarding.skip": "Saltar", + "onboarding.continue": "Continuar", + "onboarding.finish": "Finalizar", + "file.browser": "Explorador de archivos", + "file.noFiles": "Aún no hay archivos.", + "terminal.title": "Terminal", + "terminal.newTab": "Nueva pestaña", + "terminal.closeTab": "Cerrar pestaña", + "skills.title": "Skills", + "skills.search": "Buscar skills…", + "skills.noResults": "No se encontraron skills.", + "profiles.title": "Perfiles", + "cron.title": "Tareas Cron", + "cron.noJobs": "Sin tareas programadas.", + "messaging.title": "Mensajería", + "about.version": "Versión", + "about.checkUpdates": "Buscar actualizaciones", + "about.upToDate": "Hermes está actualizado.", + "about.updateAvailable": "Hay una actualización disponible.", + "about.license": "Licencia MIT", + "keys.title": "Claves API", + "keys.noKeys": "No hay claves API configuradas.", + "keys.addKey": "Añadir clave", + "config.title": "Configuración", + "config.edit": "Editar configuración", + "config.reload": "Recargar configuración", + "gateway.title": "Gateway", + "gateway.start": "Iniciar Gateway", + "gateway.stop": "Detener Gateway", + "gateway.restart": "Reiniciar Gateway", + "gateway.running": "En ejecución", + "gateway.stopped": "Detenido", + "sessions.title": "Sesiones", + "sessions.search": "Buscar sesiones…", + "sessions.noResults": "No se encontraron sesiones.", + "sessions.export": "Exportar", + "sessions.delete": "Eliminar sesión", + "mcp.title": "Servidores MCP", + "mcp.addServer": "Añadir servidor", + "mcp.noServers": "No hay servidores MCP configurados.", + "tools.title": "Herramientas y skills", + "tools.noTools": "No hay herramientas disponibles.", + "nav.home": "Inicio", + "nav.chat": "Chat", + "nav.settings": "Configuración", + "nav.files": "Archivos", + "nav.terminal": "Terminal", + "header.search": "Buscar o escribir un comando…", + "settings.closeSettings": "Cerrar configuración", + "settings.archivedChats": "Chats archivados", + "settings.exportConfig": "Exportar configuración", + "settings.importConfig": "Importar configuración", + "settings.resetDefaults": "Restablecer valores predeterminados", + "settings.llmProviders": "Proveedores LLM", + "settings.searchPlaceholder.about": "Acerca de Hermes Desktop", + "settings.searchPlaceholder.config": "Buscar ajustes…", + "settings.searchPlaceholder.gateway": "Conexión del Gateway…", + "settings.searchPlaceholder.keys": "Buscar claves API…", + "settings.searchPlaceholder.mcp": "Buscar servidores MCP…", + "settings.searchPlaceholder.sessions": "Buscar sesiones archivadas…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "Versión no disponible", + "about.updates": "Actualizaciones", + "about.checkNow": "Comprobar ahora", + "about.checking": "Comprobando…", + "about.seeWhatsNew": "Ver novedades", + "about.releaseNotes": "Notas de la versión", + "about.autoUpdates": "Actualizaciones automáticas", + "about.autoUpdatesDesc": "Hermes busca actualizaciones automáticamente en segundo plano y te avisa cuando hay una disponible.", + "about.selfUpdateUnsupported": "Esta versión no puede actualizarse desde dentro de la aplicación.", + "about.cannotReachServer": "No pudimos contactar con el servidor de actualizaciones.", + "about.installingUpdate": "Se está instalando una actualización.", + "about.updateReady": "Hay una nueva actualización lista ({count} cambio incluido).", + "about.updateReady_plural": "Hay una nueva actualización lista ({count} cambios incluidos).", + "about.onLatest": "Estás en la última versión.", + "about.tapCheckNow": "Pulsa \"Comprobar ahora\" para buscar actualizaciones.", + "about.lastChecked": "Última comprobación {time}", + "about.justNow": "justo ahora", + "about.never": "nunca", + "about.minAgo": "hace {count} min", + "about.hoursAgo": "hace {count} horas", + "about.daysAgo": "hace {count} días", + "about.buildInfo": "Rama {branch} · Commit {sha}", + "keys.loading": "Cargando claves API y credenciales…", + "keys.docs": "Docs", + "keys.openDocs": "Abrir documentación del proveedor", + "keys.hideValue": "Ocultar valor", + "keys.revealValue": "Mostrar valor", + "keys.set": "Establecer", + "keys.notSet": "No establecido", + "keys.replace": "Reemplazar", + "keys.replaceValue": "Reemplazar valor actual", + "keys.enterValue": "Introducir valor", + "keys.saving": "Guardando", + "keys.save": "Guardar", + "keys.cancel": "Cancelar", + "keys.clearValue": "Limpiar valor", + "keys.configured": "{count} de {total} configuradas", + "keys.setCount": "{count} de {total} establecidas", + "keys.countSet": "{count} establecidas", + "keys.countKeys": "{count} claves", + "keys.otherProviders": "Otros proveedores", + "keys.categoryTools": "Herramientas", + "keys.categoryMessaging": "Mensajería", + "keys.categorySettings": "Configuración", + "config.notSet": "No establecido", + "config.commaSeparated": "valores separados por comas", + "config.on": "Activado", + "config.off": "Desactivado", + "config.none": "Ninguno", + "config.emptyOption": "(ninguno)", + "config.loading": "Cargando configuración de Hermes…", + "config.noMatching": "Sin ajustes coincidentes", + "config.noMatchingDesc": "Prueba con otro término de búsqueda o elige otra sección.", + "config.results": "{count} resultado", + "config.results_plural": "{count} resultados", + "gateway.loading": "Cargando configuración del Gateway…", + "gateway.unavailable": "Configuración del Gateway no disponible", + "gateway.unavailableDesc": "El puente IPC de escritorio no expone la configuración del Gateway.", + "gateway.connection": "Conexión del Gateway", + "gateway.envOverride": "anulación por variable de entorno", + "gateway.desc": "Hermes Desktop inicia su propio Gateway local por defecto. Usa un Gateway remoto cuando quieras que esta app controle un backend de Hermes ya en ejecución en otra máquina o detrás de un proxy de confianza.", + "gateway.envOverrideTitle": "Las variables de entorno están controlando esta sesión de escritorio.", + "gateway.envOverrideDesc": "Desactiva {urlVar} y {tokenVar} para usar la configuración guardada abajo.", + "gateway.localTitle": "Gateway local", + "gateway.localDesc": "Inicia un backend privado de Hermes en localhost. Es la opción por defecto y funciona sin conexión.", + "gateway.remoteTitle": "Gateway remoto", + "gateway.remoteDesc": "Conecta este shell de escritorio a un backend remoto de Hermes usando su token de sesión.", + "gateway.remoteUrl": "URL remota", + "gateway.remoteUrlDesc": "URL base del backend del panel remoto. Se admiten prefijos de ruta, por ejemplo /hermes.", + "gateway.remoteUrlPlaceholder": "https://gateway.ejemplo.com/hermes", + "gateway.sessionToken": "Token de sesión", + "gateway.sessionTokenDesc": "Token de sesión del panel usado para acceso REST y WebSocket. Déjalo en blanco para conservar el token guardado.", + "gateway.sessionTokenPlaceholder": "Pega el token de sesión", + "gateway.existingToken": "Token existente {preview}", + "gateway.tokenSaved": "guardado", + "gateway.testRemote": "Probar remoto", + "gateway.saveRestart": "Guardar para el próximo reinicio", + "gateway.saveReconnect": "Guardar y reconectar", + "gateway.diagnostics": "Diagnóstico", + "gateway.diagnosticsDesc": "Mostrar desktop.log en tu gestor de archivos — útil cuando el Gateway no puede iniciarse.", + "gateway.openLogs": "Abrir registros", + "sessions.loading": "Cargando…", + "sessions.defaultProjectDir": "Directorio de proyecto predeterminado", + "sessions.defaultProjectDirDesc": "Las sesiones nuevas comienzan en esta carpeta a menos que elijas otra. Déjalo sin configurar para usar tu directorio personal.", + "sessions.defaultDir": "Por defecto {fallback}.", + "sessions.notSet": "No establecido", + "sessions.change": "Cambiar", + "sessions.choose": "Elegir", + "sessions.clear": "Limpiar", + "sessions.archivedTitle": "Sesiones archivadas", + "sessions.archivedDesc": "Los chats archivados se ocultan de la barra lateral pero conservan todos sus mensajes. Haz Ctrl/⌘-clic en un chat de la barra lateral para archivarlo.", + "sessions.nothingArchived": "Nada archivado", + "sessions.noSearchMatch": "Ningún chat archivado coincide con tu búsqueda.", + "sessions.archiveToHide": "Archiva un chat para ocultarlo aquí.", + "sessions.unarchive": "Desarchivar", + "sessions.deletePermanently": "Eliminar permanentemente", + "sessions.messages": "{count} mensajes", + "mcp.loading": "Cargando servidores MCP…", + "mcp.servers": "Servidores MCP", + "mcp.configured": "{count} configurados", + "mcp.newServer": "Nuevo servidor", + "mcp.reloadMCP": "Recargar MCP", + "mcp.reloading": "Recargando...", + "mcp.noServersDesc": "Añade un servidor STDIO o HTTP para exponer herramientas MCP.", + "mcp.name": "Nombre", + "mcp.namePlaceholder": "sistema-de-archivos", + "mcp.serverJSON": "JSON del servidor", + "mcp.editServer": "Editar servidor", + "mcp.saveServer": "Guardar servidor", + "mcp.saving": "Guardando...", + "mcp.remove": "Eliminar", + "mcp.disabled": "desactivado", + "model.auxTask.vision": "Visión", + "model.auxTask.visionHint": "Análisis de imágenes", + "model.auxTask.web_extract": "Extracción web", + "model.auxTask.web_extractHint": "Resumen de páginas", + "model.auxTask.compression": "Compresión", + "model.auxTask.compressionHint": "Compactación de contexto", + "model.auxTask.session_search": "Búsqueda de sesiones", + "model.auxTask.session_searchHint": "Consultas de recuperación", + "model.auxTask.skills_hub": "Hub de skills", + "model.auxTask.skills_hubHint": "Búsqueda de skills", + "model.auxTask.approval": "Aprobación", + "model.auxTask.approvalHint": "Auto-aprobación inteligente", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "Enrutamiento de herramientas MCP", + "model.auxTask.title_generation": "Generación de títulos", + "model.auxTask.title_generationHint": "Títulos de sesión", + "model.auxTask.curator": "Curador", + "model.auxTask.curatorHint": "Revisión de uso de skills", + "model.mainModel": "Modelo principal", + "model.mainDesc": "Se aplica a sesiones nuevas. Usa el selector de modelos en el compositor para cambiar el chat activo sobre la marcha.", + "model.providerPlaceholder": "Proveedor", + "model.modelPlaceholder": "Modelo", + "model.apply": "Aplicar", + "model.applying": "Aplicando…", + "model.auxiliaryModels": "Modelos auxiliares", + "model.auxiliaryDesc": "Las tareas auxiliares se ejecutan en el modelo principal por defecto. Asigna un modelo dedicado a cualquier tarea para anularlo.", + "model.resetAllToMain": "Restablecer todo al principal", + "model.setToMain": "Usar modelo principal", + "model.change": "Cambiar", + "model.cancel": "Cancelar", + "model.autoUseMain": "auto · usar modelo principal", + "model.providerDefault": "(predeterminado del proveedor)", + "model.loading": "Cargando configuración del modelo…", + "updates.checking": "Buscando actualizaciones…", + "updates.available": "Actualización disponible", + "updates.downloading": "Descargando…", + "updates.installing": "Instalando…", + "updates.restart": "Reiniciar para actualizar", + "errors.generic": "Algo salió mal.", + "errors.notFound": "Página no encontrada.", + "errors.noPermission": "No tienes permiso para acceder a esto.", + "tool.toolCall": "Llamada a herramienta", + "tool.result": "Resultado", + "tool.error": "Error", + "tool.timeout": "Tiempo agotado", + "tool.cancelled": "Cancelado", + "tool.running": "En ejecución", + "tool.recovered": "Recuperado", + "tool.done": "Hecho", + "tool.output": "Salida de la herramienta", + "tool.searchResults": "Resultados de búsqueda", + "tool.rawResponse": "Respuesta sin procesar", + "tool.stdout": "salida estándar", + "tool.stderr": "error estándar", + "tool.copyActivity": "Copiar actividad", + "composer.startingHermes": "Iniciando Hermes...", + "composer.sendFollowUp": "Enviar seguimiento", + "composer.message": "Mensaje", + "composer.editingQueued": "Editando turno en cola en el compositor", + "composer.attach": "Adjuntar", + "composer.files": "Archivos…", + "composer.folder": "Carpeta…", + "composer.images": "Imágenes…", + "composer.pasteImage": "Pegar imagen", + "composer.url": "URL…", + "composer.promptSnippets": "Fragmentos de prompt", + "composer.promptSnippetsDesc": "Elige un prompt de inicio para colocarlo en el compositor.", + "composer.voiceStart": "Iniciar conversación por voz", + "composer.queue": "Poner en cola", + "composer.speaking": "Hablando", + "composer.transcribing": "Transcribiendo", + "composer.muted": "Silenciado", + "composer.listening": "Escuchando", + "composer.unmuteMic": "Activar micrófono", + "composer.muteMic": "Silenciar micrófono", + "composer.stopListening": "Dejar de escuchar y enviar", + "composer.endVoice": "Finalizar conversación por voz", + "composer.end": "Finalizar", + "composer.stopDictation": "Detener dictado", + "composer.transcribingDictation": "Transcribiendo dictado", + "composer.voiceDictation": "Dictado por voz", + "sessions.new": "Nueva sesión", + "sessions.running": "Sesión en curso", + "sessions.actions": "Acciones de sesión", + "sessions.reorder": "Reordenar", + "sessions.pin": "Fijar", + "sessions.unpin": "Desfijar", + "sessions.copyId": "Copiar ID", + "sessions.rename": "Renombrar", + "sessions.archive": "Archivar", + "sessions.renameDialog": "Renombrar sesión", + "sessions.renameDesc": "Dale a este chat un título fácil de recordar. Déjalo vacío para limpiar.", + "sessions.untitled": "Sesión sin título", + "sessions.renamed": "Renombrada", + "sessions.renameFailed": "Error al renombrar", + "sessions.pinned": "Fijada", + "sessions.results": "Resultados", + "sessions.allPinned": "Todo aquí está fijado. Desfija un chat para mostrarlo en recientes.", + "sessions.pinHint": "Mayús-clic para fijar un chat · arrastra para reordenar", + "sessions.loadMore": "Cargar más", + "sessions.noWorkspace": "Sin espacio de trabajo", + "sessions.ungroup": "Mostrar sesiones como lista única", + "sessions.groupByWorkspace": "Agrupar sesiones por espacio de trabajo", + "skills.tools": "Skills y herramientas", + "artifacts": "Artefactos", + "common.clearSearch": "Limpiar búsqueda", + "common.copy": "Copiar", + "common.refresh": "Actualizar", + "common.moreActions": "Más acciones", + "common.tryAgain": "Intentar de nuevo", + "chat.loadingSession": "Cargando sesión", + "chat.loadingResponse": "Hermes está cargando una respuesta", + "chat.branchInNewChat": "Ramificar en nuevo chat", + "chat.readAloud": "Leer en voz alta", + "chat.preparingAudio": "Preparando audio...", + "chat.stopReading": "Dejar de leer", + "chat.editMessage": "Editar mensaje", + "chat.editableCheckpoint": "Punto de control editable", + "chat.restoreCheckpoint": "Restaurar punto de control", + "chat.goForward": "Avanzar", + "chat.restorePrevCheckpoint": "Restaurar punto de control anterior", + "chat.restoreNextCheckpoint": "Restaurar punto de control siguiente", + "models.title": "Modelos", + "models.search": "Buscar modelos", + "models.addProvider": "Añadir proveedor…", + "errors.somethingBroke": "Algo se rompió en la interfaz", + "errors.viewCrashedDesc": "La vista encontró un error inesperado. Tus chats y configuraciones están a salvo — inténtalo de nuevo o recarga la ventana.", + "errors.noProviders": "No hay proveedores autenticados.", + "onboarding.setupTitle": "Vamos a configurar Hermes Agent", + "onboarding.setupDesc": "Conecta un proveedor de modelos para empezar a chatear. La mayoría de opciones son con un solo clic.", + "onboarding.preparing": "Iniciando Hermes…", + "onboarding.installing": "Hermes está terminando la instalación. Esto suele tardar menos de un minuto en la primera ejecución.", + "onboarding.lookingUp": "Buscando proveedores...", + "onboarding.otherProviders": "Otros proveedores", + "onboarding.collapse": "Contraer", + "onboarding.iHaveKey": "Tengo una clave API", + "onboarding.recommended": "Recomendado", + "onboarding.connected": "Conectado", + "onboarding.backToSignIn": "Volver a inicio de sesión", + "onboarding.getKey": "Obtener clave", + "onboarding.pasteKey": "Pegar clave API", + "onboarding.connect": "Conectar", + "onboarding.connecting": "Conectando", + "onboarding.copyCode": "Copiar", + "onboarding.startSignIn": "Iniciando sesión para", + "onboarding.verifyingCode": "Verificando tu código con", + "onboarding.pickingModel": "conectado. Eligiendo un modelo predeterminado...", + "onboarding.signInFailed": "Error al iniciar sesión. Inténtalo de nuevo.", + "onboarding.pickDifferent": "Elegir otro proveedor", + "onboarding.signInTitle": "Iniciar sesión con", + "onboarding.step1": "Hemos abierto", + "onboarding.step1End": "en tu navegador.", + "onboarding.step2": "Autoriza a Hermes allí.", + "onboarding.step3": "Copia el código de autorización y pégalo abajo.", + "onboarding.pasteCode": "Pegar código de autorización", + "onboarding.reopenAuth": "Reabrir página de autorización", + "onboarding.cancel": "Cancelar", + "onboarding.browserDesc": "Hemos abierto", + "onboarding.browserDescEnd": "en tu navegador. Autoriza a Hermes allí y te conectarás automáticamente — sin copiar ni pegar nada.", + "onboarding.waitingAuth": "Esperando a que autorices...", + "onboarding.reopenSignIn": "Reabrir página de inicio de sesión", + "onboarding.externalDesc": "inicia sesión a través de su propia CLI. Ejecuta este comando en una terminal, luego vuelve y elige \"Ya he iniciado sesión\":", + "onboarding.iSignedIn": "Ya he iniciado sesión", + "onboarding.enterCode": "Hemos abierto", + "onboarding.enterCodeEnd": "en tu navegador. Introduce este código allí:", + "onboarding.reopenVerification": "Reabrir página de verificación", + "onboarding.defaultModel": "Modelo predeterminado", + "onboarding.freeTier": "Nivel gratuito", + "onboarding.pro": "Pro", + "onboarding.change": "Cambiar", + "onboarding.startChatting": "Empezar a chatear", + "onboarding.docs": "docs", + "onboarding.close": "Cerrar", + "onboarding.savingError": "No se pudo guardar la credencial.", + "install.title": "Hermes necesita una instalación única", + "install.desc": "La instalación automática de primer inicio no está disponible en", + "install.descEnd": "todavía. Abre Terminal y ejecuta el comando de abajo, luego vuelve a iniciar esta aplicación. Los siguientes inicios omitirán este paso.", + "install.installCommand": "Comando de instalación", + "install.copyCommand": "Copiar comando", + "install.viewDocs": "Ver documentación de instalación", + "install.willInstallTo": "Se instalará en", + "install.iRanIt": "Ya lo ejecuté -- reintentar", + "install.failed": "Instalación fallida", + "install.settingUp": "Configurando Hermes Agent", + "install.finishingUp": "Terminando", + "install.failedDesc": "Uno de los pasos de instalación falló. En Windows, esto puede ocurrir si otra instancia de Hermes CLI o de escritorio está en ejecución. Detén todas las instancias de Hermes en ejecución y reintenta. Revisa los detalles abajo o el registro de escritorio para ver la transcripción completa.", + "install.setupDesc": "Esta es una configuración única. El instalador de Hermes está descargando dependencias y configurando tu máquina. Los siguientes inicios omitirán este paso.", + "install.fetchingManifest": "Obteniendo manifiesto del instalador...", + "install.error": "Error", + "install.showOutput": "Mostrar salida del instalador", + "install.hideOutput": "Ocultar salida del instalador", + "install.noOutput": "Aún no hay salida.", + "install.cancelInstall": "Cancelar instalación", + "install.cancelling": "Cancelando...", + "install.copyOutput": "Copiar salida", + "install.copied": "¡Copiado!", + "install.reloadRetry": "Recargar y reintentar", + "install.saveLogs": "Transcripción completa guardada en", + "install.stepsComplete": "pasos completados", + "install.nowLabel": "ahora", + "chat.composerTip": "Consejo: escribe @ para referenciar archivos en línea.", + "composer.addContext": "Añadir contexto", + "sessions.loadStep": "Cargar", + "sessions.moreLabel": "más", + "chat.reconnecting": "Reconectando con Hermes…", + "appearance.toolCallDisplay": "Visualización de llamadas a herramientas", + "appearance.toolCallDisplayDesc": "Producto oculta los datos sin procesar de las herramientas; Técnico muestra entrada/salida completa.", + "appearance.toolViewProduct": "Producto", + "appearance.toolViewTechnical": "Técnico", + "appearance.toolViewProductDesc": "Actividad de herramientas amigable con resúmenes concisos.", + "appearance.toolViewTechnicalDesc": "Incluir argumentos/resultados sin procesar y detalles de bajo nivel.", + "messaging.recommended": "Recomendado", + "messaging.recommendedTelegram": "Recomendado. IDs numéricos separados por comas de @userinfobot. Sin esto, cualquiera puede enviar MD a tu bot.", + "messaging.recommendedDiscord": "Recomendado. IDs de usuario de Discord separados por comas.", + "messaging.recommendedSlack": "Recomendado. IDs de usuario de Slack separados por comas.", + "messaging.recommendedMattermost": "Recomendado. IDs de usuario de Mattermost separados por comas.", + "messaging.recommendedMatrix": "Recomendado. IDs de usuario separados por comas en formato @usuario:servidor.", + "messaging.recommendedSignal": "Recomendado. Identificadores de Signal separados por comas.", + "messaging.recommendedWhatsApp": "Recomendado. Números de teléfono o IDs de WhatsApp separados por comas.", + "previewConsole.resizeLabel": "Redimensionar consola de vista previa", + "boot.ipcUnavailable": "El puente IPC de escritorio no está disponible.", + "boot.backendExited": "El proceso en segundo plano de Hermes terminó durante el inicio.", + "boot.backendStoppedTitle": "Backend detenido", + "boot.backendStoppedMessage": "El proceso en segundo plano de Hermes terminó.", + "boot.startingConnection": "Iniciando conexión de escritorio", + "boot.connectingGateway": "Conectando Gateway de escritorio en vivo", + "boot.loadingConfig": "Cargando configuración de Hermes", + "boot.loadingSessions": "Cargando sesiones recientes", + "boot.desktopBootFailed": "Error al iniciar el escritorio", + "updates.stageGettingReady": "Preparando…", + "updates.stageDownloading": "Descargando…", + "updates.stageAlmostThere": "Ya casi…", + "updates.stageFinishingUp": "Terminando…", + "updates.stageRestarting": "Reiniciando Hermes…", + "updates.stageManual": "Actualizar desde tu terminal", + "updates.stageError": "Actualización pausada", + "updates.updatingHermes": "Actualizando Hermes…", + "updates.lookingForUpdates": "Buscando actualizaciones…", + "updates.couldntCheck": "No se pudo buscar actualizaciones", + "updates.updateNotAvailable": "Actualización no disponible", + "updates.checkConnection": "Comprueba tu conexión e inténtalo de nuevo.", + "updates.onLatest": "Estás ejecutando la última versión.", + "updates.allSet": "Todo listo", + "updates.newUpdateAvailable": "Nueva actualización disponible", + "updates.readyToInstall": "Una nueva versión de Hermes está lista para instalar.", + "updates.updateNow": "Actualizar ahora", + "updates.maybeLater": "Quizás más tarde", + "updates.moreChanges": "+ {count} cambio más incluido.", + "updates.moreChanges_plural": "+ {count} cambios más incluidos.", + "updates.updateFromTerminal": "Actualizar desde tu terminal", + "updates.terminalDesc": "Instalaste Hermes desde la línea de comandos, así que las actualizaciones también se ejecutan allí. Pega esto en tu terminal:", + "updates.copied": "Copiado", + "updates.copy": "Copiar", + "updates.pickupNewVersion": "Hermes detectará la nueva versión la próxima vez que lo inicies.", + "updates.done": "Hecho", + "updates.updaterDesc": "El actualizador de Hermes tomará el control en su propia ventana y reabrirá Hermes cuando termine.", + "updates.closeToApply": "Hermes se cerrará para aplicar la actualización.", + "updates.updateDidntFinish": "La actualización no terminó", + "updates.nothingLost": "No te preocupes — no se ha perdido nada. Puedes intentarlo de nuevo ahora.", + "updates.notNow": "Ahora no", + "commandCenter.sessionsPanel": "Panel de sesiones", + "commandCenter.systemPanel": "Panel del sistema", + "commandCenter.usagePanel": "Panel de uso", + "commandCenter.navigate": "Navegar", + "commandCenter.noMatchingResults": "No se encontraron resultados coincidentes.", + "commandCenter.noSessionsYet": "Aún no hay sesiones.", + "commandCenter.unpinSession": "Desfijar sesión", + "commandCenter.pinSession": "Fijar sesión", + "commandCenter.exportSession": "Exportar sesión", + "commandCenter.deleteSession": "Eliminar sesión", + "commandCenter.gatewayRunning": "Gateway de mensajería en ejecución", + "commandCenter.gatewayStopped": "Gateway de mensajería detenido", + "commandCenter.restartMsg": "Reiniciar mensajería", + "commandCenter.updateHermes": "Actualizar Hermes", + "commandCenter.noLogsLoaded": "Aún no se han cargado registros.", + "commandCenter.closeLabel": "Cerrar centro de mando", + "commandCenter.searchPlaceholder": "Buscar sesiones, vistas y acciones", + "commandCenter.statSessions": "Sesiones", + "commandCenter.statApiCalls": "Llamadas API", + "commandCenter.statTokens": "Tokens entrada/salida", + "commandCenter.statEstCost": "Coste est.", + "commandCenter.actualCost": "real {cost}", + "commandCenter.loadingUsage": "Cargando uso...", + "commandCenter.noUsageDesc": "Sin uso en los últimos {count} días.", + "commandCenter.retry": "Reintentar", + "commandCenter.tokenInput": "entrada", + "commandCenter.tokenOutput": "salida", + "commandCenter.noDailyActivity": "Sin actividad diaria.", + "commandCenter.topModels": "Modelos principales", + "commandCenter.topSkills": "Skills principales", + "commandCenter.actionsLabel": "acciones", + "commandCenter.systemRunning": "en ejecución", + "commandCenter.systemDone": "hecho", + "commandCenter.systemFailed": "fallido", + "mcp.nameRequired": "Nombre obligatorio", + "mcp.nameRequiredDesc": "Asigna una clave de configuración a este servidor MCP.", + "mcp.invalidJson": "La configuración del servidor debe ser un objeto JSON", + "mcp.invalidJsonDesc": "JSON MCP no válido", + "mcp.saved": "Servidor MCP guardado", + "mcp.savedDesc": "{name} se aplica después de recargar MCP.", + "mcp.saveFailed": "Error al guardar", + "mcp.removeFailed": "Error al eliminar", + "mcp.gatewayUnavailable": "Gateway no disponible", + "mcp.gatewayUnavailableDesc": "Reconecta el Gateway antes de recargar MCP.", + "mcp.reloadedTitle": "Herramientas MCP recargadas", + "mcp.reloadedDesc": "Los nuevos esquemas de herramientas se aplican a nuevos turnos.", + "mcp.reloadFailed": "Error al recargar MCP", + "urlDialog.title": "Adjuntar una URL", + "urlDialog.description": "Hermes obtendrá la página y la incluirá como contexto para este turno.", + "urlDialog.placeholder": "https://ejemplo.com/articulo", + "urlDialog.hint": "Incluye la URL completa, p.ej.", + "urlDialog.attach": "Adjuntar", + "model.options": "Opciones", + "model.thinking": "Pensamiento", + "model.fast": "Rápido", + "model.effort": "Esfuerzo", + "model.noOptions": "Sin opciones para este modelo", + "model.optionUpdateFailed": "Error al actualizar la opción del modelo", + "model.fastModeUpdateFailed": "Error al actualizar el modo rápido", + "model.effortMinimal": "Mínimo", + "model.effortLow": "Bajo", + "model.effortMedium": "Medio", + "model.effortHigh": "Alto", + "model.effortMax": "Máximo", + "gateway.connected": "Conectado", + "gateway.connecting": "Conectando", + "gateway.disconnected": "Desconectado", + "gateway.inferenceReady": "Inferencia lista", + "gateway.inferenceNotReady": "Inferencia no lista", + "gateway.checkingInference": "Comprobando inferencia", + "gateway.openSystemPanel": "Abrir panel del sistema", + "gateway.connectionLabel": "Conexión:", + "gateway.recentActivity": "Actividad reciente", + "gateway.viewAllLogs": "Ver todos los registros →", + "gateway.messagingPlatforms": "Plataformas de mensajería", + "titlebar.hideSidebar": "Ocultar barra lateral", + "titlebar.showSidebar": "Mostrar barra lateral", + "titlebar.search": "Buscar", + "titlebar.searchTitle": "Buscar sesiones, vistas y acciones", + "titlebar.hideRightSidebar": "Ocultar barra lateral derecha", + "titlebar.showRightSidebar": "Mostrar barra lateral derecha", + "titlebar.unmuteHaptics": "Activar hápticos", + "titlebar.muteHaptics": "Silenciar hápticos", + "titlebar.openSettings": "Abrir configuración", + "titlebar.profiles": "Perfiles", + "titlebar.profilesDesc": "Entornos avanzados de Hermes para personas, configuración, skills y SOUL.md separados.", + "titlebar.manageProfiles": "Gestionar perfiles", + "pagination.ariaLabel": "paginación", + "pagination.prevAria": "Ir a la página anterior", + "pagination.prev": "Anterior", + "pagination.nextAria": "Ir a la página siguiente", + "pagination.next": "Siguiente", + "boot.couldNotStart": "Hermes no pudo iniciarse", + "boot.recoveryDesc": "El Gateway en segundo plano no se inició. Prueba uno de los pasos de recuperación de abajo — nada de esto elimina tus chats o configuraciones.", + "boot.retry": "Reintentar", + "boot.repairInstall": "Reparar instalación", + "boot.useLocalGateway": "Usar Gateway local", + "boot.openLogs": "Abrir registros", + "boot.repairHint": "La reparación vuelve a ejecutar el instalador y puede tardar unos minutos en una máquina nueva.", + "boot.showLogs": "Mostrar registros recientes", + "boot.hideLogs": "Ocultar registros recientes", + "bootstrap.pending": "Pendiente", + "bootstrap.running": "Instalando", + "bootstrap.done": "Hecho", + "bootstrap.skipped": "Omitido", + "bootstrap.failed": "Fallido", + "model.switch": "Cambiar modelo", + "model.unknown": "(desconocido)", + "model.filterPlaceholder": "Filtrar proveedores y modelos...", + "model.persistGlobal": "Persistir globalmente", + "model.persistGlobalSession": "Persistir globalmente (de lo contrario solo esta sesión)", + "model.couldNotLoad": "No se pudieron cargar los modelos", + "model.proLockedDesc": "Los modelos Pro requieren una suscripción de pago de Nous.", + "model.priceTooltip": "Precio de entrada/salida por millón de tokens", + "model.freePrice": "Gratis", + "model.currentLabel": "actual:", + "model.addProviderBtn": "Añadir proveedor", + "sidebar.sheetTitle": "Barra lateral", + "sidebar.sheetDesc": "Muestra la barra lateral en móvil.", + "sidebar.toggle": "Alternar barra lateral", + "clarify.hermesIsAsking": "Hermes está preguntando", + "clarify.loadingQuestion": "Cargando pregunta…", + "clarify.otherTypeAnswer": "Otro (escribe tu respuesta)", + "clarify.placeholderAnswer": "Escribe tu respuesta…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter para enviar", + "clarify.back": "Atrás", + "clarify.skip": "Saltar", + "clarify.couldNotSend": "No se pudo enviar la respuesta de aclaración", + "clarify.pickLabel": "1–{n} para elegir", + "tool.recoveredAfter": "Recuperado después de 1 paso fallido", + "tool.recoveredAfterN": "Recuperado después de {count} pasos fallidos", + "tool.oneStepFailed": "1 paso fallido", + "tool.nStepsFailed": "{count} pasos fallidos", + "intro.fallback1h": "¿Qué vamos a mover hoy?", + "intro.fallback1b": "Envía un bug, rama, plan o idea aproximada. Inspeccionaré el repositorio y lo convertiré en el siguiente paso concreto.", + "intro.fallback2h": "¿Qué tienes en mente?", + "intro.fallback2b": "Trae el código, la pregunta o la parte bloqueada. Leeré la situación antes de hacer cambios.", + "intro.fallback3h": "¿Qué debería mirar Hermes?", + "intro.fallback3b": "Envía la tarea, la ruta fallida o el plan a medias. Te ayudaré a convertirlo en acción.", + "intro.fallback4h": "¿Por dónde empezamos?", + "intro.fallback4b": "Trae el problema, el objetivo o el archivo. Inspeccionaré primero y mantendré el siguiente paso concreto.", + "intro.fallback5h": "¿Qué necesita atención?", + "intro.fallback5b": "Envía el contexto que tengas. Te ayudaré a convertirlo en un plan o una solución.", + "intro.personality.heading1": "El modo {label} está activado. ¿En qué deberíamos trabajar?", + "intro.personality.body1": "Envía la tarea, archivo o idea aproximada. Usaré tu voz configurada y mantendré el trabajo basado en este repositorio.", + "intro.personality.heading2": "¿Qué necesita ver {label} Hermes?", + "intro.personality.body2": "Trae el contexto o la parte bloqueada. Me adaptaré a tu personalidad configurada.", + "intro.personality.heading3": "El modo {label} está listo.", + "intro.personality.body3": "Envía el problema, archivo o idea. Seguiré la personalidad que has configurado.", + "intro.personality.heading4": "¿Qué debería abordar {label} Hermes?", + "intro.personality.body4": "Deja la tarea aquí. Mantendré el trabajo basado en el repositorio.", + "intro.personality.heading5": "¿Por dónde comenzamos?", + "intro.personality.body5": "Dame el contexto y responderé en modo {label}.", + "intro.brand": "HERMES AGENT", + "install.line": "línea", + "install.lines": "líneas", + "artifacts.noArtifactsFound": "No se encontraron artefactos", + "previewConsole.noMessages": "Aún no hay mensajes en la consola.", + "agents.spawnTree": "Árbol de agentes", + "agents.liveSubagentActivity": "Actividad en vivo de subagentes para el turno actual.", + "agents.noLiveSubagents": "Sin subagentes activos", + "agents.files": "Archivos", + "profiles.noProfilesYet": "Aún no hay perfiles.", + "profiles.selectProfile": "Selecciona un perfil para ver sus detalles.", + "profiles.deleteProfile": "¿Eliminar perfil?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "Cambios sin guardar", + "profiles.newProfile": "Nuevo perfil", + "profiles.cloneFromDefault": "Clonar desde predeterminado", + "profiles.renameProfile": "Renombrar perfil", + "messaging.gatewayStopped": "Gateway de mensajería detenido", + "messaging.getCredentials": "Obtén tus credenciales", + "messaging.required": "Obligatorio", + "messaging.unsavedChanges": "Cambios sin guardar", + "messaging.saved": "Guardado", + "cron.deleteCronJob": "¿Eliminar tarea cron?", + "cron.optional": "Opcional", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "Gateway", + "gateway.inferenceStatus": "Estado de inferencia del Gateway", + "agents.label": "Agentes", + "agents.open": "Abrir agentes", + "agents.close": "Cerrar agentes", + "agents.subagent": "subagente", + "agents.subagents": "subagentes", + "agents.failed": "fallido", + "agents.running": "en ejecución", + "cron.label": "Cron", + "cron.open": "Abrir tareas cron", + "commandCenter.open": "Abrir centro de mando", + "commandCenter.close": "Cerrar centro de mando", + "mcp.giveConfigKey": "Asigna una clave de configuración a este servidor MCP.", + "mcp.reconnectGateway": "Reconecta el Gateway antes de recargar MCP.", + "mcp.newSchemas": "Los nuevos esquemas de herramientas se aplican a nuevos turnos.", + "mcp.loadingServers": "Cargando servidores MCP...", + "mcp.serverName": "Nombre", + "mcp.serversTitle": "Servidores MCP", + "mcp.noServersTitle": "Sin servidores MCP", + "sessions.nothingArchivedTitle": "Nada archivado", + "sessions.deletePermanentlyTitle": "Eliminar permanentemente", + "sessions.defaultProjectDirTitle": "Directorio de proyecto predeterminado", + "sessions.loadingArchived": "Cargando sesiones archivadas…", + "sessions.restored": "Restaurada", + "sessions.projectDirUpdated": "Directorio de proyecto predeterminado actualizado", + "gateway.enterUrlFirst": "Introduce una URL remota y un token de sesión antes de cambiar", + "gateway.enterUrlFirstTest": "Introduce una URL remota y un token de sesión antes de probar", + "config.saving": "Guardando…", + "keys.openProviderDocs": "Abrir documentación del proveedor", + "config.label.defaultModel": "Modelo predeterminado", + "config.label.contextWindow": "Ventana de contexto", + "config.label.fallbackModels": "Modelos de respaldo", + "config.label.enabledToolsets": "Conjuntos de herramientas activados", + "config.label.timezone": "Zona horaria", + "config.label.personality": "Personalidad", + "config.label.reasoningBlocks": "Bloques de razonamiento", + "config.label.maxAgentSteps": "Pasos máx. del agente", + "config.label.imageAttachments": "Adjuntos de imagen", + "config.label.workingDirectory": "Directorio de trabajo", + "config.label.executionBackend": "Backend de ejecución", + "config.label.commandTimeout": "Tiempo de espera de comandos", + "config.label.persistentShell": "Shell persistente", + "config.label.envPassthrough": "Paso de variables de entorno", + "config.label.fileReadLimit": "Límite de lectura de archivos", + "config.label.terminalOutputLimit": "Límite de salida de terminal", + "config.label.filePageLimit": "Límite de página de archivo", + "config.label.lineLengthLimit": "Límite de longitud de línea", + "config.label.codeExecutionMode": "Modo de ejecución de código", + "config.label.approvalMode": "Modo de aprobación", + "config.label.approvalTimeout": "Tiempo de espera de aprobación", + "config.label.confirmMcpReloads": "Confirmar recargas MCP", + "config.label.commandAllowlist": "Lista blanca de comandos", + "config.label.redactSecrets": "Ocultar secretos", + "config.label.allowPrivateUrls": "Permitir URLs privadas", + "config.label.browserPrivateUrls": "URLs privadas del navegador", + "config.label.localBrowserForPrivateUrls": "Navegador local para URLs privadas", + "config.label.fileCheckpoints": "Puntos de control de archivos", + "config.label.checkpointLimit": "Límite de puntos de control", + "config.label.voiceShortcut": "Atajo de voz", + "config.label.maxRecordingLength": "Duración máx. de grabación", + "config.label.readResponsesAloud": "Leer respuestas en voz alta", + "config.label.speechToText": "Voz a texto", + "config.label.speechToTextProvider": "Proveedor de voz a texto", + "config.label.localTranscriptionModel": "Modelo de transcripción local", + "config.label.transcriptionLanguage": "Idioma de transcripción", + "config.label.elevenlabsSttModel": "Modelo STT de ElevenLabs", + "config.label.elevenlabsLanguage": "Idioma de ElevenLabs", + "config.label.tagAudioEvents": "Etiquetar eventos de audio", + "config.label.speakerDiarization": "Diarización de hablantes", + "config.label.textToSpeechProvider": "Proveedor de texto a voz", + "config.label.edgeVoice": "Voz de Edge", + "config.label.openaiTtsModel": "Modelo TTS de OpenAI", + "config.label.openaiVoice": "Voz de OpenAI", + "config.label.elevenlabsVoice": "Voz de ElevenLabs", + "config.label.elevenlabsModel": "Modelo de ElevenLabs", + "config.label.persistentMemory": "Memoria persistente", + "config.label.userProfile": "Perfil de usuario", + "config.label.memoryBudget": "Presupuesto de memoria", + "config.label.profileBudget": "Presupuesto de perfil", + "config.label.memoryProvider": "Proveedor de memoria", + "config.label.contextEngine": "Motor de contexto", + "config.label.autoCompression": "Compresión automática", + "config.label.compressionThreshold": "Umbral de compresión", + "config.label.compressionTarget": "Objetivo de compresión", + "config.label.protectedRecentMessages": "Mensajes recientes protegidos", + "config.label.apiRetries": "Reintentos de API", + "config.label.serviceTier": "Nivel de servicio", + "config.label.toolUseEnforcement": "Obligación de uso de herramientas", + "config.label.subagentModel": "Modelo de subagente", + "config.label.subagentProvider": "Proveedor de subagente", + "config.label.subagentTurnLimit": "Límite de turnos de subagente", + "config.label.parallelSubagents": "Subagentes paralelos", + "config.label.subagentTimeout": "Tiempo de espera de subagente", + "config.label.subagentReasoningEffort": "Esfuerzo de razonamiento del subagente", + "config.desc.defaultModel": "Usado para nuevos chats a menos que elijas otro modelo en el compositor.", + "config.desc.contextWindow": "Deja en 0 para usar la ventana de contexto detectada del modelo seleccionado.", + "config.desc.fallbackModels": "Entradas proveedor:modelo de respaldo a probar si el modelo predeterminado falla.", + "config.desc.personality": "Estilo de asistente predeterminado para nuevas sesiones.", + "config.desc.timezone": "Usado cuando Hermes necesita contexto de hora local. En blanco usa la zona horaria del sistema.", + "config.desc.reasoningBlocks": "Mostrar secciones de razonamiento cuando el backend las proporcione.", + "config.desc.imageAttachments": "Controla cómo se envían los adjuntos de imagen al modelo.", + "config.desc.workingDirectory": "Carpeta de proyecto predeterminada para trabajo con herramientas y terminal.", + "config.desc.codeExecutionMode": "Con qué rigor se limita la ejecución de código al proyecto actual.", + "config.desc.persistentShell": "Mantener el estado del shell entre comandos cuando el backend lo soporte.", + "config.desc.envPassthrough": "Variables de entorno a pasar a la ejecución de herramientas.", + "config.desc.fileReadLimit": "Máximo de caracteres que Hermes puede leer de una solicitud de archivo.", + "config.desc.approvalMode": "Cómo maneja Hermes los comandos que necesitan aprobación explícita.", + "config.desc.approvalTimeout": "Cuánto tiempo esperan las solicitudes de aprobación antes de agotarse.", + "config.desc.redactSecrets": "Ocultar secretos detectados del contenido visible para el modelo cuando sea posible.", + "config.desc.fileCheckpoints": "Crear instantáneas de reversión antes de editar archivos.", + "config.desc.persistentMemory": "Guardar recuerdos duraderos que puedan ayudar en futuras sesiones.", + "config.desc.userProfile": "Mantener un perfil compacto de preferencias de usuario.", + "config.desc.contextEngine": "Estrategia para gestionar conversaciones largas cerca del límite de contexto.", + "config.desc.autoCompression": "Resumir contexto antiguo cuando las conversaciones crecen mucho.", + "config.desc.readResponsesAloud": "Leer automáticamente las respuestas del asistente en voz alta.", + "config.desc.speechToText": "Activar transcripción de voz local o mediante proveedor.", + "config.desc.elevenlabsLanguage": "Código de idioma ISO-639-3 opcional. En blanco deja que ElevenLabs lo detecte automáticamente.", + "config.desc.maxAgentSteps": "Límite superior de turnos de llamadas a herramientas antes de que Hermes detenga una ejecución.", + "mcp.failedToLoad": "Error al cargar la configuración MCP", + "mcp.invalidJsonShort": "JSON MCP no válido", + "mcp.serverSaved": "Servidor MCP guardado", + "mcp.toolsReloaded": "Herramientas MCP recargadas", + "mcp.emptyDesc": "Añade un servidor STDIO o HTTP para exponer herramientas MCP.", + "sessions.loadFailed": "No se pudieron cargar las sesiones archivadas", + "sessions.unarchiveFailed": "Error al desarchivar", + "sessions.deleteFailed": "Error al eliminar", + "sessions.archiveHint": "Archiva un chat para ocultarlo aquí.", + "sessions.updateDirFailed": "No se pudo actualizar el directorio predeterminado", + "sessions.clearDirFailed": "No se pudo limpiar el directorio predeterminado", + "keys.showAdvanced": "Mostrar avanzado", + "keys.loadFailed": "Error al cargar las claves API", + "keys.credentialSaved": "Credencial guardada", + "keys.credentialRemoved": "Credencial eliminada", + "provider.desc.nousPortal": "Anulación de URL base del Portal Nous", + "provider.desc.openRouter": "Clave API de OpenRouter (para visión, ayudantes de extracción web y MoA)", + "provider.desc.google": "Clave API de Google AI Studio (también reconocida como GEMINI_API_KEY)", + "provider.desc.gemini": "ID de proyecto GCP para niveles Gemini de pago (el nivel gratuito se aprovisiona automáticamente)", + "provider.desc.anthropic": "Clave API de Anthropic", + "provider.desc.deepseek": "URL base personalizada de la API de DeepSeek (avanzado)", + "provider.desc.xai": "Anulación de URL base de xAI", + "provider.desc.huggingface": "Anulación de URL base de Hugging Face Inference Providers", + "provider.desc.kimi": "Clave API de Kimi / Moonshot China", + "provider.desc.minimax": "Anulación de URL base de MiniMax (China)", + "provider.desc.minimaxCn": "Clave API de MiniMax China", + "provider.desc.dashscope": "URL base personalizada de DashScope (predeterminado: endpoint compatible con OpenAI coding-intl)", + "provider.desc.glm": "Clave API de GLM (Z.AI)", + "provider.desc.nvidia": "Anulación de URL base de NVIDIA NIM (p.ej. http://localhost:8000/v1 para NIM local)", + "provider.desc.opencodeGo": "Clave API de OpenCode Go", + "provider.desc.opencodeZen": "Clave API de OpenCode Zen", + "provider.desc.xiaomi": "Anulación de URL base de Xiaomi MiMo (predeterminado: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Clave API de Kilo Code", + "provider.desc.aiGateway": "Clave API de AI Gateway (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "Clave API de ElevenLabs", + "provider.desc.openai": "Clave API de OpenAI (para procesamiento de voz mediante proxy)", + "provider.desc.mistral": "Clave API de Mistral (para STT/TTS)", + "provider.desc.groq": "Clave API de Groq (para STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "URL de API de Firecrawl para instancias autoalojadas (opcional)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Anulación de URL base del Portal Nous", + "provider.desc.openrouter": "Clave API de OpenRouter (para visión, ayudantes de extracción web y MoA)", + "provider.desc.lmstudio": "Anulación de URL base de Z.AI / GLM", + "provider.desc.zai": "URL base de Azure Foundry (configurar mediante 'hermes model' para configuración específica de endpoint)", + "provider.desc.stepfun": "Anulación de URL base de StepFun Step Plan", + "provider.desc.arcee": "Anulación de URL base de Arcee AI", + "provider.desc.gmi": "Anulación de URL base de GMI Cloud", + "provider.desc.qwenportal": "Anulación de URL base de Qwen Portal (predeterminado: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "Anulación de URL base de OpenCode Go", + "provider.desc.ollamacloud": "Anulación de URL base de Ollama Cloud (predeterminado: https://ollama.com/v1)", + "provider.desc.awsbedrock": "Perfil nombrado de AWS para autenticación Bedrock (de ~/.aws/credentials)", + "provider.desc.exa": "Clave API de Exa para búsqueda web y contenidos con IA nativa", + "provider.desc.parallel": "Clave API de Parallel para búsqueda web y extracción con IA nativa", + "titlebar.language": "Idioma", + "titlebar.languageDesc": "Elige un idioma para la interfaz.", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} \ No newline at end of file diff --git a/apps/desktop/src/locales/fr.json b/apps/desktop/src/locales/fr.json new file mode 100644 index 000000000000..f3f36ee5c018 --- /dev/null +++ b/apps/desktop/src/locales/fr.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "Apparence", + "appearance.description": "Préférences d'affichage propres au bureau. Le mode contrôle la luminosité ; le thème contrôle la palette d'accent et le style de la surface de discussion.", + "appearance.colorMode": "Mode de couleur", + "appearance.colorModeDesc": "Choisis un mode fixe ou laisse Hermes suivre le réglage de ton système.", + "appearance.theme": "Thème", + "appearance.themeDesc": "Choisis une palette de couleurs pour la surface de discussion et les accents de l'interface.", + "appearance.mode.light": "Clair", + "appearance.mode.lightDesc": "Surfaces de bureau lumineuses", + "appearance.mode.dark": "Sombre", + "appearance.mode.darkDesc": "Espace de travail sans éblouissement", + "appearance.mode.system": "Système", + "appearance.mode.systemDesc": "Suivre l'apparence du système", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Neutres vitreux avec accents bleus Nous", + "appearance.theme.midnight": "Minuit", + "appearance.theme.midnightDesc": "Bleu-violet profond avec accents froids", + "appearance.theme.ember": "Braise", + "appearance.theme.emberDesc": "Cramoisi et bronze chauds — ambiance forge", + "appearance.theme.mono": "Mono", + "appearance.theme.monoDesc": "Niveaux de gris épurés — minimal et concentré", + "appearance.theme.cyberpunk": "Cyberpunk", + "appearance.theme.cyberpunkDesc": "Vert néon sur noir — terminal matrix", + "appearance.theme.slate": "Ardoise", + "appearance.theme.slateDesc": "Bleu ardoise froid — thème développeur concentré", + "appearance.language": "Langue", + "appearance.languageDesc": "Choisis la langue de l'interface ou laisse Hermes suivre le réglage de ton système.", + "language.system": "Suivre le système", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "Paramètres", + "settings.appearance": "Apparence", + "settings.model": "Modèle", + "settings.gateway": "Passerelle", + "settings.sessions": "Sessions", + "settings.tools": "Outils & Skills", + "settings.section.chat": "Discussion", + "settings.section.workspace": "Espace de travail", + "settings.section.safety": "Sécurité", + "settings.section.memory": "Mémoire & Contexte", + "settings.section.voice": "Voix", + "settings.section.advanced": "Avancé", + "settings.mcp": "Serveurs MCP", + "settings.config": "Configuration", + "settings.keys": "Clés API", + "settings.about": "À propos", + "chat.placeholder": "Pose-moi une question…", + "chat.send": "Envoyer", + "chat.stop": "Arrêter", + "chat.thinking": "Réflexion…", + "chat.noSession": "Aucune session active. Lance une nouvelle conversation.", + "commandCenter.title": "Centre de commande", + "commandCenter.noSessions": "Aucune session pour le moment.", + "commandCenter.loadingStatus": "Chargement du statut…", + "commandCenter.recentLogs": "Logs récents", + "commandCenter.dailyTokens": "Tokens quotidiens", + "commandCenter.noActivity": "Aucune activité quotidienne.", + "commandCenter.noModelUsage": "Aucune utilisation de modèle pour le moment.", + "commandCenter.noSkillActivity": "Aucune activité de skill pour le moment.", + "common.loading": "Chargement…", + "common.save": "Enregistrer", + "common.cancel": "Annuler", + "common.close": "Fermer", + "common.delete": "Supprimer", + "common.confirm": "Confirmer", + "common.search": "Rechercher…", + "onboarding.welcome": "Bienvenue sur Hermes", + "onboarding.getStarted": "Commence par choisir un fournisseur et un modèle.", + "onboarding.skip": "Passer", + "onboarding.continue": "Continuer", + "onboarding.finish": "Terminer", + "file.browser": "Explorateur de fichiers", + "file.noFiles": "Aucun fichier pour le moment.", + "terminal.title": "Terminal", + "terminal.newTab": "Nouvel onglet", + "terminal.closeTab": "Fermer l'onglet", + "skills.title": "Skills", + "skills.search": "Rechercher des skills…", + "skills.noResults": "Aucun skill trouvé.", + "profiles.title": "Profils", + "cron.title": "Tâches Cron", + "cron.noJobs": "Aucune tâche planifiée.", + "messaging.title": "Messagerie", + "about.version": "Version", + "about.checkUpdates": "Vérifier les mises à jour", + "about.upToDate": "Hermes est à jour.", + "about.updateAvailable": "Une mise à jour est disponible.", + "about.license": "Licence MIT", + "keys.title": "Clés API", + "keys.noKeys": "Aucune clé API configurée.", + "keys.addKey": "Ajouter une clé", + "config.title": "Configuration", + "config.edit": "Modifier la configuration", + "config.reload": "Recharger la configuration", + "gateway.title": "Passerelle", + "gateway.start": "Démarrer la passerelle", + "gateway.stop": "Arrêter la passerelle", + "gateway.restart": "Redémarrer la passerelle", + "gateway.running": "En cours", + "gateway.stopped": "Arrêtée", + "sessions.title": "Sessions", + "sessions.search": "Rechercher des sessions…", + "sessions.noResults": "Aucune session trouvée.", + "sessions.export": "Exporter", + "sessions.delete": "Supprimer la session", + "mcp.title": "Serveurs MCP", + "mcp.addServer": "Ajouter un serveur", + "mcp.noServers": "Aucun serveur MCP configuré.", + "tools.title": "Outils & Skills", + "tools.noTools": "Aucun outil disponible.", + "nav.home": "Accueil", + "nav.chat": "Discussion", + "nav.settings": "Paramètres", + "nav.files": "Fichiers", + "nav.terminal": "Terminal", + "header.search": "Rechercher ou taper une commande…", + "settings.closeSettings": "Fermer les paramètres", + "settings.archivedChats": "Discussions archivées", + "settings.exportConfig": "Exporter la configuration", + "settings.importConfig": "Importer la configuration", + "settings.resetDefaults": "Réinitialiser par défaut", + "settings.llmProviders": "Fournisseurs LLM", + "settings.searchPlaceholder.about": "À propos d'Hermes Desktop", + "settings.searchPlaceholder.config": "Rechercher dans les paramètres…", + "settings.searchPlaceholder.gateway": "Connexion à la passerelle…", + "settings.searchPlaceholder.keys": "Rechercher des clés API…", + "settings.searchPlaceholder.mcp": "Rechercher des serveurs MCP…", + "settings.searchPlaceholder.sessions": "Rechercher des sessions archivées…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "Version indisponible", + "about.updates": "Mises à jour", + "about.checkNow": "Vérifier maintenant", + "about.checking": "Vérification…", + "about.seeWhatsNew": "Voir les nouveautés", + "about.releaseNotes": "Notes de version", + "about.autoUpdates": "Mises à jour automatiques", + "about.autoUpdatesDesc": "Hermes vérifie les mises à jour automatiquement en arrière-plan et te prévient quand une mise à jour est prête.", + "about.selfUpdateUnsupported": "Cette version ne peut pas se mettre à jour depuis l'application.", + "about.cannotReachServer": "Impossible de joindre le serveur de mises à jour.", + "about.installingUpdate": "Une mise à jour est en cours d'installation.", + "about.updateReady": "Une nouvelle mise à jour est prête ({count} modification incluse).", + "about.updateReady_plural": "Une nouvelle mise à jour est prête ({count} modifications incluses).", + "about.onLatest": "Tu utilises la dernière version.", + "about.tapCheckNow": "Clique sur « Vérifier maintenant » pour chercher des mises à jour.", + "about.lastChecked": "Dernière vérification {time}", + "about.justNow": "à l'instant", + "about.never": "jamais", + "about.minAgo": "il y a {count} min", + "about.hoursAgo": "il y a {count} heures", + "about.daysAgo": "il y a {count} jours", + "about.buildInfo": "Branche {branch} · Commit {sha}", + "keys.loading": "Chargement des clés API et identifiants…", + "keys.docs": "Docs", + "keys.openDocs": "Ouvrir la documentation du fournisseur", + "keys.hideValue": "Masquer la valeur", + "keys.revealValue": "Afficher la valeur", + "keys.set": "Définie", + "keys.notSet": "Non définie", + "keys.replace": "Remplacer", + "keys.replaceValue": "Remplacer la valeur actuelle", + "keys.enterValue": "Saisir la valeur", + "keys.saving": "Enregistrement", + "keys.save": "Enregistrer", + "keys.cancel": "Annuler", + "keys.clearValue": "Effacer la valeur", + "keys.configured": "{count} sur {total} configurées", + "keys.setCount": "{count} sur {total} définies", + "keys.countSet": "{count} définies", + "keys.countKeys": "{count} clés", + "keys.otherProviders": "Autres fournisseurs", + "keys.categoryTools": "Outils", + "keys.categoryMessaging": "Messagerie", + "keys.categorySettings": "Paramètres", + "config.notSet": "Non défini", + "config.commaSeparated": "valeurs séparées par des virgules", + "config.on": "Activé", + "config.off": "Désactivé", + "config.none": "Aucun", + "config.emptyOption": "(aucun)", + "config.loading": "Chargement de la configuration Hermes…", + "config.noMatching": "Aucun paramètre correspondant", + "config.noMatchingDesc": "Essaie un autre terme de recherche ou choisis une autre section.", + "config.results": "{count} résultat", + "config.results_plural": "{count} résultats", + "gateway.loading": "Chargement des paramètres de la passerelle…", + "gateway.unavailable": "Paramètres de la passerelle indisponibles", + "gateway.unavailableDesc": "Le pont IPC du bureau n'expose pas les paramètres de la passerelle.", + "gateway.connection": "Connexion à la passerelle", + "gateway.envOverride": "surcharge par variable d'env", + "gateway.desc": "Hermes Desktop démarre sa propre passerelle locale par défaut. Utilise une passerelle distante quand tu veux que cette application contrôle un backend Hermes déjà en cours d'exécution sur une autre machine ou derrière un proxy de confiance.", + "gateway.envOverrideTitle": "Des variables d'environnement contrôlent cette session bureau.", + "gateway.envOverrideDesc": "Désactive {urlVar} et {tokenVar} pour utiliser le paramètre enregistré ci-dessous.", + "gateway.localTitle": "Passerelle locale", + "gateway.localDesc": "Démarre un backend Hermes privé sur localhost. C'est le mode par défaut et cela fonctionne hors ligne.", + "gateway.remoteTitle": "Passerelle distante", + "gateway.remoteDesc": "Connecte cette interface bureau à un backend Hermes distant en utilisant son jeton de session.", + "gateway.remoteUrl": "URL distante", + "gateway.remoteUrlDesc": "URL de base du backend du tableau de bord distant. Les préfixes de chemin sont supportés, par exemple /hermes.", + "gateway.remoteUrlPlaceholder": "https://passerelle.exemple.com/hermes", + "gateway.sessionToken": "Jeton de session", + "gateway.sessionTokenDesc": "Le jeton de session du tableau de bord utilisé pour l'accès REST et WebSocket. Laisse vide pour conserver le jeton enregistré.", + "gateway.sessionTokenPlaceholder": "Coller le jeton de session", + "gateway.existingToken": "Jeton existant {preview}", + "gateway.tokenSaved": "enregistré", + "gateway.testRemote": "Tester la connexion distante", + "gateway.saveRestart": "Enregistrer pour le prochain redémarrage", + "gateway.saveReconnect": "Enregistrer et reconnecter", + "gateway.diagnostics": "Diagnostics", + "gateway.diagnosticsDesc": "Affiche desktop.log dans ton gestionnaire de fichiers — utile quand la passerelle ne démarre pas.", + "gateway.openLogs": "Ouvrir les logs", + "sessions.loading": "Chargement…", + "sessions.defaultProjectDir": "Dossier de projet par défaut", + "sessions.defaultProjectDirDesc": "Les nouvelles sessions démarrent dans ce dossier sauf si tu en choisis un autre. Laisse vide pour utiliser ton dossier personnel.", + "sessions.defaultDir": "Par défaut : {fallback}.", + "sessions.notSet": "Non défini", + "sessions.change": "Modifier", + "sessions.choose": "Choisir", + "sessions.clear": "Effacer", + "sessions.archivedTitle": "Sessions archivées", + "sessions.archivedDesc": "Les discussions archivées sont masquées de la barre latérale mais conservent tous leurs messages. Ctrl/⌘-clic sur une discussion dans la barre latérale pour l'archiver.", + "sessions.nothingArchived": "Rien d'archivé", + "sessions.noSearchMatch": "Aucune discussion archivée ne correspond à ta recherche.", + "sessions.archiveToHide": "Archive une discussion pour la masquer ici.", + "sessions.unarchive": "Désarchiver", + "sessions.deletePermanently": "Supprimer définitivement", + "sessions.messages": "{count} messages", + "mcp.loading": "Chargement des serveurs MCP…", + "mcp.servers": "Serveurs MCP", + "mcp.configured": "{count} configurés", + "mcp.newServer": "Nouveau serveur", + "mcp.reloadMCP": "Recharger MCP", + "mcp.reloading": "Rechargement...", + "mcp.noServersDesc": "Ajoute un serveur stdio ou HTTP pour exposer des outils MCP.", + "mcp.name": "Nom", + "mcp.namePlaceholder": "systeme-de-fichiers", + "mcp.serverJSON": "JSON du serveur", + "mcp.editServer": "Modifier le serveur", + "mcp.saveServer": "Enregistrer le serveur", + "mcp.saving": "Enregistrement...", + "mcp.remove": "Supprimer", + "mcp.disabled": "désactivé", + "model.auxTask.vision": "Vision", + "model.auxTask.visionHint": "Analyse d'images", + "model.auxTask.web_extract": "Extraction web", + "model.auxTask.web_extractHint": "Résumé de page", + "model.auxTask.compression": "Compression", + "model.auxTask.compressionHint": "Compactage du contexte", + "model.auxTask.session_search": "Recherche de sessions", + "model.auxTask.session_searchHint": "Requêtes de rappel", + "model.auxTask.skills_hub": "Hub de skills", + "model.auxTask.skills_hubHint": "Recherche de skills", + "model.auxTask.approval": "Approbation", + "model.auxTask.approvalHint": "Approbation auto intelligente", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "Routage d'outils MCP", + "model.auxTask.title_generation": "Génération de titre", + "model.auxTask.title_generationHint": "Titres de session", + "model.auxTask.curator": "Curateur", + "model.auxTask.curatorHint": "Revue d'utilisation des skills", + "model.mainModel": "Modèle principal", + "model.mainDesc": "S'applique aux nouvelles sessions. Utilise le sélecteur de modèle dans l'éditeur pour changer à chaud la discussion active.", + "model.providerPlaceholder": "Fournisseur", + "model.modelPlaceholder": "Modèle", + "model.apply": "Appliquer", + "model.applying": "Application…", + "model.auxiliaryModels": "Modèles auxiliaires", + "model.auxiliaryDesc": "Les tâches auxiliaires utilisent le modèle principal par défaut. Attribue un modèle dédié à une tâche pour le remplacer.", + "model.resetAllToMain": "Tout réinitialiser au modèle principal", + "model.setToMain": "Définir sur le modèle principal", + "model.change": "Modifier", + "model.cancel": "Annuler", + "model.autoUseMain": "auto · utiliser le modèle principal", + "model.providerDefault": "(défaut du fournisseur)", + "model.loading": "Chargement de la configuration du modèle…", + "updates.checking": "Vérification des mises à jour…", + "updates.available": "Mise à jour disponible", + "updates.downloading": "Téléchargement…", + "updates.installing": "Installation…", + "updates.restart": "Redémarrer pour mettre à jour", + "errors.generic": "Une erreur s'est produite.", + "errors.notFound": "Page introuvable.", + "errors.noPermission": "Tu n'as pas la permission d'accéder à ceci.", + "tool.toolCall": "Appel d'outil", + "tool.result": "Résultat", + "tool.error": "Erreur", + "tool.timeout": "Expiré", + "tool.cancelled": "Annulé", + "tool.running": "En cours", + "tool.recovered": "Récupéré", + "tool.done": "Terminé", + "tool.output": "Sortie de l'outil", + "tool.searchResults": "Résultats de recherche", + "tool.rawResponse": "Réponse brute", + "tool.stdout": "sortie standard", + "tool.stderr": "erreur standard", + "tool.copyActivity": "Copier l'activité", + "composer.startingHermes": "Démarrage d'Hermes...", + "composer.sendFollowUp": "Envoyer un suivi", + "composer.message": "Message", + "composer.editingQueued": "Édition du tour en attente dans l'éditeur", + "composer.attach": "Joindre", + "composer.files": "Fichiers…", + "composer.folder": "Dossier…", + "composer.images": "Images…", + "composer.pasteImage": "Coller une image", + "composer.url": "URL…", + "composer.promptSnippets": "Extraits de prompt", + "composer.promptSnippetsDesc": "Choisis un prompt de démarrage à déposer dans l'éditeur.", + "composer.voiceStart": "Démarrer une conversation vocale", + "composer.queue": "Mettre en file d'attente", + "composer.speaking": "En train de parler", + "composer.transcribing": "Transcription en cours", + "composer.muted": "Micro coupé", + "composer.listening": "À l'écoute", + "composer.unmuteMic": "Réactiver le micro", + "composer.muteMic": "Couper le micro", + "composer.stopListening": "Arrêter l'écoute et envoyer", + "composer.endVoice": "Terminer la conversation vocale", + "composer.end": "Terminer", + "composer.stopDictation": "Arrêter la dictée", + "composer.transcribingDictation": "Transcription de la dictée", + "composer.voiceDictation": "Dictée vocale", + "sessions.new": "Nouvelle session", + "sessions.running": "Session en cours", + "sessions.actions": "Actions de session", + "sessions.reorder": "Réorganiser", + "sessions.pin": "Épingler", + "sessions.unpin": "Désépingler", + "sessions.copyId": "Copier l'ID", + "sessions.rename": "Renommer", + "sessions.archive": "Archiver", + "sessions.renameDialog": "Renommer la session", + "sessions.renameDesc": "Donne un titre mémorable à cette discussion. Laisse vide pour effacer.", + "sessions.untitled": "Session sans titre", + "sessions.renamed": "Renommée", + "sessions.renameFailed": "Échec du renommage", + "sessions.pinned": "Épinglée", + "sessions.results": "Résultats", + "sessions.allPinned": "Tout ici est épinglé. Désépingle une discussion pour l'afficher dans les récentes.", + "sessions.pinHint": "Shift-clic sur une discussion pour épingler · glisser pour réorganiser", + "sessions.loadMore": "Charger plus", + "sessions.noWorkspace": "Aucun espace de travail", + "sessions.ungroup": "Afficher les sessions en liste unique", + "sessions.groupByWorkspace": "Grouper les sessions par espace de travail", + "skills.tools": "Skills & Outils", + "artifacts": "Artefacts", + "common.clearSearch": "Effacer la recherche", + "common.copy": "Copier", + "common.refresh": "Actualiser", + "common.moreActions": "Plus d'actions", + "common.tryAgain": "Réessayer", + "chat.loadingSession": "Chargement de la session", + "chat.loadingResponse": "Hermes charge une réponse", + "chat.branchInNewChat": "Brancher dans une nouvelle discussion", + "chat.readAloud": "Lire à voix haute", + "chat.preparingAudio": "Préparation de l'audio...", + "chat.stopReading": "Arrêter la lecture", + "chat.editMessage": "Modifier le message", + "chat.editableCheckpoint": "Point de contrôle modifiable", + "chat.restoreCheckpoint": "Restaurer le point de contrôle", + "chat.goForward": "Avancer", + "chat.restorePrevCheckpoint": "Restaurer le point de contrôle précédent", + "chat.restoreNextCheckpoint": "Restaurer le point de contrôle suivant", + "models.title": "Modèles", + "models.search": "Rechercher des modèles", + "models.addProvider": "Ajouter un fournisseur…", + "errors.somethingBroke": "Quelque chose a cassé dans l'interface", + "errors.viewCrashedDesc": "La vue a rencontré une erreur inattendue. Tes discussions et paramètres sont en sécurité — réessaie ou recharge la fenêtre.", + "errors.noProviders": "Aucun fournisseur authentifié.", + "onboarding.setupTitle": "Configurons Hermes Agent ensemble", + "onboarding.setupDesc": "Connecte un fournisseur de modèle pour commencer à discuter. La plupart des options se font en un clic.", + "onboarding.preparing": "Démarrage d'Hermes…", + "onboarding.installing": "Hermes termine l'installation. Cela prend généralement moins d'une minute au premier lancement.", + "onboarding.lookingUp": "Recherche des fournisseurs...", + "onboarding.otherProviders": "Autres fournisseurs", + "onboarding.collapse": "Réduire", + "onboarding.iHaveKey": "J'ai une clé API", + "onboarding.recommended": "Recommandé", + "onboarding.connected": "Connecté", + "onboarding.backToSignIn": "Retour à la connexion", + "onboarding.getKey": "Obtenir une clé", + "onboarding.pasteKey": "Coller la clé API", + "onboarding.connect": "Se connecter", + "onboarding.connecting": "Connexion en cours", + "onboarding.copyCode": "Copier", + "onboarding.startSignIn": "Démarrage de la connexion pour", + "onboarding.verifyingCode": "Vérification de ton code avec", + "onboarding.pickingModel": "connecté. Sélection d'un modèle par défaut...", + "onboarding.signInFailed": "Échec de la connexion. Réessaie.", + "onboarding.pickDifferent": "Choisir un autre fournisseur", + "onboarding.signInTitle": "Se connecter avec", + "onboarding.step1": "Nous avons ouvert", + "onboarding.step1End": "dans ton navigateur.", + "onboarding.step2": "Autorise Hermes sur cette page.", + "onboarding.step3": "Copie le code d'autorisation et colle-le ci-dessous.", + "onboarding.pasteCode": "Coller le code d'autorisation", + "onboarding.reopenAuth": "Rouvrir la page d'autorisation", + "onboarding.cancel": "Annuler", + "onboarding.browserDesc": "Nous avons ouvert", + "onboarding.browserDescEnd": "dans ton navigateur. Autorise Hermes sur cette page et tu seras connecté automatiquement — rien à copier ni coller.", + "onboarding.waitingAuth": "En attente de ton autorisation...", + "onboarding.reopenSignIn": "Rouvrir la page de connexion", + "onboarding.externalDesc": "se connecte via son propre CLI. Exécute cette commande dans un terminal, puis reviens et choisis « Je me suis connecté » :", + "onboarding.iSignedIn": "Je me suis connecté", + "onboarding.enterCode": "Nous avons ouvert", + "onboarding.enterCodeEnd": "dans ton navigateur. Saisis ce code sur cette page :", + "onboarding.reopenVerification": "Rouvrir la page de vérification", + "onboarding.defaultModel": "Modèle par défaut", + "onboarding.freeTier": "Niveau gratuit", + "onboarding.pro": "Pro", + "onboarding.change": "Modifier", + "onboarding.startChatting": "Commencer à discuter", + "onboarding.docs": "docs", + "onboarding.close": "Fermer", + "onboarding.savingError": "Impossible d'enregistrer l'identifiant.", + "install.title": "Hermes a besoin d'une installation unique", + "install.desc": "L'installation automatique au premier lancement n'est pas disponible sur", + "install.descEnd": "pour le moment. Ouvre Terminal et exécute la commande ci-dessous, puis relance cette application. Les lancements suivants passeront cette étape.", + "install.installCommand": "Commande d'installation", + "install.copyCommand": "Copier la commande", + "install.viewDocs": "Voir la documentation d'installation", + "install.willInstallTo": "Sera installé dans", + "install.iRanIt": "Je l'ai exécutée — réessayer", + "install.failed": "Échec de l'installation", + "install.settingUp": "Configuration d'Hermes Agent", + "install.finishingUp": "Finalisation", + "install.failedDesc": "Une des étapes d'installation a échoué. Sur Windows, cela peut arriver si une autre instance du CLI ou du bureau Hermes est en cours d'exécution. Arrête toutes les instances Hermes en cours, puis réessaie. Consulte les détails ci-dessous ou le log du bureau pour la transcription complète.", + "install.setupDesc": "Il s'agit d'une configuration unique. L'installateur Hermes télécharge les dépendances et configure ta machine. Les lancements suivants passeront cette étape.", + "install.fetchingManifest": "Récupération du manifeste d'installation...", + "install.error": "Erreur", + "install.showOutput": "Afficher la sortie de l'installateur", + "install.hideOutput": "Masquer la sortie de l'installateur", + "install.noOutput": "Aucune sortie pour le moment.", + "install.cancelInstall": "Annuler l'installation", + "install.cancelling": "Annulation...", + "install.copyOutput": "Copier la sortie", + "install.copied": "Copié !", + "install.reloadRetry": "Recharger et réessayer", + "install.saveLogs": "Transcription complète enregistrée dans", + "install.stepsComplete": "étapes terminées", + "install.nowLabel": "maintenant", + "chat.composerTip": "Astuce : tape @ pour référencer des fichiers en ligne.", + "composer.addContext": "Ajouter du contexte", + "sessions.loadStep": "Charger", + "sessions.moreLabel": "plus", + "chat.reconnecting": "Reconnexion à Hermes…", + "appearance.toolCallDisplay": "Affichage des appels d'outils", + "appearance.toolCallDisplayDesc": "Produit masque les données brutes des outils ; Technique affiche tout.", + "appearance.toolViewProduct": "Produit", + "appearance.toolViewTechnical": "Technique", + "appearance.toolViewProductDesc": "Activité des outils lisible avec résumés concis.", + "appearance.toolViewTechnicalDesc": "Inclure les arguments/résultats bruts et les détails de bas niveau.", + "messaging.recommended": "Recommandé", + "messaging.recommendedTelegram": "Recommandé. IDs numériques séparés par des virgules depuis @userinfobot. Sans cela, n'importe qui peut DM ton bot.", + "messaging.recommendedDiscord": "Recommandé. IDs utilisateur Discord séparés par des virgules.", + "messaging.recommendedSlack": "Recommandé. IDs utilisateur Slack séparés par des virgules.", + "messaging.recommendedMattermost": "Recommandé. IDs utilisateur Mattermost séparés par des virgules.", + "messaging.recommendedMatrix": "Recommandé. IDs utilisateur séparés par des virgules au format @utilisateur:serveur.", + "messaging.recommendedSignal": "Recommandé. Identifiants Signal séparés par des virgules.", + "messaging.recommendedWhatsApp": "Recommandé. Numéros de téléphone ou IDs WhatsApp séparés par des virgules.", + "previewConsole.resizeLabel": "Redimensionner la console d'aperçu", + "boot.ipcUnavailable": "Le pont IPC du bureau est indisponible.", + "boot.backendExited": "Le processus en arrière-plan d'Hermes s'est arrêté pendant le démarrage.", + "boot.backendStoppedTitle": "Backend arrêté", + "boot.backendStoppedMessage": "Le processus en arrière-plan d'Hermes s'est arrêté.", + "boot.startingConnection": "Démarrage de la connexion bureau", + "boot.connectingGateway": "Connexion à la passerelle bureau en direct", + "boot.loadingConfig": "Chargement des paramètres Hermes", + "boot.loadingSessions": "Chargement des sessions récentes", + "boot.desktopBootFailed": "Échec du démarrage du bureau", + "updates.stageGettingReady": "Préparation…", + "updates.stageDownloading": "Téléchargement…", + "updates.stageAlmostThere": "Presque terminé…", + "updates.stageFinishingUp": "Finalisation…", + "updates.stageRestarting": "Redémarrage d'Hermes…", + "updates.stageManual": "Mettre à jour depuis ton terminal", + "updates.stageError": "Mise à jour en pause", + "updates.updatingHermes": "Mise à jour d'Hermes…", + "updates.lookingForUpdates": "Recherche de mises à jour…", + "updates.couldntCheck": "Impossible de vérifier les mises à jour", + "updates.updateNotAvailable": "Mise à jour non disponible", + "updates.checkConnection": "Vérifie ta connexion et réessaie.", + "updates.onLatest": "Tu utilises la dernière version.", + "updates.allSet": "Tout est bon", + "updates.newUpdateAvailable": "Nouvelle mise à jour disponible", + "updates.readyToInstall": "Une nouvelle version d'Hermes est prête à être installée.", + "updates.updateNow": "Mettre à jour maintenant", + "updates.maybeLater": "Peut-être plus tard", + "updates.moreChanges": "+ {count} modification supplémentaire incluse.", + "updates.moreChanges_plural": "+ {count} modifications supplémentaires incluses.", + "updates.updateFromTerminal": "Mettre à jour depuis ton terminal", + "updates.terminalDesc": "Tu as installé Hermes depuis la ligne de commande, donc les mises à jour s'exécutent aussi là-bas. Colle ceci dans ton terminal :", + "updates.copied": "Copié", + "updates.copy": "Copier", + "updates.pickupNewVersion": "Hermes prendra la nouvelle version au prochain lancement.", + "updates.done": "Terminé", + "updates.updaterDesc": "L'outil de mise à jour Hermes prendra le relais dans sa propre fenêtre et rouvrira Hermes une fois terminé.", + "updates.closeToApply": "Hermes va se fermer pour appliquer la mise à jour.", + "updates.updateDidntFinish": "La mise à jour ne s'est pas terminée", + "updates.nothingLost": "Pas d'inquiétude — rien n'a été perdu. Tu peux réessayer maintenant.", + "updates.notNow": "Pas maintenant", + "commandCenter.sessionsPanel": "Panneau des sessions", + "commandCenter.systemPanel": "Panneau système", + "commandCenter.usagePanel": "Panneau d'utilisation", + "commandCenter.navigate": "Naviguer", + "commandCenter.noMatchingResults": "Aucun résultat correspondant trouvé.", + "commandCenter.noSessionsYet": "Aucune session pour le moment.", + "commandCenter.unpinSession": "Désépingler la session", + "commandCenter.pinSession": "Épingler la session", + "commandCenter.exportSession": "Exporter la session", + "commandCenter.deleteSession": "Supprimer la session", + "commandCenter.gatewayRunning": "Passerelle de messagerie en cours", + "commandCenter.gatewayStopped": "Passerelle de messagerie arrêtée", + "commandCenter.restartMsg": "Redémarrer la messagerie", + "commandCenter.updateHermes": "Mettre à jour Hermes", + "commandCenter.noLogsLoaded": "Aucun log chargé pour le moment.", + "commandCenter.closeLabel": "Fermer le centre de commande", + "commandCenter.searchPlaceholder": "Rechercher des sessions, vues et actions", + "commandCenter.statSessions": "Sessions", + "commandCenter.statApiCalls": "Appels API", + "commandCenter.statTokens": "Tokens entrée/sortie", + "commandCenter.statEstCost": "Coût estimé", + "commandCenter.actualCost": "réel {cost}", + "commandCenter.loadingUsage": "Chargement de l'utilisation...", + "commandCenter.noUsageDesc": "Aucune utilisation dans les {count} derniers jours.", + "commandCenter.retry": "Réessayer", + "commandCenter.tokenInput": "entrée", + "commandCenter.tokenOutput": "sortie", + "commandCenter.noDailyActivity": "Aucune activité quotidienne.", + "commandCenter.topModels": "Modèles principaux", + "commandCenter.topSkills": "Skills principaux", + "commandCenter.actionsLabel": "actions", + "commandCenter.systemRunning": "en cours", + "commandCenter.systemDone": "terminé", + "commandCenter.systemFailed": "échoué", + "mcp.nameRequired": "Nom requis", + "mcp.nameRequiredDesc": "Donne une clé de configuration à ce serveur MCP.", + "mcp.invalidJson": "La configuration du serveur doit être un objet JSON", + "mcp.invalidJsonDesc": "JSON MCP invalide", + "mcp.saved": "Serveur MCP enregistré", + "mcp.savedDesc": "{name} s'applique après rechargement MCP.", + "mcp.saveFailed": "Échec de l'enregistrement", + "mcp.removeFailed": "Échec de la suppression", + "mcp.gatewayUnavailable": "Passerelle indisponible", + "mcp.gatewayUnavailableDesc": "Reconnecte la passerelle avant de recharger MCP.", + "mcp.reloadedTitle": "Outils MCP rechargés", + "mcp.reloadedDesc": "Les nouveaux schémas d'outils s'appliquent aux nouveaux tours.", + "mcp.reloadFailed": "Échec du rechargement MCP", + "urlDialog.title": "Joindre une URL", + "urlDialog.description": "Hermes va récupérer la page et l'inclure comme contexte pour ce tour.", + "urlDialog.placeholder": "https://exemple.com/article", + "urlDialog.hint": "Inclus l'URL complète, par ex.", + "urlDialog.attach": "Joindre", + "model.options": "Options", + "model.thinking": "Réflexion", + "model.fast": "Rapide", + "model.effort": "Effort", + "model.noOptions": "Aucune option pour ce modèle", + "model.optionUpdateFailed": "Échec de la mise à jour de l'option du modèle", + "model.fastModeUpdateFailed": "Échec de la mise à jour du mode rapide", + "model.effortMinimal": "Minimal", + "model.effortLow": "Faible", + "model.effortMedium": "Moyen", + "model.effortHigh": "Élevé", + "model.effortMax": "Max", + "gateway.connected": "Connecté", + "gateway.connecting": "Connexion en cours", + "gateway.disconnected": "Déconnecté", + "gateway.inferenceReady": "Inférence prête", + "gateway.inferenceNotReady": "Inférence non prête", + "gateway.checkingInference": "Vérification de l'inférence", + "gateway.openSystemPanel": "Ouvrir le panneau système", + "gateway.connectionLabel": "Connexion :", + "gateway.recentActivity": "Activité récente", + "gateway.viewAllLogs": "Voir tous les logs →", + "gateway.messagingPlatforms": "Plateformes de messagerie", + "titlebar.hideSidebar": "Masquer la barre latérale", + "titlebar.showSidebar": "Afficher la barre latérale", + "titlebar.search": "Rechercher", + "titlebar.searchTitle": "Rechercher des sessions, vues et actions", + "titlebar.hideRightSidebar": "Masquer la barre latérale droite", + "titlebar.showRightSidebar": "Afficher la barre latérale droite", + "titlebar.unmuteHaptics": "Réactiver le retour haptique", + "titlebar.muteHaptics": "Couper le retour haptique", + "titlebar.openSettings": "Ouvrir les paramètres", + "titlebar.profiles": "Profils", + "titlebar.profilesDesc": "Environnements Hermes avancés pour des personas, configurations, skills et SOUL.md séparés.", + "titlebar.manageProfiles": "Gérer les profils", + "pagination.ariaLabel": "pagination", + "pagination.prevAria": "Aller à la page précédente", + "pagination.prev": "Précédent", + "pagination.nextAria": "Aller à la page suivante", + "pagination.next": "Suivant", + "boot.couldNotStart": "Hermes n'a pas pu démarrer", + "boot.recoveryDesc": "La passerelle en arrière-plan ne s'est pas lancée. Essaie une des étapes de récupération ci-dessous — rien ici ne supprime tes discussions ou paramètres.", + "boot.retry": "Réessayer", + "boot.repairInstall": "Réparer l'installation", + "boot.useLocalGateway": "Utiliser la passerelle locale", + "boot.openLogs": "Ouvrir les logs", + "boot.repairHint": "La réparation réexécute l'installateur et peut prendre quelques minutes sur une machine neuve.", + "boot.showLogs": "Afficher les logs récents", + "boot.hideLogs": "Masquer les logs récents", + "bootstrap.pending": "En attente", + "bootstrap.running": "Installation en cours", + "bootstrap.done": "Terminé", + "bootstrap.skipped": "Ignoré", + "bootstrap.failed": "Échoué", + "model.switch": "Changer de modèle", + "model.unknown": "(inconnu)", + "model.filterPlaceholder": "Filtrer les fournisseurs et modèles...", + "model.persistGlobal": "Persister globalement", + "model.persistGlobalSession": "Persister globalement (sinon cette session uniquement)", + "model.couldNotLoad": "Impossible de charger les modèles", + "model.proLockedDesc": "Les modèles Pro nécessitent un abonnement Nous payant.", + "model.priceTooltip": "Prix entrée / sortie par million de tokens", + "model.freePrice": "Gratuit", + "model.currentLabel": "actuel :", + "model.addProviderBtn": "Ajouter un fournisseur", + "sidebar.sheetTitle": "Barre latérale", + "sidebar.sheetDesc": "Affiche la barre latérale mobile.", + "sidebar.toggle": "Basculer la barre latérale", + "clarify.hermesIsAsking": "Hermes demande", + "clarify.loadingQuestion": "Chargement de la question…", + "clarify.otherTypeAnswer": "Autre (tape ta réponse)", + "clarify.placeholderAnswer": "Tape ta réponse…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Entrée pour envoyer", + "clarify.back": "Retour", + "clarify.skip": "Passer", + "clarify.couldNotSend": "Impossible d'envoyer la réponse de clarification", + "clarify.pickLabel": "1–{n} pour choisir", + "tool.recoveredAfter": "Récupéré après 1 étape échouée", + "tool.recoveredAfterN": "Récupéré après {count} étapes échouées", + "tool.oneStepFailed": "1 étape a échoué", + "tool.nStepsFailed": "{count} étapes ont échoué", + "intro.fallback1h": "Qu'est-ce qu'on fait avancer aujourd'hui ?", + "intro.fallback1b": "Envoie un bug, une branche, un plan ou une idée approximative. Je vais inspecter le dépôt et en faire la prochaine étape concrète.", + "intro.fallback2h": "Qu'est-ce qui te préoccupe ?", + "intro.fallback2b": "Apporte le code, la question ou le point bloquant. Je lirai le contexte avant de faire des modifications.", + "intro.fallback3h": "Qu'est-ce qu'Hermes devrait examiner ?", + "intro.fallback3b": "Envoie la tâche, le chemin qui échoue ou le plan à moitié formé. Je t'aiderai à le transformer en action.", + "intro.fallback4h": "Par où commencer ?", + "intro.fallback4b": "Apporte le problème, l'objectif ou le fichier. J'inspecterai d'abord et garderai la prochaine étape concrète.", + "intro.fallback5h": "Qu'est-ce qui a besoin d'attention ?", + "intro.fallback5b": "Envoie le contexte que tu as. Je t'aiderai à en faire un plan ou une correction.", + "intro.personality.heading1": "Le mode {label} est activé. Sur quoi doit-on travailler ?", + "intro.personality.body1": "Envoie la tâche, le fichier ou l'idée approximative. J'utiliserai ta voix configurée et garderai le travail ancré dans ce dépôt.", + "intro.personality.heading2": "Qu'est-ce que {label} Hermes doit voir ?", + "intro.personality.body2": "Apporte le contexte ou le point bloquant. Je m'adapterai à ta personnalité configurée.", + "intro.personality.heading3": "Le mode {label} est prêt.", + "intro.personality.body3": "Envoie le problème, le fichier ou l'idée. Je suivrai la personnalité que tu as configurée.", + "intro.personality.heading4": "Qu'est-ce que {label} Hermes doit attaquer ?", + "intro.personality.body4": "Dépose la tâche ici. Je garderai le travail ancré dans le dépôt.", + "intro.personality.heading5": "Par où commencer ?", + "intro.personality.body5": "Donne-moi le contexte et je répondrai en mode {label}.", + "intro.brand": "HERMES AGENT", + "install.line": "ligne", + "install.lines": "lignes", + "artifacts.noArtifactsFound": "Aucun artefact trouvé", + "previewConsole.noMessages": "Aucun message console pour le moment.", + "agents.spawnTree": "Arbre de spawn", + "agents.liveSubagentActivity": "Activité des sous-agents en direct pour le tour actuel.", + "agents.noLiveSubagents": "Aucun sous-agent actif", + "agents.files": "Fichiers", + "profiles.noProfilesYet": "Aucun profil pour le moment.", + "profiles.selectProfile": "Sélectionne un profil pour voir ses détails.", + "profiles.deleteProfile": "Supprimer le profil ?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "Modifications non enregistrées", + "profiles.newProfile": "Nouveau profil", + "profiles.cloneFromDefault": "Cloner depuis le profil par défaut", + "profiles.renameProfile": "Renommer le profil", + "messaging.gatewayStopped": "Passerelle de messagerie arrêtée", + "messaging.getCredentials": "Obtenir tes identifiants", + "messaging.required": "Requis", + "messaging.unsavedChanges": "Modifications non enregistrées", + "messaging.saved": "Enregistré", + "cron.deleteCronJob": "Supprimer la tâche cron ?", + "cron.optional": "Optionnel", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "Passerelle", + "gateway.inferenceStatus": "Statut d'inférence de la passerelle", + "agents.label": "Agents", + "agents.open": "Ouvrir les agents", + "agents.close": "Fermer les agents", + "agents.subagent": "sous-agent", + "agents.subagents": "sous-agents", + "agents.failed": "échoué", + "agents.running": "en cours", + "cron.label": "Cron", + "cron.open": "Ouvrir les tâches cron", + "commandCenter.open": "Ouvrir le Centre de commande", + "commandCenter.close": "Fermer le Centre de commande", + "mcp.giveConfigKey": "Donne une clé de configuration à ce serveur MCP.", + "mcp.reconnectGateway": "Reconnecte la passerelle avant de recharger MCP.", + "mcp.newSchemas": "Les nouveaux schémas d'outils s'appliquent aux nouveaux tours.", + "mcp.loadingServers": "Chargement des serveurs MCP...", + "mcp.serverName": "Nom", + "mcp.serversTitle": "Serveurs MCP", + "mcp.noServersTitle": "Aucun serveur MCP", + "sessions.nothingArchivedTitle": "Rien d'archivé", + "sessions.deletePermanentlyTitle": "Supprimer définitivement", + "sessions.defaultProjectDirTitle": "Dossier de projet par défaut", + "sessions.loadingArchived": "Chargement des sessions archivées…", + "sessions.restored": "Restaurée", + "sessions.projectDirUpdated": "Dossier de projet par défaut mis à jour", + "gateway.enterUrlFirst": "Saisis une URL distante et un jeton de session avant de changer", + "gateway.enterUrlFirstTest": "Saisis une URL distante et un jeton de session avant de tester", + "config.saving": "Enregistrement…", + "keys.openProviderDocs": "Ouvrir la documentation du fournisseur", + "config.label.defaultModel": "Modèle par défaut", + "config.label.contextWindow": "Fenêtre de contexte", + "config.label.fallbackModels": "Modèles de secours", + "config.label.enabledToolsets": "Outils activés", + "config.label.timezone": "Fuseau horaire", + "config.label.personality": "Personnalité", + "config.label.reasoningBlocks": "Blocs de raisonnement", + "config.label.maxAgentSteps": "Étapes max de l'agent", + "config.label.imageAttachments": "Pièces jointes image", + "config.label.workingDirectory": "Répertoire de travail", + "config.label.executionBackend": "Backend d'exécution", + "config.label.commandTimeout": "Délai d'expiration des commandes", + "config.label.persistentShell": "Shell persistant", + "config.label.envPassthrough": "Passage des variables d'env", + "config.label.fileReadLimit": "Limite de lecture de fichier", + "config.label.terminalOutputLimit": "Limite de sortie du terminal", + "config.label.filePageLimit": "Limite de page de fichier", + "config.label.lineLengthLimit": "Limite de longueur de ligne", + "config.label.codeExecutionMode": "Mode d'exécution de code", + "config.label.approvalMode": "Mode d'approbation", + "config.label.approvalTimeout": "Délai d'expiration d'approbation", + "config.label.confirmMcpReloads": "Confirmer les rechargements MCP", + "config.label.commandAllowlist": "Liste blanche de commandes", + "config.label.redactSecrets": "Masquer les secrets", + "config.label.allowPrivateUrls": "Autoriser les URLs privées", + "config.label.browserPrivateUrls": "URLs privées du navigateur", + "config.label.localBrowserForPrivateUrls": "Navigateur local pour URLs privées", + "config.label.fileCheckpoints": "Points de contrôle de fichiers", + "config.label.checkpointLimit": "Limite de points de contrôle", + "config.label.voiceShortcut": "Raccourci vocal", + "config.label.maxRecordingLength": "Durée max d'enregistrement", + "config.label.readResponsesAloud": "Lire les réponses à voix haute", + "config.label.speechToText": "Reconnaissance vocale", + "config.label.speechToTextProvider": "Fournisseur de reconnaissance vocale", + "config.label.localTranscriptionModel": "Modèle de transcription local", + "config.label.transcriptionLanguage": "Langue de transcription", + "config.label.elevenlabsSttModel": "Modèle STT ElevenLabs", + "config.label.elevenlabsLanguage": "Langue ElevenLabs", + "config.label.tagAudioEvents": "Baliser les événements audio", + "config.label.speakerDiarization": "Diarisation des locuteurs", + "config.label.textToSpeechProvider": "Fournisseur de synthèse vocale", + "config.label.edgeVoice": "Voix Edge", + "config.label.openaiTtsModel": "Modèle TTS OpenAI", + "config.label.openaiVoice": "Voix OpenAI", + "config.label.elevenlabsVoice": "Voix ElevenLabs", + "config.label.elevenlabsModel": "Modèle ElevenLabs", + "config.label.persistentMemory": "Mémoire persistante", + "config.label.userProfile": "Profil utilisateur", + "config.label.memoryBudget": "Budget mémoire", + "config.label.profileBudget": "Budget du profil", + "config.label.memoryProvider": "Fournisseur de mémoire", + "config.label.contextEngine": "Moteur de contexte", + "config.label.autoCompression": "Compression automatique", + "config.label.compressionThreshold": "Seuil de compression", + "config.label.compressionTarget": "Cible de compression", + "config.label.protectedRecentMessages": "Messages récents protégés", + "config.label.apiRetries": "Tentatives API", + "config.label.serviceTier": "Niveau de service", + "config.label.toolUseEnforcement": "Obligation d'utilisation d'outils", + "config.label.subagentModel": "Modèle des sous-agents", + "config.label.subagentProvider": "Fournisseur des sous-agents", + "config.label.subagentTurnLimit": "Limite de tours des sous-agents", + "config.label.parallelSubagents": "Sous-agents parallèles", + "config.label.subagentTimeout": "Délai d'expiration des sous-agents", + "config.label.subagentReasoningEffort": "Effort de raisonnement des sous-agents", + "config.desc.defaultModel": "Utilisé pour les nouvelles discussions sauf si tu choisis un autre modèle dans l'éditeur.", + "config.desc.contextWindow": "Laisser à 0 pour utiliser la fenêtre de contexte détectée du modèle sélectionné.", + "config.desc.fallbackModels": "Entrées fournisseur:modèle de secours à essayer si le modèle par défaut échoue.", + "config.desc.personality": "Style d'assistant par défaut pour les nouvelles sessions.", + "config.desc.timezone": "Utilisé quand Hermes a besoin de contexte de temps local. Vide utilise le fuseau horaire du système.", + "config.desc.reasoningBlocks": "Afficher les sections de raisonnement quand le backend les fournit.", + "config.desc.imageAttachments": "Contrôle comment les pièces jointes image sont envoyées au modèle.", + "config.desc.workingDirectory": "Dossier de projet par défaut pour le travail des outils et du terminal.", + "config.desc.codeExecutionMode": "À quel point l'exécution de code est limitée au projet actuel.", + "config.desc.persistentShell": "Conserver l'état du shell entre les commandes quand le backend le supporte.", + "config.desc.envPassthrough": "Variables d'environnement à transmettre lors de l'exécution des outils.", + "config.desc.fileReadLimit": "Nombre maximum de caractères qu'Hermes peut lire dans une seule demande de fichier.", + "config.desc.approvalMode": "Comment Hermes gère les commandes qui nécessitent une approbation explicite.", + "config.desc.approvalTimeout": "Durée d'attente des demandes d'approbation avant expiration.", + "config.desc.redactSecrets": "Masquer les secrets détectés du contenu visible par le modèle lorsque c'est possible.", + "config.desc.fileCheckpoints": "Créer des sauvegardes de restauration avant les modifications de fichiers.", + "config.desc.persistentMemory": "Enregistrer des souvenirs durables qui peuvent aider les sessions futures.", + "config.desc.userProfile": "Maintenir un profil compact des préférences utilisateur.", + "config.desc.contextEngine": "Stratégie pour gérer les longues conversations proches de la limite de contexte.", + "config.desc.autoCompression": "Résumer le contexte plus ancien quand les conversations deviennent volumineuses.", + "config.desc.readResponsesAloud": "Lire automatiquement les réponses de l'assistant à voix haute.", + "config.desc.speechToText": "Activer la transcription vocale locale ou via un fournisseur.", + "config.desc.elevenlabsLanguage": "Code de langue ISO-639-3 optionnel. Vide laisse ElevenLabs détecter automatiquement.", + "config.desc.maxAgentSteps": "Limite supérieure de tours d'appel d'outils avant qu'Hermes n'arrête une exécution.", + "mcp.failedToLoad": "Échec du chargement de la configuration MCP", + "mcp.invalidJsonShort": "JSON MCP invalide", + "mcp.serverSaved": "Serveur MCP enregistré", + "mcp.toolsReloaded": "Outils MCP rechargés", + "mcp.emptyDesc": "Ajoute un serveur stdio ou HTTP pour exposer des outils MCP.", + "sessions.loadFailed": "Impossible de charger les sessions archivées", + "sessions.unarchiveFailed": "Échec de la désarchivage", + "sessions.deleteFailed": "Échec de la suppression", + "sessions.archiveHint": "Archive une discussion pour la masquer ici.", + "sessions.updateDirFailed": "Impossible de mettre à jour le dossier par défaut", + "sessions.clearDirFailed": "Impossible d'effacer le dossier par défaut", + "keys.showAdvanced": "Afficher les options avancées", + "keys.loadFailed": "Échec du chargement des clés API", + "keys.credentialSaved": "Identifiant enregistré", + "keys.credentialRemoved": "Identifiant supprimé", + "provider.desc.nousPortal": "Surcharge de l'URL de base du portail Nous", + "provider.desc.openRouter": "Clé API OpenRouter (pour les assistants de vision, de scraping web et MoA)", + "provider.desc.google": "Clé API Google AI Studio (également reconnue comme GEMINI_API_KEY)", + "provider.desc.gemini": "ID de projet GCP pour les niveaux Gemini payants (le niveau gratuit s'approvisionne automatiquement)", + "provider.desc.anthropic": "Clé API Anthropic", + "provider.desc.deepseek": "URL de base personnalisée de l'API DeepSeek (avancé)", + "provider.desc.xai": "Surcharge de l'URL de base xAI", + "provider.desc.huggingface": "Surcharge de l'URL de base Hugging Face Inference Providers", + "provider.desc.kimi": "Clé API Kimi / Moonshot Chine", + "provider.desc.minimax": "Surcharge de l'URL de base MiniMax (Chine)", + "provider.desc.minimaxCn": "Clé API MiniMax Chine", + "provider.desc.dashscope": "URL de base DashScope personnalisée (défaut : endpoint OpenAI-compat coding-intl)", + "provider.desc.glm": "Clé API GLM (Z.AI)", + "provider.desc.nvidia": "Surcharge de l'URL de base NVIDIA NIM (ex. http://localhost:8000/v1 pour NIM local)", + "provider.desc.opencodeGo": "Clé API OpenCode Go", + "provider.desc.opencodeZen": "Clé API OpenCode Zen", + "provider.desc.xiaomi": "Surcharge de l'URL de base Xiaomi MiMo (défaut : https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Clé API Kilo Code", + "provider.desc.aiGateway": "Clé API AI Gateway (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "Clé API ElevenLabs", + "provider.desc.openai": "Clé API OpenAI (pour le traitement vocal via proxy)", + "provider.desc.mistral": "Clé API Mistral (pour STT/TTS)", + "provider.desc.groq": "Clé API Groq (pour STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "URL de l'API Firecrawl pour les instances auto-hébergées (optionnel)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Surcharge de l'URL de base du portail Nous", + "provider.desc.openrouter": "Clé API OpenRouter (pour les assistants de vision, de scraping web et MoA)", + "provider.desc.lmstudio": "Surcharge de l'URL de base Z.AI / GLM", + "provider.desc.zai": "URL de base Azure Foundry (définie via 'hermes model' pour une configuration spécifique à l'endpoint)", + "provider.desc.stepfun": "Surcharge de l'URL de base StepFun Step Plan", + "provider.desc.arcee": "Surcharge de l'URL de base Arcee AI", + "provider.desc.gmi": "Surcharge de l'URL de base GMI Cloud", + "provider.desc.qwenportal": "Surcharge de l'URL de base Qwen Portal (défaut : https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "Surcharge de l'URL de base OpenCode Go", + "provider.desc.ollamacloud": "Surcharge de l'URL de base Ollama Cloud (défaut : https://ollama.com/v1)", + "provider.desc.awsbedrock": "Profil nommé AWS pour l'authentification Bedrock (depuis ~/.aws/credentials)", + "provider.desc.exa": "Clé API Exa pour la recherche web et l'extraction de contenu IA", + "provider.desc.parallel": "Clé API Parallel pour la recherche web et l'extraction IA", + "titlebar.language": "Langue", + "titlebar.languageDesc": "Choisissez une langue d'affichage pour l'interface.", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} \ No newline at end of file diff --git a/apps/desktop/src/locales/hi.json b/apps/desktop/src/locales/hi.json new file mode 100644 index 000000000000..734039bcde84 --- /dev/null +++ b/apps/desktop/src/locales/hi.json @@ -0,0 +1,864 @@ +{ + "appearance.title": "दिखावट", + "appearance.description": "ये केवल डेस्कटॉप प्रदर्शन प्राथमिकताएँ हैं। मोड चमक को नियंत्रित करता है; थीम एक्सेंट पैलेट और चैट सतह की स्टाइलिंग को नियंत्रित करती है।", + "appearance.colorMode": "रंग मोड", + "appearance.colorModeDesc": "एक निश्चित मोड चुनें या Hermes को आपकी सिस्टम सेटिंग का अनुसरण करने दें।", + "appearance.theme": "थीम", + "appearance.themeDesc": "चैट सतह और इंटरफ़ेस एक्सेंट के लिए रंग पैलेट चुनें।", + "appearance.mode.light": "लाइट", + "appearance.mode.lightDesc": "चमकदार डेस्कटॉप सतह", + "appearance.mode.dark": "डार्क", + "appearance.mode.darkDesc": "कम चमक वाला कार्यक्षेत्र", + "appearance.mode.system": "सिस्टम", + "appearance.mode.systemDesc": "OS की दिखावट का अनुसरण करें", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Nous नीले एक्सेंट के साथ ग्लास न्यूट्रल", + "appearance.theme.midnight": "मिडनाइट", + "appearance.theme.midnightDesc": "ठंडे एक्सेंट के साथ गहरा नीला-बैंगनी", + "appearance.theme.ember": "एम्बर", + "appearance.theme.emberDesc": "गर्म क्रिमसन और कांस्य — फोर्ज जैसा अनुभव", + "appearance.theme.mono": "मोनो", + "appearance.theme.monoDesc": "साफ ग्रेस्केल — न्यूनतम और केंद्रित", + "appearance.theme.cyberpunk": "साइबरपंक", + "appearance.theme.cyberpunkDesc": "काले पर नीयन हरा — मैट्रिक्स टर्मिनल", + "appearance.theme.slate": "स्लेट", + "appearance.theme.slateDesc": "ठंडा स्लेट नीला — डेवलपर के लिए केंद्रित थीम", + "appearance.language": "भाषा", + "appearance.languageDesc": "UI भाषा चुनें या Hermes को आपकी सिस्टम सेटिंग का अनुसरण करने दें।", + "language.system": "सिस्टम का अनुसरण करें", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "language.hi": "हिन्दी", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)", + "settings.title": "सेटिंग्स", + "settings.appearance": "दिखावट", + "settings.model": "मॉडल", + "settings.gateway": "गेटवे", + "settings.sessions": "सत्र", + "settings.tools": "टूल्स और स्किल्स", + "settings.section.chat": "चैट", + "settings.section.workspace": "कार्यक्षेत्र", + "settings.section.safety": "सुरक्षा", + "settings.section.memory": "मेमोरी और संदर्भ", + "settings.section.voice": "आवाज़", + "settings.section.advanced": "उन्नत", + "settings.mcp": "MCP सर्वर", + "settings.config": "कॉन्फ़िग", + "settings.keys": "API कुंजियाँ", + "settings.about": "के बारे में", + "chat.placeholder": "मुझसे कुछ भी पूछें…", + "chat.send": "भेजें", + "chat.stop": "रोकें", + "chat.thinking": "सोच रहा है…", + "chat.noSession": "कोई सक्रिय सत्र नहीं। नई बातचीत शुरू करें।", + "commandCenter.title": "कमांड सेंटर", + "commandCenter.noSessions": "अभी तक कोई सत्र नहीं।", + "commandCenter.loadingStatus": "स्थिति लोड हो रही है…", + "commandCenter.recentLogs": "हाल के लॉग", + "commandCenter.dailyTokens": "दैनिक टोकन", + "commandCenter.noActivity": "कोई दैनिक गतिविधि नहीं।", + "commandCenter.noModelUsage": "अभी तक कोई मॉडल उपयोग नहीं।", + "commandCenter.noSkillActivity": "अभी तक कोई स्किल गतिविधि नहीं।", + "common.loading": "लोड हो रहा है…", + "common.save": "सहेजें", + "common.cancel": "रद्द करें", + "common.close": "बंद करें", + "common.delete": "हटाएँ", + "common.confirm": "पुष्टि करें", + "common.search": "खोजें…", + "onboarding.welcome": "Hermes में आपका स्वागत है", + "onboarding.getStarted": "प्रदाता और मॉडल चुनकर शुरुआत करें।", + "onboarding.skip": "छोड़ें", + "onboarding.continue": "जारी रखें", + "onboarding.finish": "समाप्त करें", + "file.browser": "फ़ाइल ब्राउज़र", + "file.noFiles": "अभी तक कोई फ़ाइल नहीं।", + "terminal.title": "टर्मिनल", + "terminal.newTab": "नया टैब", + "terminal.closeTab": "टैब बंद करें", + "skills.title": "स्किल्स", + "skills.search": "स्किल्स खोजें…", + "skills.noResults": "कोई स्किल नहीं मिली।", + "profiles.title": "प्रोफ़ाइल", + "cron.title": "क्रॉन जॉब्स", + "cron.noJobs": "कोई निर्धारित जॉब नहीं।", + "messaging.title": "मैसेजिंग", + "about.version": "संस्करण", + "about.checkUpdates": "अपडेट जाँचें", + "about.upToDate": "Hermes नवीनतम संस्करण पर है।", + "about.updateAvailable": "एक अपडेट उपलब्ध है।", + "about.license": "MIT लाइसेंस", + "keys.title": "API कुंजियाँ", + "keys.noKeys": "कोई API कुंजी कॉन्फ़िगर नहीं की गई।", + "keys.addKey": "कुंजी जोड़ें", + "config.title": "कॉन्फ़िगरेशन", + "config.edit": "कॉन्फ़िग संपादित करें", + "config.reload": "कॉन्फ़िग पुनः लोड करें", + "gateway.title": "गेटवे", + "gateway.start": "गेटवे शुरू करें", + "gateway.stop": "गेटवे रोकें", + "gateway.restart": "गेटवे पुनः आरंभ करें", + "gateway.running": "चल रहा है", + "gateway.stopped": "रुका हुआ", + "sessions.title": "सत्र", + "sessions.search": "सत्र खोजें…", + "sessions.noResults": "कोई सत्र नहीं मिला।", + "sessions.export": "निर्यात करें", + "sessions.delete": "सत्र हटाएँ", + "mcp.title": "MCP सर्वर", + "mcp.addServer": "सर्वर जोड़ें", + "mcp.noServers": "कोई MCP सर्वर कॉन्फ़िगर नहीं।", + "tools.title": "टूल्स और स्किल्स", + "tools.noTools": "कोई टूल उपलब्ध नहीं।", + "nav.home": "होम", + "nav.chat": "चैट", + "nav.settings": "सेटिंग्स", + "nav.files": "फ़ाइलें", + "nav.terminal": "टर्मिनल", + "header.search": "खोजें या कमांड टाइप करें…", + "settings.closeSettings": "सेटिंग्स बंद करें", + "settings.archivedChats": "संग्रहीत चैट", + "settings.exportConfig": "कॉन्फ़िग निर्यात करें", + "settings.importConfig": "कॉन्फ़िग आयात करें", + "settings.resetDefaults": "डिफ़ॉल्ट पर रीसेट करें", + "settings.llmProviders": "LLM प्रदाता", + "settings.searchPlaceholder.about": "Hermes Desktop के बारे में", + "settings.searchPlaceholder.config": "सेटिंग्स खोजें…", + "settings.searchPlaceholder.gateway": "गेटवे कनेक्शन…", + "settings.searchPlaceholder.keys": "API कुंजियाँ खोजें…", + "settings.searchPlaceholder.mcp": "MCP सर्वर खोजें…", + "settings.searchPlaceholder.sessions": "संग्रहीत सत्र खोजें…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "संस्करण अनुपलब्ध", + "about.updates": "अपडेट", + "about.checkNow": "अभी जाँचें", + "about.checking": "जाँच हो रही है…", + "about.seeWhatsNew": "देखें नया क्या है", + "about.releaseNotes": "रिलीज़ नोट्स", + "about.autoUpdates": "स्वचालित अपडेट", + "about.autoUpdatesDesc": "Hermes पृष्ठभूमि में स्वचालित रूप से अपडेट की जाँच करता है और जब कोई तैयार होता है तो आपको सूचित करता है।", + "about.selfUpdateUnsupported": "यह बिल्ड ऐप के भीतर से खुद को अपडेट नहीं कर सकता।", + "about.cannotReachServer": "हम अपडेट सर्वर तक नहीं पहुँच सके।", + "about.installingUpdate": "अभी एक अपडेट इंस्टॉल हो रहा है।", + "about.updateReady": "एक नया अपडेट तैयार है ({count} बदलाव शामिल)।", + "about.updateReady_plural": "एक नया अपडेट तैयार है ({count} बदलाव शामिल)।", + "about.onLatest": "आप नवीनतम संस्करण पर हैं।", + "about.tapCheckNow": "अपडेट खोजने के लिए \"अभी जाँचें\" पर टैप करें।", + "about.lastChecked": "अंतिम जाँच {time}", + "about.justNow": "अभी-अभी", + "about.never": "कभी नहीं", + "about.minAgo": "{count} मिनट पहले", + "about.hoursAgo": "{count} घंटे पहले", + "about.daysAgo": "{count} दिन पहले", + "about.buildInfo": "शाखा {branch} · कमिट {sha}", + "keys.loading": "API कुंजियाँ और क्रेडेंशियल लोड हो रहे हैं…", + "keys.docs": "दस्तावेज़", + "keys.openDocs": "प्रदाता दस्तावेज़ खोलें", + "keys.hideValue": "मान छिपाएँ", + "keys.revealValue": "मान दिखाएँ", + "keys.set": "सेट", + "keys.notSet": "सेट नहीं", + "keys.replace": "बदलें", + "keys.replaceValue": "वर्तमान मान बदलें", + "keys.enterValue": "मान दर्ज करें", + "keys.saving": "सहेजा जा रहा है", + "keys.save": "सहेजें", + "keys.cancel": "रद्द करें", + "keys.clearValue": "मान हटाएँ", + "keys.configured": "{count} में से {total} कॉन्फ़िगर", + "keys.setCount": "{count} में से {total} सेट", + "keys.countSet": "{count} सेट", + "keys.countKeys": "{count} कुंजियाँ", + "keys.otherProviders": "अन्य प्रदाता", + "keys.categoryTools": "टूल्स", + "keys.categoryMessaging": "मैसेजिंग", + "keys.categorySettings": "सेटिंग्स", + "config.notSet": "सेट नहीं", + "config.commaSeparated": "अल्पविराम से अलग किए गए मान", + "config.on": "चालू", + "config.off": "बंद", + "config.none": "कोई नहीं", + "config.emptyOption": "(कोई नहीं)", + "config.loading": "Hermes कॉन्फ़िगरेशन लोड हो रहा है…", + "config.noMatching": "कोई मेल खाती सेटिंग नहीं", + "config.noMatchingDesc": "कोई अन्य खोज शब्द आज़माएँ या कोई अन्य अनुभाग चुनें।", + "config.results": "{count} परिणाम", + "config.results_plural": "{count} परिणाम", + "gateway.loading": "गेटवे सेटिंग्स लोड हो रही हैं…", + "gateway.unavailable": "गेटवे सेटिंग्स अनुपलब्ध", + "gateway.unavailableDesc": "डेस्कटॉप IPC ब्रिज गेटवे सेटिंग्स प्रदान नहीं करता।", + "gateway.connection": "गेटवे कनेक्शन", + "gateway.envOverride": "env ओवरराइड", + "gateway.desc": "Hermes Desktop डिफ़ॉल्ट रूप से अपना स्थानीय गेटवे शुरू करता है। जब आप चाहते हैं कि यह ऐप किसी अन्य मशीन या विश्वसनीय प्रॉक्सी के पीछे पहले से चल रहे Hermes बैकएंड को नियंत्रित करे तो रिमोट गेटवे का उपयोग करें।", + "gateway.envOverrideTitle": "एनवायरनमेंट वेरिएबल इस डेस्कटॉप सत्र को नियंत्रित कर रहे हैं।", + "gateway.envOverrideDesc": "नीचे सहेजी गई सेटिंग का उपयोग करने के लिए {urlVar} और {tokenVar} को अनसेट करें।", + "gateway.localTitle": "स्थानीय गेटवे", + "gateway.localDesc": "लोकलहोस्ट पर एक निजी Hermes बैकएंड शुरू करें। यह डिफ़ॉल्ट है और ऑफ़लाइन काम करता है।", + "gateway.remoteTitle": "रिमोट गेटवे", + "gateway.remoteDesc": "इस डेस्कटॉप शेल को सत्र टोकन का उपयोग करके रिमोट Hermes बैकएंड से कनेक्ट करें।", + "gateway.remoteUrl": "रिमोट URL", + "gateway.remoteUrlDesc": "रिमोट डैशबोर्ड बैकएंड के लिए बेस URL। पथ उपसर्ग समर्थित हैं, उदाहरण के लिए /hermes।", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "सत्र टोकन", + "gateway.sessionTokenDesc": "REST और WebSocket एक्सेस के लिए उपयोग किया जाने वाला डैशबोर्ड सत्र टोकन। सहेजे गए टोकन को रखने के लिए खाली छोड़ें।", + "gateway.sessionTokenPlaceholder": "सत्र टोकन पेस्ट करें", + "gateway.existingToken": "मौजूदा टोकन {preview}", + "gateway.tokenSaved": "सहेजा गया", + "gateway.testRemote": "रिमोट परीक्षण करें", + "gateway.saveRestart": "अगले पुनः आरंभ के लिए सहेजें", + "gateway.saveReconnect": "सहेजें और पुनः कनेक्ट करें", + "gateway.diagnostics": "निदान", + "gateway.diagnosticsDesc": "अपने फ़ाइल प्रबंधक में desktop.log दिखाएँ — जब गेटवे शुरू होने में विफल रहता है तो उपयोगी।", + "gateway.openLogs": "लॉग खोलें", + "sessions.loading": "लोड हो रहा है…", + "sessions.defaultProjectDir": "डिफ़ॉल्ट प्रोजेक्ट निर्देशिका", + "sessions.defaultProjectDirDesc": "नए सत्र इस फ़ोल्डर में शुरू होते हैं जब तक आप कोई अन्य न चुनें। अपनी होम निर्देशिका का उपयोग करने के लिए इसे खाली छोड़ें।", + "sessions.defaultDir": "डिफ़ॉल्ट {fallback} है।", + "sessions.notSet": "सेट नहीं", + "sessions.change": "बदलें", + "sessions.choose": "चुनें", + "sessions.clear": "हटाएँ", + "sessions.archivedTitle": "संग्रहीत सत्र", + "sessions.archivedDesc": "संग्रहीत चैट साइडबार से छिपी रहती हैं लेकिन उनके सभी संदेश सुरक्षित रहते हैं। साइडबार में किसी चैट को Ctrl/⌘-क्लिक करके संग्रहीत करें।", + "sessions.nothingArchived": "कुछ भी संग्रहीत नहीं", + "sessions.noSearchMatch": "आपकी खोज से मेल खाती कोई संग्रहीत चैट नहीं।", + "sessions.archiveToHide": "यहाँ छिपाने के लिए चैट को संग्रहीत करें।", + "sessions.unarchive": "अनआर्काइव करें", + "sessions.deletePermanently": "स्थायी रूप से हटाएँ", + "sessions.messages": "{count} संदेश", + "mcp.loading": "MCP सर्वर लोड हो रहे हैं…", + "mcp.servers": "MCP सर्वर", + "mcp.configured": "{count} कॉन्फ़िगर", + "mcp.newServer": "नया सर्वर", + "mcp.reloadMCP": "MCP पुनः लोड करें", + "mcp.reloading": "पुनः लोड हो रहा है...", + "mcp.noServersDesc": "MCP टूल्स प्रदान करने के लिए stdio या HTTP सर्वर जोड़ें।", + "mcp.name": "नाम", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "सर्वर JSON", + "mcp.editServer": "सर्वर संपादित करें", + "mcp.saveServer": "सर्वर सहेजें", + "mcp.saving": "सहेजा जा रहा है...", + "mcp.remove": "हटाएँ", + "mcp.disabled": "अक्षम", + "model.auxTask.vision": "विज़न", + "model.auxTask.visionHint": "छवि विश्लेषण", + "model.auxTask.web_extract": "वेब एक्सट्रैक्ट", + "model.auxTask.web_extractHint": "पृष्ठ सारांश", + "model.auxTask.compression": "संपीड़न", + "model.auxTask.compressionHint": "संदर्भ संकुचन", + "model.auxTask.session_search": "सत्र खोज", + "model.auxTask.session_searchHint": "स्मरण क्वेरी", + "model.auxTask.skills_hub": "स्किल्स हब", + "model.auxTask.skills_hubHint": "स्किल खोज", + "model.auxTask.approval": "अनुमोदन", + "model.auxTask.approvalHint": "स्मार्ट ऑटो-अप्रूव", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "MCP टूल रूटिंग", + "model.auxTask.title_generation": "शीर्षक निर्माण", + "model.auxTask.title_generationHint": "सत्र शीर्षक", + "model.auxTask.curator": "क्यूरेटर", + "model.auxTask.curatorHint": "स्किल-उपयोग समीक्षा", + "model.mainModel": "मुख्य मॉडल", + "model.mainDesc": "नए सत्रों पर लागू होता है। सक्रिय चैट को तुरंत बदलने के लिए कंपोज़र में मॉडल पिकर का उपयोग करें।", + "model.providerPlaceholder": "प्रदाता", + "model.modelPlaceholder": "मॉडल", + "model.apply": "लागू करें", + "model.applying": "लागू हो रहा है…", + "model.auxiliaryModels": "सहायक मॉडल", + "model.auxiliaryDesc": "सहायक कार्य डिफ़ॉल्ट रूप से मुख्य मॉडल पर चलते हैं। ओवरराइड करने के लिए किसी कार्य को समर्पित मॉडल असाइन करें।", + "model.resetAllToMain": "सभी को मुख्य पर रीसेट करें", + "model.setToMain": "मुख्य पर सेट करें", + "model.change": "बदलें", + "model.cancel": "रद्द करें", + "model.autoUseMain": "ऑटो · मुख्य मॉडल का उपयोग करें", + "model.providerDefault": "(प्रदाता डिफ़ॉल्ट)", + "model.loading": "मॉडल कॉन्फ़िगरेशन लोड हो रहा है…", + "updates.checking": "अपडेट की जाँच हो रही है…", + "updates.available": "अपडेट उपलब्ध", + "updates.downloading": "डाउनलोड हो रहा है…", + "updates.installing": "इंस्टॉल हो रहा है…", + "updates.restart": "अपडेट करने के लिए पुनः आरंभ करें", + "errors.generic": "कुछ गलत हो गया।", + "errors.notFound": "पृष्ठ नहीं मिला।", + "errors.noPermission": "आपके पास इसे एक्सेस करने की अनुमति नहीं है।", + "tool.toolCall": "टूल कॉल", + "tool.result": "परिणाम", + "tool.error": "त्रुटि", + "tool.timeout": "समय समाप्त", + "tool.cancelled": "रद्द किया गया", + "tool.running": "चल रहा है", + "tool.recovered": "पुनर्प्राप्त", + "tool.done": "पूर्ण", + "tool.output": "टूल आउटपुट", + "tool.searchResults": "खोज परिणाम", + "tool.rawResponse": "कच्ची प्रतिक्रिया", + "tool.stdout": "stdout", + "tool.stderr": "stderr", + "tool.copyActivity": "गतिविधि कॉपी करें", + "composer.startingHermes": "Hermes शुरू हो रहा है...", + "composer.sendFollowUp": "अनुवर्ती भेजें", + "composer.message": "संदेश", + "composer.editingQueued": "कंपोज़र में कतारबद्ध टर्न संपादित हो रहा है", + "composer.attach": "संलग्न करें", + "composer.files": "फ़ाइलें…", + "composer.folder": "फ़ोल्डर…", + "composer.images": "छवियाँ…", + "composer.pasteImage": "छवि पेस्ट करें", + "composer.url": "URL…", + "composer.promptSnippets": "प्रॉम्प्ट स्निपेट्स", + "composer.promptSnippetsDesc": "कंपोज़र में डालने के लिए एक स्टार्टर प्रॉम्प्ट चुनें।", + "composer.voiceStart": "ध्वनि वार्तालाप शुरू करें", + "composer.queue": "संदेश कतारबद्ध करें", + "composer.speaking": "बोल रहा है", + "composer.transcribing": "ट्रांसक्राइब हो रहा है", + "composer.muted": "म्यूट", + "composer.listening": "सुन रहा है", + "composer.unmuteMic": "माइक्रोफ़ोन अनम्यूट करें", + "composer.muteMic": "माइक्रोफ़ोन म्यूट करें", + "composer.stopListening": "सुनना बंद करें और भेजें", + "composer.endVoice": "ध्वनि वार्तालाप समाप्त करें", + "composer.end": "समाप्त", + "composer.stopDictation": "डिक्टेशन बंद करें", + "composer.transcribingDictation": "डिक्टेशन ट्रांसक्राइब हो रहा है", + "composer.voiceDictation": "ध्वनि डिक्टेशन", + "sessions.new": "नया सत्र", + "sessions.running": "सत्र चल रहा है", + "sessions.actions": "सत्र कार्रवाइयाँ", + "sessions.reorder": "पुनर्क्रमित करें", + "sessions.pin": "पिन करें", + "sessions.unpin": "अनपिन करें", + "sessions.copyId": "ID कॉपी करें", + "sessions.rename": "नाम बदलें", + "sessions.archive": "संग्रहीत करें", + "sessions.renameDialog": "सत्र का नाम बदलें", + "sessions.renameDesc": "इस चैट को एक यादगार शीर्षक दें। हटाने के लिए खाली छोड़ें।", + "sessions.untitled": "शीर्षकहीन सत्र", + "sessions.renamed": "नाम बदला गया", + "sessions.renameFailed": "नाम बदलना विफल", + "sessions.pinned": "पिन किया गया", + "sessions.results": "परिणाम", + "sessions.allPinned": "यहाँ सब कुछ पिन किया गया है। हालिया में दिखाने के लिए चैट को अनपिन करें।", + "sessions.pinHint": "पिन करने के लिए Shift-क्लिक करें · पुनर्क्रमित करने के लिए खींचें", + "sessions.loadMore": "और लोड करें", + "sessions.noWorkspace": "कोई कार्यक्षेत्र नहीं", + "sessions.ungroup": "सत्रों को एकल सूची में दिखाएँ", + "sessions.groupByWorkspace": "सत्रों को कार्यक्षेत्र के अनुसार समूहित करें", + "skills.tools": "स्किल्स और टूल्स", + "artifacts": "आर्टिफ़ैक्ट्स", + "common.clearSearch": "खोज साफ़ करें", + "common.copy": "कॉपी करें", + "common.refresh": "ताज़ा करें", + "common.moreActions": "अधिक कार्रवाइयाँ", + "common.tryAgain": "पुनः प्रयास करें", + "chat.loadingSession": "सत्र लोड हो रहा है", + "chat.loadingResponse": "Hermes प्रतिक्रिया लोड कर रहा है", + "chat.branchInNewChat": "नई चैट में शाखा बनाएँ", + "chat.readAloud": "ज़ोर से पढ़ें", + "chat.preparingAudio": "ऑडियो तैयार हो रहा है...", + "chat.stopReading": "पढ़ना बंद करें", + "chat.editMessage": "संदेश संपादित करें", + "chat.editableCheckpoint": "संपादन योग्य चेकपॉइंट", + "chat.restoreCheckpoint": "चेकपॉइंट पुनर्स्थापित करें", + "chat.goForward": "आगे बढ़ें", + "chat.restorePrevCheckpoint": "पिछला चेकपॉइंट पुनर्स्थापित करें", + "chat.restoreNextCheckpoint": "अगला चेकपॉइंट पुनर्स्थापित करें", + "models.title": "मॉडल", + "models.search": "मॉडल खोजें", + "models.addProvider": "प्रदाता जोड़ें…", + "errors.somethingBroke": "इंटरफ़ेस में कुछ टूट गया", + "errors.viewCrashedDesc": "व्यू में एक अप्रत्याशित त्रुटि आई। आपकी चैट और सेटिंग्स सुरक्षित हैं - पुनः प्रयास करें, या विंडो को पुनः लोड करें।", + "errors.noProviders": "कोई प्रमाणित प्रदाता नहीं।", + "onboarding.setupTitle": "आइए आपको Hermes Agent के साथ सेटअप करें", + "onboarding.setupDesc": "चैटिंग शुरू करने के लिए मॉडल प्रदाता कनेक्ट करें। अधिकांश विकल्प एक क्लिक में हो जाते हैं।", + "onboarding.preparing": "Hermes शुरू हो रहा है…", + "onboarding.installing": "Hermes इंस्टॉल पूरा कर रहा है। पहली बार चलने पर आमतौर पर एक मिनट से कम लगता है।", + "onboarding.lookingUp": "प्रदाताओं की खोज हो रही है...", + "onboarding.otherProviders": "अन्य प्रदाता", + "onboarding.collapse": "संकुचित करें", + "onboarding.iHaveKey": "मेरे पास API कुंजी है", + "onboarding.recommended": "अनुशंसित", + "onboarding.connected": "कनेक्टेड", + "onboarding.backToSignIn": "साइन इन पर वापस जाएँ", + "onboarding.getKey": "कुंजी प्राप्त करें", + "onboarding.pasteKey": "API कुंजी पेस्ट करें", + "onboarding.connect": "कनेक्ट करें", + "onboarding.connecting": "कनेक्ट हो रहा है", + "onboarding.copyCode": "कॉपी करें", + "onboarding.startSignIn": "के लिए साइन इन शुरू हो रहा है", + "onboarding.verifyingCode": "के साथ आपका कोड सत्यापित हो रहा है", + "onboarding.pickingModel": "कनेक्टेड। डिफ़ॉल्ट मॉडल चुना जा रहा है...", + "onboarding.signInFailed": "साइन इन विफल। पुनः प्रयास करें।", + "onboarding.pickDifferent": "कोई अन्य प्रदाता चुनें", + "onboarding.signInTitle": "के साथ साइन इन करें", + "onboarding.step1": "हमने खोला", + "onboarding.step1End": "आपके ब्राउज़र में।", + "onboarding.step2": "वहाँ Hermes को अधिकृत करें।", + "onboarding.step3": "प्राधिकरण कोड कॉपी करें और नीचे पेस्ट करें।", + "onboarding.pasteCode": "प्राधिकरण कोड पेस्ट करें", + "onboarding.reopenAuth": "प्राधिकरण पृष्ठ पुनः खोलें", + "onboarding.cancel": "रद्द करें", + "onboarding.browserDesc": "हमने खोला", + "onboarding.browserDescEnd": "आपके ब्राउज़र में। वहाँ Hermes को अधिकृत करें और आप स्वचालित रूप से कनेक्ट हो जाएँगे — कॉपी या पेस्ट करने की ज़रूरत नहीं।", + "onboarding.waitingAuth": "आपके अधिकृत करने की प्रतीक्षा हो रही है...", + "onboarding.reopenSignIn": "साइन इन पृष्ठ पुनः खोलें", + "onboarding.externalDesc": "अपने CLI के माध्यम से साइन इन करता है। टर्मिनल में यह कमांड चलाएँ, फिर वापस आकर \"मैंने साइन इन कर लिया\" चुनें:", + "onboarding.iSignedIn": "मैंने साइन इन कर लिया", + "onboarding.enterCode": "हमने खोला", + "onboarding.enterCodeEnd": "आपके ब्राउज़र में। वहाँ यह कोड दर्ज करें:", + "onboarding.reopenVerification": "सत्यापन पृष्ठ पुनः खोलें", + "onboarding.defaultModel": "डिफ़ॉल्ट मॉडल", + "onboarding.freeTier": "मुफ़्त स्तर", + "onboarding.pro": "प्रो", + "onboarding.change": "बदलें", + "onboarding.startChatting": "चैटिंग शुरू करें", + "onboarding.docs": "दस्तावेज़", + "onboarding.close": "बंद करें", + "onboarding.savingError": "क्रेडेंशियल सहेज नहीं सका।", + "install.title": "Hermes को एक बार इंस्टॉल करने की आवश्यकता है", + "install.desc": "स्वचालित पहली-लॉन्च इंस्टॉल अभी उपलब्ध नहीं है", + "install.descEnd": "पर। टर्मिनल खोलें और नीचे दिया गया कमांड चलाएँ, फिर इस ऐप को पुनः लॉन्च करें। बाद के लॉन्च इस चरण को छोड़ देंगे।", + "install.installCommand": "इंस्टॉल कमांड", + "install.copyCommand": "कमांड कॉपी करें", + "install.viewDocs": "इंस्टॉल दस्तावेज़ देखें", + "install.willInstallTo": "यहाँ इंस्टॉल होगा", + "install.iRanIt": "मैंने इसे चला लिया -- पुनः प्रयास करें", + "install.failed": "इंस्टॉलेशन विफल", + "install.settingUp": "Hermes Agent सेटअप हो रहा है", + "install.finishingUp": "समाप्त हो रहा है", + "install.failedDesc": "इंस्टॉल चरणों में से एक विफल रहा। Windows पर, ऐसा तब हो सकता है जब कोई अन्य Hermes CLI या डेस्कटॉप इंस्टेंस चल रहा हो। किसी भी चल रहे Hermes इंस्टेंस को रोकें, फिर पुनः प्रयास करें। पूर्ण ट्रांसक्रिप्ट के लिए नीचे विवरण या डेस्कटॉप लॉग देखें।", + "install.setupDesc": "यह एक बार का सेटअप है। Hermes इंस्टॉलर निर्भरताएँ डाउनलोड कर रहा है और आपकी मशीन को कॉन्फ़िगर कर रहा है। बाद के लॉन्च इस चरण को छोड़ देंगे।", + "install.fetchingManifest": "इंस्टॉलर मैनिफ़ेस्ट प्राप्त हो रहा है...", + "install.error": "त्रुटि", + "install.showOutput": "इंस्टॉलर आउटपुट दिखाएँ", + "install.hideOutput": "इंस्टॉलर आउटपुट छिपाएँ", + "install.noOutput": "अभी तक कोई आउटपुट नहीं।", + "install.cancelInstall": "इंस्टॉल रद्द करें", + "install.cancelling": "रद्द हो रहा है...", + "install.copyOutput": "आउटपुट कॉपी करें", + "install.copied": "कॉपी हो गया!", + "install.reloadRetry": "पुनः लोड करें और पुनः प्रयास करें", + "install.saveLogs": "पूर्ण ट्रांसक्रिप्ट यहाँ सहेजा गया", + "install.stepsComplete": "चरण पूर्ण", + "install.nowLabel": "अभी", + "chat.composerTip": "सुझाव: फ़ाइलों को इनलाइन संदर्भित करने के लिए @ टाइप करें।", + "composer.addContext": "संदर्भ जोड़ें", + "sessions.loadStep": "लोड करें", + "sessions.moreLabel": "और", + "chat.reconnecting": "Hermes से पुनः कनेक्ट हो रहा है…", + "appearance.toolCallDisplay": "टूल कॉल प्रदर्शन", + "appearance.toolCallDisplayDesc": "Product कच्चे टूल पेलोड को छिपाता है; Technical पूर्ण इनपुट/आउटपुट दिखाता है।", + "appearance.toolViewProduct": "Product", + "appearance.toolViewTechnical": "Technical", + "appearance.toolViewProductDesc": "संक्षिप्त सारांश के साथ मानव-अनुकूल टूल गतिविधि।", + "appearance.toolViewTechnicalDesc": "कच्चे टूल आर्ग और परिणाम और निम्न-स्तरीय विवरण शामिल करें।", + "messaging.recommended": "अनुशंसित", + "messaging.recommendedTelegram": "अनुशंसित। @userinfobot से अल्पविराम से अलग संख्यात्मक ID। इसके बिना, कोई भी आपके बॉट को DM कर सकता है।", + "messaging.recommendedDiscord": "अनुशंसित। अल्पविराम से अलग Discord उपयोगकर्ता ID।", + "messaging.recommendedSlack": "अनुशंसित। अल्पविराम से अलग Slack उपयोगकर्ता ID।", + "messaging.recommendedMattermost": "अनुशंसित। अल्पविराम से अलग Mattermost उपयोगकर्ता ID।", + "messaging.recommendedMatrix": "अनुशंसित। @user:server प्रारूप में अल्पविराम से अलग उपयोगकर्ता ID।", + "messaging.recommendedSignal": "अनुशंसित। अल्पविराम से अलग Signal पहचानकर्ता।", + "messaging.recommendedWhatsApp": "अनुशंसित। अल्पविराम से अलग फ़ोन नंबर या WhatsApp ID।", + "previewConsole.resizeLabel": "प्रीव्यू कंसोल का आकार बदलें", + "boot.ipcUnavailable": "डेस्कटॉप IPC ब्रिज अनुपलब्ध है।", + "boot.backendExited": "स्टार्टअप के दौरान Hermes पृष्ठभूमि प्रक्रिया समाप्त हो गई।", + "boot.backendStoppedTitle": "बैकएंड रुक गया", + "boot.backendStoppedMessage": "Hermes पृष्ठभूमि प्रक्रिया समाप्त हो गई।", + "boot.startingConnection": "डेस्कटॉप कनेक्शन शुरू हो रहा है", + "boot.connectingGateway": "लाइव डेस्कटॉप गेटवे से कनेक्ट हो रहा है", + "boot.loadingConfig": "Hermes सेटिंग्स लोड हो रही हैं", + "boot.loadingSessions": "हाल के सत्र लोड हो रहे हैं", + "boot.desktopBootFailed": "डेस्कटॉप बूट विफल", + "updates.stageGettingReady": "तैयार हो रहा है…", + "updates.stageDownloading": "डाउनलोड हो रहा है…", + "updates.stageAlmostThere": "बस होने ही वाला है…", + "updates.stageFinishingUp": "समाप्त हो रहा है…", + "updates.stageRestarting": "Hermes पुनः आरंभ हो रहा है…", + "updates.stageManual": "अपने टर्मिनल से अपडेट करें", + "updates.stageError": "अपडेट रुक गया", + "updates.updatingHermes": "Hermes अपडेट हो रहा है…", + "updates.lookingForUpdates": "अपडेट खोजे जा रहे हैं…", + "updates.couldntCheck": "अपडेट की जाँच नहीं कर सका", + "updates.updateNotAvailable": "अपडेट उपलब्ध नहीं", + "updates.checkConnection": "अपना कनेक्शन जाँचें और पुनः प्रयास करें।", + "updates.onLatest": "आप नवीनतम संस्करण चला रहे हैं।", + "updates.allSet": "आप पूरी तरह तैयार हैं", + "updates.newUpdateAvailable": "नया अपडेट उपलब्ध", + "updates.readyToInstall": "Hermes का एक नया संस्करण इंस्टॉल करने के लिए तैयार है।", + "updates.updateNow": "अभी अपडेट करें", + "updates.maybeLater": "शायद बाद में", + "updates.moreChanges": "+ {count} और बदलाव शामिल।", + "updates.moreChanges_plural": "+ {count} और बदलाव शामिल।", + "updates.updateFromTerminal": "अपने टर्मिनल से अपडेट करें", + "updates.terminalDesc": "आपने Hermes को कमांड लाइन से इंस्टॉल किया था, इसलिए अपडेट भी वहीं चलते हैं। इसे अपने टर्मिनल में पेस्ट करें:", + "updates.copied": "कॉपी हो गया", + "updates.copy": "कॉपी करें", + "updates.pickupNewVersion": "अगली बार लॉन्च करने पर Hermes नया संस्करण ले लेगा।", + "updates.done": "पूर्ण", + "updates.updaterDesc": "Hermes अपडेटर अपनी विंडो में कार्यभार संभालेगा और समाप्त होने पर Hermes को पुनः खोलेगा।", + "updates.closeToApply": "अपडेट लागू करने के लिए Hermes बंद हो जाएगा।", + "updates.updateDidntFinish": "अपडेट पूरा नहीं हुआ", + "updates.nothingLost": "चिंता न करें — कुछ भी खोया नहीं। आप अभी पुनः प्रयास कर सकते हैं।", + "updates.notNow": "अभी नहीं", + "commandCenter.sessionsPanel": "सत्र पैनल", + "commandCenter.systemPanel": "सिस्टम पैनल", + "commandCenter.usagePanel": "उपयोग पैनल", + "commandCenter.navigate": "नेविगेट करें", + "commandCenter.noMatchingResults": "कोई मेल खाता परिणाम नहीं मिला।", + "commandCenter.noSessionsYet": "अभी तक कोई सत्र नहीं।", + "commandCenter.unpinSession": "सत्र अनपिन करें", + "commandCenter.pinSession": "सत्र पिन करें", + "commandCenter.exportSession": "सत्र निर्यात करें", + "commandCenter.deleteSession": "सत्र हटाएँ", + "commandCenter.gatewayRunning": "मैसेजिंग गेटवे चल रहा है", + "commandCenter.gatewayStopped": "मैसेजिंग गेटवे रुका हुआ", + "commandCenter.restartMsg": "मैसेजिंग पुनः आरंभ करें", + "commandCenter.updateHermes": "Hermes अपडेट करें", + "commandCenter.noLogsLoaded": "अभी तक कोई लॉग लोड नहीं।", + "commandCenter.closeLabel": "कमांड सेंटर बंद करें", + "commandCenter.searchPlaceholder": "सत्र, व्यू और कार्रवाइयाँ खोजें", + "commandCenter.statSessions": "सत्र", + "commandCenter.statApiCalls": "API कॉल", + "commandCenter.statTokens": "टोकन इन/आउट", + "commandCenter.statEstCost": "अनुमानित लागत", + "commandCenter.actualCost": "वास्तविक {cost}", + "commandCenter.loadingUsage": "उपयोग लोड हो रहा है...", + "commandCenter.noUsageDesc": "पिछले {count} दिनों में कोई उपयोग नहीं।", + "commandCenter.retry": "पुनः प्रयास करें", + "commandCenter.tokenInput": "इनपुट", + "commandCenter.tokenOutput": "आउटपुट", + "commandCenter.noDailyActivity": "कोई दैनिक गतिविधि नहीं।", + "commandCenter.topModels": "शीर्ष मॉडल", + "commandCenter.topSkills": "शीर्ष स्किल्स", + "commandCenter.actionsLabel": "कार्रवाइयाँ", + "commandCenter.systemRunning": "चल रहा है", + "commandCenter.systemDone": "पूर्ण", + "commandCenter.systemFailed": "विफल", + "mcp.nameRequired": "नाम आवश्यक है", + "mcp.nameRequiredDesc": "इस MCP सर्वर को एक कॉन्फ़िग कुंजी दें।", + "mcp.invalidJson": "सर्वर कॉन्फ़िग एक JSON ऑब्जेक्ट होना चाहिए", + "mcp.invalidJsonDesc": "अमान्य MCP JSON", + "mcp.saved": "MCP सर्वर सहेजा गया", + "mcp.savedDesc": "{name} MCP पुनः लोड के बाद लागू होता है।", + "mcp.saveFailed": "सहेजना विफल", + "mcp.removeFailed": "हटाना विफल", + "mcp.gatewayUnavailable": "गेटवे अनुपलब्ध", + "mcp.gatewayUnavailableDesc": "MCP पुनः लोड करने से पहले गेटवे को पुनः कनेक्ट करें।", + "mcp.reloadedTitle": "MCP टूल्स पुनः लोड हो गए", + "mcp.reloadedDesc": "नए टूल स्कीमा नए टर्न पर लागू होते हैं।", + "mcp.reloadFailed": "MCP पुनः लोड विफल", + "urlDialog.title": "URL संलग्न करें", + "urlDialog.description": "Hermes पृष्ठ प्राप्त करेगा और इसे इस टर्न के लिए संदर्भ के रूप में शामिल करेगा।", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "पूर्ण URL शामिल करें, जैसे", + "urlDialog.attach": "संलग्न करें", + "model.options": "विकल्प", + "model.thinking": "चिंतन", + "model.fast": "तेज़", + "model.effort": "प्रयास", + "model.noOptions": "इस मॉडल के लिए कोई विकल्प नहीं", + "model.optionUpdateFailed": "मॉडल विकल्प अपडेट विफल", + "model.fastModeUpdateFailed": "फ़ास्ट मोड अपडेट विफल", + "model.effortMinimal": "न्यूनतम", + "model.effortLow": "कम", + "model.effortMedium": "मध्यम", + "model.effortHigh": "उच्च", + "model.effortMax": "अधिकतम", + "gateway.connected": "कनेक्टेड", + "gateway.connecting": "कनेक्ट हो रहा है", + "gateway.disconnected": "डिस्कनेक्टेड", + "gateway.inferenceReady": "इन्फ़रेंस तैयार", + "gateway.inferenceNotReady": "इन्फ़रेंस तैयार नहीं", + "gateway.checkingInference": "इन्फ़रेंस जाँच हो रही है", + "gateway.openSystemPanel": "सिस्टम पैनल खोलें", + "gateway.connectionLabel": "कनेक्शन:", + "gateway.recentActivity": "हाल की गतिविधि", + "gateway.viewAllLogs": "सभी लॉग देखें →", + "gateway.messagingPlatforms": "मैसेजिंग प्लेटफ़ॉर्म", + "titlebar.hideSidebar": "साइडबार छिपाएँ", + "titlebar.showSidebar": "साइडबार दिखाएँ", + "titlebar.search": "खोजें", + "titlebar.searchTitle": "सत्र, व्यू और कार्रवाइयाँ खोजें", + "titlebar.hideRightSidebar": "दायाँ साइडबार छिपाएँ", + "titlebar.showRightSidebar": "दायाँ साइडबार दिखाएँ", + "titlebar.unmuteHaptics": "हैप्टिक्स अनम्यूट करें", + "titlebar.muteHaptics": "हैप्टिक्स म्यूट करें", + "titlebar.openSettings": "सेटिंग्स खोलें", + "titlebar.profiles": "प्रोफ़ाइल", + "titlebar.profilesDesc": "अलग-अलग व्यक्तित्व, कॉन्फ़िग, स्किल्स और SOUL.md के लिए उन्नत Hermes वातावरण।", + "titlebar.manageProfiles": "प्रोफ़ाइल प्रबंधित करें", + "pagination.ariaLabel": "पृष्ठांकन", + "pagination.prevAria": "पिछले पृष्ठ पर जाएँ", + "pagination.prev": "पिछला", + "pagination.nextAria": "अगले पृष्ठ पर जाएँ", + "pagination.next": "अगला", + "boot.couldNotStart": "Hermes शुरू नहीं हो सका", + "boot.recoveryDesc": "पृष्ठभूमि गेटवे शुरू नहीं हुआ। नीचे दिए गए पुनर्प्राप्ति चरणों में से एक आज़माएँ — यहाँ कुछ भी आपकी चैट या सेटिंग्स को नहीं हटाता।", + "boot.retry": "पुनः प्रयास करें", + "boot.repairInstall": "इंस्टॉल मरम्मत करें", + "boot.useLocalGateway": "स्थानीय गेटवे का उपयोग करें", + "boot.openLogs": "लॉग खोलें", + "boot.repairHint": "मरम्मत इंस्टॉलर को पुनः चलाती है और नई मशीन पर कुछ मिनट लग सकते हैं।", + "boot.showLogs": "हाल के लॉग दिखाएँ", + "boot.hideLogs": "हाल के लॉग छिपाएँ", + "bootstrap.pending": "लंबित", + "bootstrap.running": "इंस्टॉल हो रहा है", + "bootstrap.done": "पूर्ण", + "bootstrap.skipped": "छोड़ा गया", + "bootstrap.failed": "विफल", + "model.switch": "मॉडल बदलें", + "model.unknown": "(अज्ञात)", + "model.filterPlaceholder": "प्रदाता और मॉडल फ़िल्टर करें...", + "model.persistGlobal": "वैश्विक रूप से स्थायी करें", + "model.persistGlobalSession": "वैश्विक रूप से स्थायी करें (अन्यथा केवल यह सत्र)", + "model.couldNotLoad": "मॉडल लोड नहीं कर सका", + "model.proLockedDesc": "प्रो मॉडल के लिए सशुल्क Nous सदस्यता आवश्यक है।", + "model.priceTooltip": "प्रति मिलियन टोकन इनपुट / आउटपुट मूल्य", + "model.freePrice": "मुफ़्त", + "model.currentLabel": "वर्तमान:", + "model.addProviderBtn": "प्रदाता जोड़ें", + "sidebar.sheetTitle": "साइडबार", + "sidebar.sheetDesc": "मोबाइल साइडबार प्रदर्शित करता है।", + "sidebar.toggle": "साइडबार टॉगल करें", + "clarify.hermesIsAsking": "Hermes पूछ रहा है", + "clarify.loadingQuestion": "प्रश्न लोड हो रहा है…", + "clarify.otherTypeAnswer": "अन्य (अपना उत्तर टाइप करें)", + "clarify.placeholderAnswer": "अपना उत्तर टाइप करें…", + "clarify.cmdEnterToSend": "भेजने के लिए ⌘/Ctrl + Enter", + "clarify.back": "वापस", + "clarify.skip": "छोड़ें", + "clarify.couldNotSend": "स्पष्टीकरण प्रतिक्रिया नहीं भेज सका", + "clarify.pickLabel": "चुनने के लिए 1–{n}", + "tool.recoveredAfter": "1 विफल चरण के बाद पुनर्प्राप्त", + "tool.recoveredAfterN": "{count} विफल चरणों के बाद पुनर्प्राप्त", + "tool.oneStepFailed": "1 चरण विफल", + "tool.nStepsFailed": "{count} चरण विफल", + "intro.fallback1h": "आज हम क्या आगे बढ़ा रहे हैं?", + "intro.fallback1b": "बग, शाखा, योजना या मोटा विचार भेजें। मैं रिपो की जाँच करूँगा और इसे अगले ठोस कदम में बदलूँगा।", + "intro.fallback2h": "आपके दिमाग में क्या है?", + "intro.fallback2b": "कोड, प्रश्न या अटका हुआ भाग लाएँ। बदलाव करने से पहले मैं स्थिति समझूँगा।", + "intro.fallback3h": "Hermes को क्या देखना चाहिए?", + "intro.fallback3b": "कार्य, विफल पथ या अधूरी योजना भेजें। मैं इसे कार्रवाई में बदलने में मदद करूँगा।", + "intro.fallback4h": "हमें कहाँ से शुरू करना चाहिए?", + "intro.fallback4b": "समस्या, लक्ष्य या फ़ाइल लाएँ। मैं पहले जाँच करूँगा और अगला कदम ठोस रखूँगा।", + "intro.fallback5h": "किस पर ध्यान देने की ज़रूरत है?", + "intro.fallback5b": "आपके पास जो संदर्भ है वह भेजें। मैं इसे योजना या समाधान में बदलने में मदद करूँगा।", + "intro.personality.heading1": "{label} मोड चालू है। हमें किस पर काम करना चाहिए?", + "intro.personality.body1": "कार्य, फ़ाइल या मोटा विचार भेजें। मैं आपकी कॉन्फ़िगर की गई आवाज़ का उपयोग करूँगा और काम को इस रिपो में आधारित रखूँगा।", + "intro.personality.heading2": "{label} Hermes को क्या देखना चाहिए?", + "intro.personality.body2": "संदर्भ या अटका हुआ भाग लाएँ। मैं आपके कॉन्फ़िगर किए गए व्यक्तित्व के अनुसार ढल जाऊँगा।", + "intro.personality.heading3": "{label} मोड तैयार है।", + "intro.personality.body3": "समस्या, फ़ाइल या विचार भेजें। मैं आपके कॉन्फ़िगर किए गए व्यक्तित्व का अनुसरण करूँगा।", + "intro.personality.heading4": "{label} Hermes को क्या निपटाना चाहिए?", + "intro.personality.body4": "कार्य यहाँ डालें। मैं काम को रिपो में आधारित रखूँगा।", + "intro.personality.heading5": "हमें कहाँ से शुरू करना चाहिए?", + "intro.personality.body5": "मुझे संदर्भ दें और मैं {label} मोड में उत्तर दूँगा।", + "intro.brand": "HERMES AGENT", + "install.line": "पंक्ति", + "install.lines": "पंक्तियाँ", + "artifacts.noArtifactsFound": "कोई आर्टिफ़ैक्ट नहीं मिला", + "previewConsole.noMessages": "अभी तक कोई कंसोल संदेश नहीं।", + "agents.spawnTree": "स्पॉन ट्री", + "agents.liveSubagentActivity": "वर्तमान टर्न के लिए लाइव सबएजेंट गतिविधि।", + "agents.noLiveSubagents": "कोई लाइव सबएजेंट नहीं", + "agents.files": "फ़ाइलें", + "profiles.noProfilesYet": "अभी तक कोई प्रोफ़ाइल नहीं।", + "profiles.selectProfile": "विवरण देखने के लिए प्रोफ़ाइल चुनें।", + "profiles.deleteProfile": "प्रोफ़ाइल हटाएँ?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "सहेजे न गए बदलाव", + "profiles.newProfile": "नई प्रोफ़ाइल", + "profiles.cloneFromDefault": "डिफ़ॉल्ट से क्लोन करें", + "profiles.renameProfile": "प्रोफ़ाइल का नाम बदलें", + "messaging.gatewayStopped": "मैसेजिंग गेटवे रुका हुआ", + "messaging.getCredentials": "अपने क्रेडेंशियल प्राप्त करें", + "messaging.required": "आवश्यक", + "messaging.unsavedChanges": "सहेजे न गए बदलाव", + "messaging.saved": "सहेजा गया", + "cron.deleteCronJob": "क्रॉन जॉब हटाएँ?", + "cron.optional": "वैकल्पिक", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "गेटवे", + "gateway.inferenceStatus": "गेटवे इन्फ़रेंस स्थिति", + "agents.label": "एजेंट", + "agents.open": "एजेंट खोलें", + "agents.close": "एजेंट बंद करें", + "agents.subagent": "सबएजेंट", + "agents.subagents": "सबएजेंट", + "agents.failed": "विफल", + "agents.running": "चल रहा है", + "cron.label": "क्रॉन", + "cron.open": "क्रॉन जॉब्स खोलें", + "commandCenter.open": "कमांड सेंटर खोलें", + "commandCenter.close": "कमांड सेंटर बंद करें", + "mcp.giveConfigKey": "इस MCP सर्वर को एक कॉन्फ़िग कुंजी दें।", + "mcp.reconnectGateway": "MCP पुनः लोड करने से पहले गेटवे को पुनः कनेक्ट करें।", + "mcp.newSchemas": "नए टूल स्कीमा नए टर्न पर लागू होते हैं।", + "mcp.loadingServers": "MCP सर्वर लोड हो रहे हैं...", + "mcp.serverName": "नाम", + "mcp.serversTitle": "MCP सर्वर", + "mcp.noServersTitle": "कोई MCP सर्वर नहीं", + "sessions.nothingArchivedTitle": "कुछ भी संग्रहीत नहीं", + "sessions.deletePermanentlyTitle": "स्थायी रूप से हटाएँ", + "sessions.defaultProjectDirTitle": "डिफ़ॉल्ट प्रोजेक्ट निर्देशिका", + "sessions.loadingArchived": "संग्रहीत सत्र लोड हो रहे हैं…", + "sessions.restored": "पुनर्स्थापित", + "sessions.projectDirUpdated": "डिफ़ॉल्ट प्रोजेक्ट निर्देशिका अपडेट की गई", + "gateway.enterUrlFirst": "स्विच करने से पहले रिमोट URL और सत्र टोकन दर्ज करें", + "gateway.enterUrlFirstTest": "परीक्षण करने से पहले रिमोट URL और सत्र टोकन दर्ज करें", + "config.saving": "सहेजा जा रहा है…", + "keys.openProviderDocs": "प्रदाता दस्तावेज़ खोलें", + "config.label.defaultModel": "डिफ़ॉल्ट मॉडल", + "config.label.contextWindow": "संदर्भ विंडो", + "config.label.fallbackModels": "फ़ॉलबैक मॉडल", + "config.label.enabledToolsets": "सक्षम टूलसेट", + "config.label.timezone": "समय क्षेत्र", + "config.label.personality": "व्यक्तित्व", + "config.label.reasoningBlocks": "तर्क ब्लॉक", + "config.label.maxAgentSteps": "अधिकतम एजेंट चरण", + "config.label.imageAttachments": "छवि संलग्नक", + "config.label.workingDirectory": "कार्य निर्देशिका", + "config.label.executionBackend": "निष्पादन बैकएंड", + "config.label.commandTimeout": "कमांड समय सीमा", + "config.label.persistentShell": "स्थायी शेल", + "config.label.envPassthrough": "एनवायरनमेंट पासथ्रू", + "config.label.fileReadLimit": "फ़ाइल पढ़ने की सीमा", + "config.label.terminalOutputLimit": "टर्मिनल आउटपुट सीमा", + "config.label.filePageLimit": "फ़ाइल पृष्ठ सीमा", + "config.label.lineLengthLimit": "पंक्ति लंबाई सीमा", + "config.label.codeExecutionMode": "कोड निष्पादन मोड", + "config.label.approvalMode": "अनुमोदन मोड", + "config.label.approvalTimeout": "अनुमोदन समय सीमा", + "config.label.confirmMcpReloads": "MCP पुनः लोड की पुष्टि करें", + "config.label.commandAllowlist": "कमांड अनुमति सूची", + "config.label.redactSecrets": "गुप्त जानकारी छिपाएँ", + "config.label.allowPrivateUrls": "निजी URL की अनुमति दें", + "config.label.browserPrivateUrls": "ब्राउज़र निजी URL", + "config.label.localBrowserForPrivateUrls": "निजी URL के लिए स्थानीय ब्राउज़र", + "config.label.fileCheckpoints": "फ़ाइल चेकपॉइंट्स", + "config.label.checkpointLimit": "चेकपॉइंट सीमा", + "config.label.voiceShortcut": "ध्वनि शॉर्टकट", + "config.label.maxRecordingLength": "अधिकतम रिकॉर्डिंग लंबाई", + "config.label.readResponsesAloud": "प्रतिक्रियाएँ ज़ोर से पढ़ें", + "config.label.speechToText": "स्पीच टू टेक्स्ट", + "config.label.speechToTextProvider": "स्पीच-टू-टेक्स्ट प्रदाता", + "config.label.localTranscriptionModel": "स्थानीय ट्रांसक्रिप्शन मॉडल", + "config.label.transcriptionLanguage": "ट्रांसक्रिप्शन भाषा", + "config.label.elevenlabsSttModel": "ElevenLabs STT मॉडल", + "config.label.elevenlabsLanguage": "ElevenLabs भाषा", + "config.label.tagAudioEvents": "ऑडियो इवेंट टैग करें", + "config.label.speakerDiarization": "वक्ता डायराइज़ेशन", + "config.label.textToSpeechProvider": "टेक्स्ट-टू-स्पीच प्रदाता", + "config.label.edgeVoice": "Edge आवाज़", + "config.label.openaiTtsModel": "OpenAI TTS मॉडल", + "config.label.openaiVoice": "OpenAI आवाज़", + "config.label.elevenlabsVoice": "ElevenLabs आवाज़", + "config.label.elevenlabsModel": "ElevenLabs मॉडल", + "config.label.persistentMemory": "स्थायी मेमोरी", + "config.label.userProfile": "उपयोगकर्ता प्रोफ़ाइल", + "config.label.memoryBudget": "मेमोरी बजट", + "config.label.profileBudget": "प्रोफ़ाइल बजट", + "config.label.memoryProvider": "मेमोरी प्रदाता", + "config.label.contextEngine": "संदर्भ इंजन", + "config.label.autoCompression": "ऑटो-संपीड़न", + "config.label.compressionThreshold": "संपीड़न सीमा", + "config.label.compressionTarget": "संपीड़न लक्ष्य", + "config.label.protectedRecentMessages": "संरक्षित हालिया संदेश", + "config.label.apiRetries": "API पुनर्प्रयास", + "config.label.serviceTier": "सेवा स्तर", + "config.label.toolUseEnforcement": "टूल-उपयोग प्रवर्तन", + "config.label.subagentModel": "सबएजेंट मॉडल", + "config.label.subagentProvider": "सबएजेंट प्रदाता", + "config.label.subagentTurnLimit": "सबएजेंट टर्न सीमा", + "config.label.parallelSubagents": "समानांतर सबएजेंट", + "config.label.subagentTimeout": "सबएजेंट समय सीमा", + "config.label.subagentReasoningEffort": "सबएजेंट तर्क प्रयास", + "config.desc.defaultModel": "नई चैट के लिए उपयोग किया जाता है जब तक आप कंपोज़र में कोई अन्य मॉडल न चुनें।", + "config.desc.contextWindow": "चयनित मॉडल की पहचानी गई संदर्भ विंडो का उपयोग करने के लिए 0 पर छोड़ें।", + "config.desc.fallbackModels": "यदि डिफ़ॉल्ट मॉडल विफल हो जाए तो प्रयास करने के लिए बैकअप provider:model प्रविष्टियाँ।", + "config.desc.personality": "नए सत्रों के लिए डिफ़ॉल्ट सहायक शैली।", + "config.desc.timezone": "जब Hermes को स्थानीय समय संदर्भ की आवश्यकता हो तब उपयोग किया जाता है। खाली छोड़ने पर सिस्टम समय क्षेत्र का उपयोग होता है।", + "config.desc.reasoningBlocks": "जब बैकएंड प्रदान करे तब तर्क अनुभाग दिखाएँ।", + "config.desc.imageAttachments": "नियंत्रित करता है कि छवि संलग्नक मॉडल को कैसे भेजे जाएँ।", + "config.desc.workingDirectory": "टूल और टर्मिनल कार्य के लिए डिफ़ॉल्ट प्रोजेक्ट फ़ोल्डर।", + "config.desc.codeExecutionMode": "कोड निष्पादन वर्तमान प्रोजेक्ट तक कितनी सख्ती से सीमित है।", + "config.desc.persistentShell": "जब बैकएंड समर्थन करे तब कमांड के बीच शेल स्थिति बनाए रखें।", + "config.desc.envPassthrough": "टूल निष्पादन में पास करने के लिए एनवायरनमेंट वेरिएबल।", + "config.desc.fileReadLimit": "अधिकतम अक्षर जो Hermes एक फ़ाइल अनुरोध से पढ़ सकता है।", + "config.desc.approvalMode": "Hermes उन कमांड को कैसे संभालता है जिन्हें स्पष्ट अनुमोदन की आवश्यकता होती है।", + "config.desc.approvalTimeout": "अनुमोदन प्रॉम्प्ट समय समाप्त होने से पहले कितनी देर प्रतीक्षा करते हैं।", + "config.desc.redactSecrets": "जब संभव हो तो मॉडल-दृश्य सामग्री से पहचाने गए गुप्त डेटा को छिपाएँ।", + "config.desc.fileCheckpoints": "फ़ाइल संपादन से पहले रोलबैक स्नैपशॉट बनाएँ।", + "config.desc.persistentMemory": "स्थायी यादें सहेजें जो भविष्य के सत्रों में मदद कर सकती हैं।", + "config.desc.userProfile": "उपयोगकर्ता प्राथमिकताओं की एक संक्षिप्त प्रोफ़ाइल बनाए रखें।", + "config.desc.contextEngine": "संदर्भ सीमा के निकट लंबी बातचीत प्रबंधित करने की रणनीति।", + "config.desc.autoCompression": "जब बातचीत बड़ी हो जाए तो पुराने संदर्भ का सारांश बनाएँ।", + "config.desc.readResponsesAloud": "सहायक प्रतिक्रियाएँ स्वचालित रूप से बोलें।", + "config.desc.speechToText": "स्थानीय या प्रदाता-समर्थित स्पीच ट्रांसक्रिप्शन सक्षम करें।", + "config.desc.elevenlabsLanguage": "वैकल्पिक ISO-639-3 भाषा कोड। खाली छोड़ने पर ElevenLabs ऑटो-डिटेक्ट करता है।", + "config.desc.maxAgentSteps": "Hermes के रन रोकने से पहले टूल-कॉलिंग टर्न की ऊपरी सीमा।", + "mcp.failedToLoad": "MCP कॉन्फ़िग लोड करने में विफल", + "mcp.invalidJsonShort": "अमान्य MCP JSON", + "mcp.serverSaved": "MCP सर्वर सहेजा गया", + "mcp.toolsReloaded": "MCP टूल्स पुनः लोड हो गए", + "mcp.emptyDesc": "MCP टूल्स प्रदान करने के लिए stdio या HTTP सर्वर जोड़ें।", + "sessions.loadFailed": "संग्रहीत सत्र लोड नहीं कर सका", + "sessions.unarchiveFailed": "अनआर्काइव विफल", + "sessions.deleteFailed": "हटाना विफल", + "sessions.archiveHint": "यहाँ छिपाने के लिए चैट को संग्रहीत करें।", + "sessions.updateDirFailed": "डिफ़ॉल्ट निर्देशिका अपडेट नहीं कर सका", + "sessions.clearDirFailed": "डिफ़ॉल्ट निर्देशिका साफ़ नहीं कर सका", + "keys.showAdvanced": "उन्नत दिखाएँ", + "keys.loadFailed": "API कुंजियाँ लोड करने में विफल", + "keys.credentialSaved": "क्रेडेंशियल सहेजा गया", + "keys.credentialRemoved": "क्रेडेंशियल हटाया गया", + "provider.desc.nousPortal": "Nous Portal बेस URL ओवरराइड", + "provider.desc.openRouter": "OpenRouter API कुंजी (विज़न, वेब स्क्रैपिंग सहायक और MoA के लिए)", + "provider.desc.google": "Google AI Studio API कुंजी (GEMINI_API_KEY के रूप में भी पहचानी जाती है)", + "provider.desc.gemini": "सशुल्क Gemini स्तरों के लिए GCP प्रोजेक्ट ID (मुफ़्त स्तर ऑटो-प्रोविज़न होता है)", + "provider.desc.anthropic": "Anthropic API कुंजी", + "provider.desc.deepseek": "कस्टम DeepSeek API बेस URL (उन्नत)", + "provider.desc.xai": "xAI बेस URL ओवरराइड", + "provider.desc.huggingface": "Hugging Face Inference Providers बेस URL ओवरराइड", + "provider.desc.kimi": "Kimi / Moonshot China API कुंजी", + "provider.desc.minimax": "MiniMax (China) बेस URL ओवरराइड", + "provider.desc.minimaxCn": "MiniMax China API कुंजी", + "provider.desc.dashscope": "कस्टम DashScope बेस URL (डिफ़ॉल्ट: coding-intl OpenAI-संगत एंडपॉइंट)", + "provider.desc.glm": "GLM API कुंजी (Z.AI)", + "provider.desc.nvidia": "NVIDIA NIM बेस URL ओवरराइड (जैसे स्थानीय NIM के लिए http://localhost:8000/v1)", + "provider.desc.opencodeGo": "OpenCode Go API कुंजी", + "provider.desc.opencodeZen": "OpenCode Zen API कुंजी", + "provider.desc.xiaomi": "Xiaomi MiMo बेस URL ओवरराइड (डिफ़ॉल्ट: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Kilo Code API कुंजी", + "provider.desc.aiGateway": "AI Gateway API कुंजी (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "ElevenLabs API कुंजी", + "provider.desc.openai": "OpenAI API कुंजी (प्रॉक्सी के माध्यम से ध्वनि प्रसंस्करण के लिए)", + "provider.desc.mistral": "Mistral API कुंजी (STT/TTS के लिए)", + "provider.desc.groq": "Groq API कुंजी (STT के लिए)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "स्व-होस्टेड इंस्टेंस के लिए Firecrawl API URL (वैकल्पिक)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Nous Portal बेस URL ओवरराइड", + "provider.desc.openrouter": "OpenRouter API कुंजी (विज़न, वेब स्क्रैपिंग सहायक और MoA के लिए)", + "provider.desc.lmstudio": "Z.AI / GLM बेस URL ओवरराइड", + "provider.desc.zai": "Azure Foundry बेस URL (एंडपॉइंट-विशिष्ट कॉन्फ़िग के लिए 'hermes model' के माध्यम से सेट करें)", + "provider.desc.stepfun": "StepFun Step Plan बेस URL ओवरराइड", + "provider.desc.arcee": "Arcee AI बेस URL ओवरराइड", + "provider.desc.gmi": "GMI Cloud बेस URL ओवरराइड", + "provider.desc.qwenportal": "Qwen Portal बेस URL ओवरराइड (डिफ़ॉल्ट: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "OpenCode Go बेस URL ओवरराइड", + "provider.desc.ollamacloud": "Ollama Cloud बेस URL ओवरराइड (डिफ़ॉल्ट: https://ollama.com/v1)", + "provider.desc.awsbedrock": "Bedrock प्रमाणीकरण के लिए AWS नामित प्रोफ़ाइल (~/.aws/credentials से)", + "provider.desc.exa": "AI-नेटिव वेब खोज और सामग्री के लिए Exa API कुंजी", + "provider.desc.parallel": "AI-नेटिव वेब खोज और एक्सट्रैक्ट के लिए Parallel API कुंजी", + "titlebar.language": "भाषा", + "titlebar.languageDesc": "इंटरफ़ेस के लिए प्रदर्शन भाषा चुनें।" +} diff --git a/apps/desktop/src/locales/it.json b/apps/desktop/src/locales/it.json new file mode 100644 index 000000000000..135e36d33985 --- /dev/null +++ b/apps/desktop/src/locales/it.json @@ -0,0 +1,864 @@ +{ + "appearance.title": "Aspetto", + "appearance.description": "Queste sono preferenze di visualizzazione solo desktop. La modalità controlla la luminosità; il tema controlla la tavolozza degli accenti e lo stile della superficie di chat.", + "appearance.colorMode": "Modalità Colore", + "appearance.colorModeDesc": "Scegli una modalità fissa o lascia che Hermes segua l'impostazione di sistema.", + "appearance.theme": "Tema", + "appearance.themeDesc": "Scegli una tavolozza di colori per la superficie di chat e gli accenti dell'interfaccia.", + "appearance.mode.light": "Chiaro", + "appearance.mode.lightDesc": "Superfici desktop luminose", + "appearance.mode.dark": "Scuro", + "appearance.mode.darkDesc": "Ambiente di lavoro a basso abbagliamento", + "appearance.mode.system": "Sistema", + "appearance.mode.systemDesc": "Segui l'aspetto del sistema operativo", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Neutrali trasparenti con accenti blu Nous", + "appearance.theme.midnight": "Mezzanotte", + "appearance.theme.midnightDesc": "Blu-viola profondo con accenti freddi", + "appearance.theme.ember": "Brace", + "appearance.theme.emberDesc": "Cremisi e bronzo caldi — atmosfera da fucina", + "appearance.theme.mono": "Mono", + "appearance.theme.monoDesc": "Scala di grigi pulita — minimale e focalizzato", + "appearance.theme.cyberpunk": "Cyberpunk", + "appearance.theme.cyberpunkDesc": "Verde neon su nero — terminale matrix", + "appearance.theme.slate": "Ardesia", + "appearance.theme.slateDesc": "Blu ardesia freddo — tema focalizzato per sviluppatori", + "appearance.language": "Lingua", + "appearance.languageDesc": "Scegli la lingua dell'interfaccia o lascia che Hermes segua l'impostazione di sistema.", + "language.system": "Segui sistema", + "language.en": "English", + "language.it": "Italiano", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)", + "settings.title": "Impostazioni", + "settings.appearance": "Aspetto", + "settings.model": "Modello", + "settings.gateway": "Gateway", + "settings.sessions": "Sessioni", + "settings.tools": "Strumenti e Competenze", + "settings.section.chat": "Chat", + "settings.section.workspace": "Area di lavoro", + "settings.section.safety": "Sicurezza", + "settings.section.memory": "Memoria e Contesto", + "settings.section.voice": "Voce", + "settings.section.advanced": "Avanzate", + "settings.mcp": "Server MCP", + "settings.config": "Configurazione", + "settings.keys": "Chiavi API", + "settings.about": "Informazioni", + "chat.placeholder": "Chiedimi qualsiasi cosa…", + "chat.send": "Invia", + "chat.stop": "Ferma", + "chat.thinking": "Pensando…", + "chat.noSession": "Nessuna sessione attiva. Avvia una nuova conversazione.", + "commandCenter.title": "Centro Comandi", + "commandCenter.noSessions": "Nessuna sessione ancora.", + "commandCenter.loadingStatus": "Caricamento stato…", + "commandCenter.recentLogs": "Log recenti", + "commandCenter.dailyTokens": "Token giornalieri", + "commandCenter.noActivity": "Nessuna attività giornaliera.", + "commandCenter.noModelUsage": "Nessun utilizzo modello ancora.", + "commandCenter.noSkillActivity": "Nessuna attività competenze ancora.", + "common.loading": "Caricamento…", + "common.save": "Salva", + "common.cancel": "Annulla", + "common.close": "Chiudi", + "common.delete": "Elimina", + "common.confirm": "Conferma", + "common.search": "Cerca…", + "common.clearSearch": "Pulisci ricerca", + "common.copy": "Copia", + "common.refresh": "Aggiorna", + "common.moreActions": "Altre azioni", + "common.tryAgain": "Riprova", + "onboarding.welcome": "Benvenuto in Hermes", + "onboarding.getStarted": "Inizia scegliendo un provider e un modello.", + "onboarding.skip": "Salta", + "onboarding.continue": "Continua", + "onboarding.finish": "Fine", + "onboarding.setupTitle": "Configuriamo Hermes Agent", + "onboarding.setupDesc": "Collega un provider di modelli per iniziare a chattare. La maggior parte delle opzioni richiede un clic.", + "onboarding.preparing": "Avvio di Hermes…", + "onboarding.installing": "Hermes sta completando l'installazione. Di solito richiede meno di un minuto al primo avvio.", + "onboarding.lookingUp": "Ricerca provider...", + "onboarding.otherProviders": "Altri provider", + "onboarding.collapse": "Comprimi", + "onboarding.iHaveKey": "Ho una chiave API", + "onboarding.recommended": "Consigliato", + "onboarding.connected": "Connesso", + "onboarding.backToSignIn": "Torna all'accesso", + "onboarding.getKey": "Ottieni una chiave", + "onboarding.pasteKey": "Incolla chiave API", + "onboarding.connect": "Connetti", + "onboarding.connecting": "Connessione in corso", + "onboarding.copyCode": "Copia", + "onboarding.startSignIn": "Avvio accesso per", + "onboarding.verifyingCode": "Verifica del tuo codice con", + "onboarding.pickingModel": "connesso. Scelta del modello predefinito...", + "onboarding.signInFailed": "Accesso fallito. Riprova.", + "onboarding.pickDifferent": "Scegli un altro provider", + "onboarding.signInTitle": "Accedi con", + "onboarding.step1": "Abbiamo aperto", + "onboarding.step1End": "nel tuo browser.", + "onboarding.step2": "Autorizza Hermes lì.", + "onboarding.step3": "Copia il codice di autorizzazione e incollalo qui sotto.", + "onboarding.pasteCode": "Incolla codice di autorizzazione", + "onboarding.reopenAuth": "Riapri pagina di autorizzazione", + "onboarding.cancel": "Annulla", + "onboarding.browserDesc": "Abbiamo aperto", + "onboarding.browserDescEnd": "nel tuo browser. Autorizza Hermes lì e sarai connesso automaticamente — nulla da copiare o incollare.", + "onboarding.waitingAuth": "In attesa della tua autorizzazione...", + "onboarding.reopenSignIn": "Riapri pagina di accesso", + "onboarding.externalDesc": "effettua l'accesso tramite la propria CLI. Esegui questo comando in un terminale, poi torna e scegli \"Ho effettuato l'accesso\":", + "onboarding.iSignedIn": "Ho effettuato l'accesso", + "onboarding.enterCode": "Abbiamo aperto", + "onboarding.enterCodeEnd": "nel tuo browser. Inserisci questo codice lì:", + "onboarding.reopenVerification": "Riapri pagina di verifica", + "onboarding.defaultModel": "Modello predefinito", + "onboarding.freeTier": "Piano gratuito", + "onboarding.pro": "Pro", + "onboarding.change": "Cambia", + "onboarding.startChatting": "Inizia a chattare", + "onboarding.docs": "documentazione", + "onboarding.close": "Chiudi", + "onboarding.savingError": "Impossibile salvare la credenziale.", + "onboarding.openRouter": "OpenRouter", + "file.browser": "Browser File", + "file.noFiles": "Nessun file ancora.", + "terminal.title": "Terminale", + "terminal.newTab": "Nuova Scheda", + "terminal.closeTab": "Chiudi Scheda", + "skills.title": "Competenze", + "skills.search": "Cerca competenze…", + "skills.noResults": "Nessuna competenza trovata.", + "skills.tools": "Competenze e Strumenti", + "profiles.title": "Profili", + "profiles.noProfilesYet": "Nessun profilo ancora.", + "profiles.selectProfile": "Seleziona un profilo per visualizzarne i dettagli.", + "profiles.deleteProfile": "Eliminare profilo?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "Modifiche non salvate", + "profiles.newProfile": "Nuovo profilo", + "profiles.cloneFromDefault": "Clona dal predefinito", + "profiles.renameProfile": "Rinomina profilo", + "cron.title": "Cron Job", + "cron.noJobs": "Nessun job pianificato.", + "cron.deleteCronJob": "Eliminare cron job?", + "cron.optional": "Opzionale", + "cron.label": "Cron", + "cron.open": "Apri cron job", + "messaging.title": "Messaggistica", + "messaging.recommended": "Consigliato", + "messaging.recommendedTelegram": "Consigliato. ID numerici separati da virgola da @userinfobot. Senza questo, chiunque può inviare DM al tuo bot.", + "messaging.recommendedDiscord": "Consigliato. ID utente Discord separati da virgola.", + "messaging.recommendedSlack": "Consigliato. ID utente Slack separati da virgola.", + "messaging.recommendedMattermost": "Consigliato. ID utente Mattermost separati da virgola.", + "messaging.recommendedMatrix": "Consigliato. ID utente separati da virgola in formato @utente:server.", + "messaging.recommendedSignal": "Consigliato. Identificatori Signal separati da virgola.", + "messaging.recommendedWhatsApp": "Consigliato. Numeri di telefono o ID WhatsApp separati da virgola.", + "messaging.gatewayStopped": "Gateway messaggistica fermo", + "messaging.getCredentials": "Ottieni le tue credenziali", + "messaging.required": "Obbligatorio", + "messaging.unsavedChanges": "Modifiche non salvate", + "messaging.saved": "Salvato", + "about.version": "Versione", + "about.checkUpdates": "Verifica aggiornamenti", + "about.upToDate": "Hermes è aggiornato.", + "about.updateAvailable": "È disponibile un aggiornamento.", + "about.license": "Licenza MIT", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "Versione non disponibile", + "about.updates": "Aggiornamenti", + "about.checkNow": "Verifica ora", + "about.checking": "Verifica in corso…", + "about.seeWhatsNew": "Vedi le novità", + "about.releaseNotes": "Note di rilascio", + "about.autoUpdates": "Aggiornamenti automatici", + "about.autoUpdatesDesc": "Hermes verifica automaticamente gli aggiornamenti in background e ti avvisa quando uno è pronto.", + "about.selfUpdateUnsupported": "Questa build non può aggiornarsi dall'interno dell'app.", + "about.cannotReachServer": "Impossibile raggiungere il server degli aggiornamenti.", + "about.installingUpdate": "Un aggiornamento è in fase di installazione.", + "about.updateReady": "Un nuovo aggiornamento è pronto ({count} modifica inclusa).", + "about.updateReady_plural": "Un nuovo aggiornamento è pronto ({count} modifiche incluse).", + "about.onLatest": "Stai usando l'ultima versione.", + "about.tapCheckNow": "Tocca \"Verifica ora\" per cercare aggiornamenti.", + "about.lastChecked": "Ultima verifica {time}", + "about.justNow": "proprio ora", + "about.never": "mai", + "about.minAgo": "{count} min fa", + "about.hoursAgo": "{count} ore fa", + "about.daysAgo": "{count} giorni fa", + "about.buildInfo": "Branch {branch} · Commit {sha}", + "keys.title": "Chiavi API", + "keys.noKeys": "Nessuna chiave API configurata.", + "keys.addKey": "Aggiungi Chiave", + "keys.loading": "Caricamento chiavi API e credenziali…", + "keys.docs": "Documentazione", + "keys.openDocs": "Apri documentazione provider", + "keys.hideValue": "Nascondi valore", + "keys.revealValue": "Mostra valore", + "keys.set": "Imposta", + "keys.notSet": "Non impostata", + "keys.replace": "Sostituisci", + "keys.replaceValue": "Sostituisci valore attuale", + "keys.enterValue": "Inserisci valore", + "keys.saving": "Salvataggio", + "keys.save": "Salva", + "keys.cancel": "Annulla", + "keys.clearValue": "Cancella valore", + "keys.configured": "{count} di {total} configurate", + "keys.setCount": "{count} di {total} impostate", + "keys.countSet": "{count} impostate", + "keys.countKeys": "{count} chiavi", + "keys.otherProviders": "Altri provider", + "keys.categoryTools": "Strumenti", + "keys.categoryMessaging": "Messaggistica", + "keys.categorySettings": "Impostazioni", + "keys.showAdvanced": "Mostra avanzate", + "keys.loadFailed": "Caricamento chiavi API fallito", + "keys.credentialSaved": "Credenziale salvata", + "keys.credentialRemoved": "Credenziale rimossa", + "keys.openProviderDocs": "Apri documentazione provider", + "config.title": "Configurazione", + "config.edit": "Modifica Configurazione", + "config.reload": "Ricarica Configurazione", + "config.notSet": "Non impostato", + "config.commaSeparated": "valori separati da virgola", + "config.on": "Attivo", + "config.off": "Disattivo", + "config.none": "Nessuno", + "config.emptyOption": "(nessuno)", + "config.loading": "Caricamento configurazione Hermes…", + "config.noMatching": "Nessuna impostazione corrispondente", + "config.noMatchingDesc": "Prova un termine di ricerca diverso o scegli un'altra sezione.", + "config.results": "{count} risultato", + "config.results_plural": "{count} risultati", + "config.saving": "Salvataggio…", + "config.label.defaultModel": "Modello Predefinito", + "config.label.contextWindow": "Finestra di Contesto", + "config.label.fallbackModels": "Modelli di Fallback", + "config.label.enabledToolsets": "Strumenti Abilitati", + "config.label.timezone": "Fuso Orario", + "config.label.personality": "Personalità", + "config.label.reasoningBlocks": "Blocchi di Ragionamento", + "config.label.maxAgentSteps": "Passi Massimi Agente", + "config.label.imageAttachments": "Allegati Immagine", + "config.label.workingDirectory": "Directory di Lavoro", + "config.label.executionBackend": "Backend di Esecuzione", + "config.label.commandTimeout": "Timeout Comandi", + "config.label.persistentShell": "Shell Persistente", + "config.label.envPassthrough": "Passaggio Variabili d'Ambiente", + "config.label.fileReadLimit": "Limite Lettura File", + "config.label.terminalOutputLimit": "Limite Output Terminale", + "config.label.filePageLimit": "Limite Pagine File", + "config.label.lineLengthLimit": "Limite Lunghezza Righe", + "config.label.codeExecutionMode": "Modalità Esecuzione Codice", + "config.label.approvalMode": "Modalità Approvazione", + "config.label.approvalTimeout": "Timeout Approvazione", + "config.label.confirmMcpReloads": "Conferma Ricarica MCP", + "config.label.commandAllowlist": "Lista Comandi Consentiti", + "config.label.redactSecrets": "Oscura Segreti", + "config.label.allowPrivateUrls": "Consenti URL Privati", + "config.label.browserPrivateUrls": "Browser URL Privati", + "config.label.localBrowserForPrivateUrls": "Browser Locale per URL Privati", + "config.label.fileCheckpoints": "Checkpoint File", + "config.label.checkpointLimit": "Limite Checkpoint", + "config.label.voiceShortcut": "Scorciatoia Voce", + "config.label.maxRecordingLength": "Durata Massima Registrazione", + "config.label.readResponsesAloud": "Leggi Risposte ad Alta Voce", + "config.label.speechToText": "Riconoscimento Vocale", + "config.label.speechToTextProvider": "Provider Riconoscimento Vocale", + "config.label.localTranscriptionModel": "Modello Trascrizione Locale", + "config.label.transcriptionLanguage": "Lingua Trascrizione", + "config.label.elevenlabsSttModel": "Modello STT ElevenLabs", + "config.label.elevenlabsLanguage": "Lingua ElevenLabs", + "config.label.tagAudioEvents": "Etichetta Eventi Audio", + "config.label.speakerDiarization": "Diarizzazione Parlatori", + "config.label.textToSpeechProvider": "Provider Sintesi Vocale", + "config.label.edgeVoice": "Voce Edge", + "config.label.openaiTtsModel": "Modello TTS OpenAI", + "config.label.openaiVoice": "Voce OpenAI", + "config.label.elevenlabsVoice": "Voce ElevenLabs", + "config.label.elevenlabsModel": "Modello ElevenLabs", + "config.label.persistentMemory": "Memoria Persistente", + "config.label.userProfile": "Profilo Utente", + "config.label.memoryBudget": "Budget Memoria", + "config.label.profileBudget": "Budget Profilo", + "config.label.memoryProvider": "Provider Memoria", + "config.label.contextEngine": "Motore di Contesto", + "config.label.autoCompression": "Compressione Automatica", + "config.label.compressionThreshold": "Soglia Compressione", + "config.label.compressionTarget": "Obiettivo Compressione", + "config.label.protectedRecentMessages": "Messaggi Recenti Protetti", + "config.label.apiRetries": "Tentativi API", + "config.label.serviceTier": "Livello Servizio", + "config.label.toolUseEnforcement": "Obbligo Uso Strumenti", + "config.label.subagentModel": "Modello Subagente", + "config.label.subagentProvider": "Provider Subagente", + "config.label.subagentTurnLimit": "Limite Turni Subagente", + "config.label.parallelSubagents": "Subagenti Paralleli", + "config.label.subagentTimeout": "Timeout Subagente", + "config.label.subagentReasoningEffort": "Sforzo Ragionamento Subagente", + "config.desc.defaultModel": "Usato per nuove chat a meno che non si scelga un modello diverso nel compositore.", + "config.desc.contextWindow": "Lascia a 0 per usare la finestra di contesto rilevata del modello selezionato.", + "config.desc.fallbackModels": "Voci provider:modello di backup da provare se il modello predefinito fallisce.", + "config.desc.personality": "Stile predefinito dell'assistente per le nuove sessioni.", + "config.desc.timezone": "Usato quando Hermes ha bisogno del contesto orario locale. Vuoto usa il fuso orario di sistema.", + "config.desc.reasoningBlocks": "Mostra le sezioni di ragionamento quando il backend le fornisce.", + "config.desc.imageAttachments": "Controlla come gli allegati immagine vengono inviati al modello.", + "config.desc.workingDirectory": "Cartella di progetto predefinita per il lavoro con strumenti e terminale.", + "config.desc.codeExecutionMode": "Quanto rigorosamente l'esecuzione del codice è limitata al progetto corrente.", + "config.desc.persistentShell": "Mantieni lo stato della shell tra i comandi quando il backend lo supporta.", + "config.desc.envPassthrough": "Variabili d'ambiente da passare all'esecuzione degli strumenti.", + "config.desc.fileReadLimit": "Caratteri massimi che Hermes può leggere da una richiesta di file.", + "config.desc.approvalMode": "Come Hermes gestisce i comandi che richiedono approvazione esplicita.", + "config.desc.approvalTimeout": "Quanto tempo attendono i prompt di approvazione prima di scadere.", + "config.desc.redactSecrets": "Nascondi i segreti rilevati dal contenuto visibile al modello quando possibile.", + "config.desc.fileCheckpoints": "Crea snapshot di ripristino prima delle modifiche ai file.", + "config.desc.persistentMemory": "Salva memorie durevoli che possono aiutare le sessioni future.", + "config.desc.userProfile": "Mantieni un profilo compatto delle preferenze utente.", + "config.desc.contextEngine": "Strategia per gestire conversazioni lunghe vicino al limite di contesto.", + "config.desc.autoCompression": "Riassumi il contesto più vecchio quando le conversazioni diventano grandi.", + "config.desc.readResponsesAloud": "Leggi automaticamente le risposte dell'assistente ad alta voce.", + "config.desc.speechToText": "Abilita la trascrizione vocale locale o tramite provider.", + "config.desc.elevenlabsLanguage": "Codice lingua ISO-639-3 opzionale. Vuoto lascia che ElevenLabs rilevi automaticamente.", + "config.desc.maxAgentSteps": "Limite superiore per i turni di chiamata strumenti prima che Hermes interrompa un'esecuzione.", + "gateway.title": "Gateway", + "gateway.start": "Avvia Gateway", + "gateway.stop": "Ferma Gateway", + "gateway.restart": "Riavvia Gateway", + "gateway.running": "In esecuzione", + "gateway.stopped": "Fermo", + "gateway.loading": "Caricamento impostazioni gateway…", + "gateway.unavailable": "Impostazioni gateway non disponibili", + "gateway.unavailableDesc": "Il bridge IPC desktop non espone le impostazioni del gateway.", + "gateway.connection": "Connessione Gateway", + "gateway.envOverride": "sovrascrittura env", + "gateway.desc": "Hermes Desktop avvia il proprio gateway locale per impostazione predefinita. Usa un gateway remoto quando vuoi che questa app controlli un backend Hermes già in esecuzione su un'altra macchina o dietro un proxy affidabile.", + "gateway.envOverrideTitle": "Le variabili d'ambiente stanno controllando questa sessione desktop.", + "gateway.envOverrideDesc": "Rimuovi {urlVar} e {tokenVar} per usare l'impostazione salvata qui sotto.", + "gateway.localTitle": "Gateway locale", + "gateway.localDesc": "Avvia un backend Hermes privato su localhost. Questa è l'impostazione predefinita e funziona offline.", + "gateway.remoteTitle": "Gateway remoto", + "gateway.remoteDesc": "Collega questa shell desktop a un backend Hermes remoto usando il suo token di sessione.", + "gateway.remoteUrl": "URL Remoto", + "gateway.remoteUrlDesc": "URL base per il backend dashboard remoto. I prefissi di percorso sono supportati, ad esempio /hermes.", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "Token di sessione", + "gateway.sessionTokenDesc": "Il token di sessione dashboard usato per l'accesso REST e WebSocket. Lascia vuoto per mantenere il token salvato.", + "gateway.sessionTokenPlaceholder": "Incolla token di sessione", + "gateway.existingToken": "Token esistente {preview}", + "gateway.tokenSaved": "salvato", + "gateway.testRemote": "Test remoto", + "gateway.saveRestart": "Salva per il prossimo riavvio", + "gateway.saveReconnect": "Salva e riconnetti", + "gateway.diagnostics": "Diagnostica", + "gateway.diagnosticsDesc": "Mostra desktop.log nel tuo file manager — utile quando il gateway non si avvia.", + "gateway.openLogs": "Apri log", + "gateway.connected": "Connesso", + "gateway.connecting": "Connessione in corso", + "gateway.disconnected": "Disconnesso", + "gateway.inferenceReady": "Inferenza pronta", + "gateway.inferenceNotReady": "Inferenza non pronta", + "gateway.checkingInference": "Verifica inferenza", + "gateway.openSystemPanel": "Apri pannello di sistema", + "gateway.connectionLabel": "Connessione:", + "gateway.recentActivity": "Attività recente", + "gateway.viewAllLogs": "Vedi tutti i log →", + "gateway.messagingPlatforms": "Piattaforme di messaggistica", + "gateway.enterUrlFirst": "Inserisci un URL remoto e un token di sessione prima di cambiare", + "gateway.enterUrlFirstTest": "Inserisci un URL remoto e un token di sessione prima di testare", + "gateway.label": "Gateway", + "gateway.inferenceStatus": "Stato inferenza gateway", + "sessions.title": "Sessioni", + "sessions.search": "Cerca sessioni…", + "sessions.noResults": "Nessuna sessione trovata.", + "sessions.export": "Esporta", + "sessions.delete": "Elimina Sessione", + "sessions.loading": "Caricamento…", + "sessions.defaultProjectDir": "Directory di progetto predefinita", + "sessions.defaultProjectDirDesc": "Le nuove sessioni iniziano in questa cartella a meno che non ne scelga un'altra. Lascia vuoto per usare la tua home directory.", + "sessions.defaultDir": "Predefinito: {fallback}.", + "sessions.notSet": "Non impostata", + "sessions.change": "Cambia", + "sessions.choose": "Scegli", + "sessions.clear": "Pulisci", + "sessions.archivedTitle": "Sessioni archiviate", + "sessions.archivedDesc": "Le chat archiviate sono nascoste dalla barra laterale ma conservano tutti i messaggi. Ctrl/⌘-clic su una chat nella barra laterale per archiviarla.", + "sessions.nothingArchived": "Niente archiviato", + "sessions.noSearchMatch": "Nessuna chat archiviata corrisponde alla ricerca.", + "sessions.archiveToHide": "Archivia una chat per nasconderla qui.", + "sessions.unarchive": "Disarchivia", + "sessions.deletePermanently": "Elimina definitivamente", + "sessions.messages": "{count} messaggi", + "sessions.new": "Nuova sessione", + "sessions.running": "Sessione in esecuzione", + "sessions.actions": "Azioni sessione", + "sessions.reorder": "Riordina", + "sessions.pin": "Fissa", + "sessions.unpin": "Rimuovi", + "sessions.copyId": "Copia ID", + "sessions.rename": "Rinomina", + "sessions.archive": "Archivia", + "sessions.renameDialog": "Rinomina sessione", + "sessions.renameDesc": "Dai a questa chat un titolo memorabile. Lascia vuoto per cancellare.", + "sessions.untitled": "Sessione senza titolo", + "sessions.renamed": "Rinominata", + "sessions.renameFailed": "Rinomina fallita", + "sessions.pinned": "Fissata", + "sessions.results": "Risultati", + "sessions.allPinned": "Tutto qui è fissato. Rimuovi una chat per mostrarla nei recenti.", + "sessions.pinHint": "Shift-clic per fissare · trascina per riordinare", + "sessions.loadMore": "Carica altro", + "sessions.noWorkspace": "Nessuna area di lavoro", + "sessions.ungroup": "Mostra sessioni come lista unica", + "sessions.groupByWorkspace": "Raggruppa sessioni per area di lavoro", + "sessions.loadStep": "Carica", + "sessions.moreLabel": "altro", + "sessions.nothingArchivedTitle": "Niente archiviato", + "sessions.deletePermanentlyTitle": "Elimina definitivamente", + "sessions.defaultProjectDirTitle": "Directory di progetto predefinita", + "sessions.loadingArchived": "Caricamento sessioni archiviate…", + "sessions.restored": "Ripristinata", + "sessions.projectDirUpdated": "Directory di progetto predefinita aggiornata", + "sessions.loadFailed": "Impossibile caricare le sessioni archiviate", + "sessions.unarchiveFailed": "Disarchiviazione fallita", + "sessions.deleteFailed": "Eliminazione fallita", + "sessions.archiveHint": "Archivia una chat per nasconderla qui.", + "sessions.updateDirFailed": "Impossibile aggiornare la directory predefinita", + "sessions.clearDirFailed": "Impossibile cancellare la directory predefinita", + "mcp.title": "Server MCP", + "mcp.addServer": "Aggiungi Server", + "mcp.noServers": "Nessun server MCP configurato.", + "mcp.loading": "Caricamento server MCP…", + "mcp.servers": "Server MCP", + "mcp.configured": "{count} configurati", + "mcp.newServer": "Nuovo server", + "mcp.reloadMCP": "Ricarica MCP", + "mcp.reloading": "Ricaricamento...", + "mcp.noServersDesc": "Aggiungi un server stdio o HTTP per esporre strumenti MCP.", + "mcp.name": "Nome", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "JSON Server", + "mcp.editServer": "Modifica server", + "mcp.saveServer": "Salva server", + "mcp.saving": "Salvataggio...", + "mcp.remove": "Rimuovi", + "mcp.disabled": "disabilitato", + "mcp.nameRequired": "Nome obbligatorio", + "mcp.nameRequiredDesc": "Assegna una chiave di configurazione a questo server MCP.", + "mcp.invalidJson": "La configurazione del server deve essere un oggetto JSON", + "mcp.invalidJsonDesc": "JSON MCP non valido", + "mcp.saved": "Server MCP salvato", + "mcp.savedDesc": "{name} si applica dopo il ricaricamento MCP.", + "mcp.saveFailed": "Salvataggio fallito", + "mcp.removeFailed": "Rimozione fallita", + "mcp.gatewayUnavailable": "Gateway non disponibile", + "mcp.gatewayUnavailableDesc": "Riconnetti il gateway prima di ricaricare MCP.", + "mcp.reloadedTitle": "Strumenti MCP ricaricati", + "mcp.reloadedDesc": "I nuovi schemi strumento si applicano ai nuovi turni.", + "mcp.reloadFailed": "Ricarica MCP fallita", + "mcp.giveConfigKey": "Assegna una chiave di configurazione a questo server MCP.", + "mcp.reconnectGateway": "Riconnetti il gateway prima di ricaricare MCP.", + "mcp.newSchemas": "I nuovi schemi strumento si applicano ai nuovi turni.", + "mcp.loadingServers": "Caricamento server MCP...", + "mcp.serverName": "Nome", + "mcp.serversTitle": "Server MCP", + "mcp.noServersTitle": "Nessun server MCP", + "mcp.failedToLoad": "Caricamento configurazione MCP fallito", + "mcp.invalidJsonShort": "JSON MCP non valido", + "mcp.serverSaved": "Server MCP salvato", + "mcp.toolsReloaded": "Strumenti MCP ricaricati", + "mcp.emptyDesc": "Aggiungi un server stdio o HTTP per esporre strumenti MCP.", + "tools.title": "Strumenti e Competenze", + "tools.noTools": "Nessuno strumento disponibile.", + "nav.home": "Home", + "nav.chat": "Chat", + "nav.settings": "Impostazioni", + "nav.files": "File", + "nav.terminal": "Terminale", + "header.search": "Cerca o digita un comando…", + "settings.closeSettings": "Chiudi impostazioni", + "settings.archivedChats": "Chat Archiviate", + "settings.exportConfig": "Esporta configurazione", + "settings.importConfig": "Importa configurazione", + "settings.resetDefaults": "Ripristina predefiniti", + "settings.llmProviders": "Provider LLM", + "settings.searchPlaceholder.about": "Informazioni su Hermes Desktop", + "settings.searchPlaceholder.config": "Cerca impostazioni…", + "settings.searchPlaceholder.gateway": "Connessione gateway…", + "settings.searchPlaceholder.keys": "Cerca chiavi API…", + "settings.searchPlaceholder.mcp": "Cerca server MCP…", + "settings.searchPlaceholder.sessions": "Cerca sessioni archiviate…", + "model.auxTask.vision": "Visione", + "model.auxTask.visionHint": "Analisi immagini", + "model.auxTask.web_extract": "Estrazione web", + "model.auxTask.web_extractHint": "Riassunto pagine", + "model.auxTask.compression": "Compressione", + "model.auxTask.compressionHint": "Compattazione contesto", + "model.auxTask.session_search": "Ricerca sessioni", + "model.auxTask.session_searchHint": "Query di richiamo", + "model.auxTask.skills_hub": "Hub competenze", + "model.auxTask.skills_hubHint": "Ricerca competenze", + "model.auxTask.approval": "Approvazione", + "model.auxTask.approvalHint": "Auto-approvazione intelligente", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "Routing strumenti MCP", + "model.auxTask.title_generation": "Generazione titoli", + "model.auxTask.title_generationHint": "Titoli sessione", + "model.auxTask.curator": "Curatore", + "model.auxTask.curatorHint": "Revisione uso competenze", + "model.mainModel": "Modello principale", + "model.mainDesc": "Si applica alle nuove sessioni. Usa il selettore modello nel compositore per cambiare al volo la chat attiva.", + "model.providerPlaceholder": "Provider", + "model.modelPlaceholder": "Modello", + "model.apply": "Applica", + "model.applying": "Applicazione…", + "model.auxiliaryModels": "Modelli ausiliari", + "model.auxiliaryDesc": "Le attività ausiliarie usano il modello principale per impostazione predefinita. Assegna un modello dedicato a qualsiasi attività per sovrascrivere.", + "model.resetAllToMain": "Reimposta tutto al principale", + "model.setToMain": "Imposta al principale", + "model.change": "Cambia", + "model.cancel": "Annulla", + "model.autoUseMain": "auto · usa modello principale", + "model.providerDefault": "(predefinito provider)", + "model.loading": "Caricamento configurazione modello…", + "model.options": "Opzioni", + "model.thinking": "Ragionamento", + "model.fast": "Veloce", + "model.effort": "Sforzo", + "model.noOptions": "Nessuna opzione per questo modello", + "model.optionUpdateFailed": "Aggiornamento opzione modello fallito", + "model.fastModeUpdateFailed": "Aggiornamento modalità veloce fallito", + "model.effortMinimal": "Minimo", + "model.effortLow": "Basso", + "model.effortMedium": "Medio", + "model.effortHigh": "Alto", + "model.effortMax": "Massimo", + "model.switch": "Cambia modello", + "model.unknown": "(sconosciuto)", + "model.filterPlaceholder": "Filtra provider e modelli...", + "model.persistGlobal": "Rendi globale", + "model.persistGlobalSession": "Rendi globale (altrimenti solo questa sessione)", + "model.couldNotLoad": "Impossibile caricare i modelli", + "model.proLockedDesc": "I modelli Pro richiedono un abbonamento Nous a pagamento.", + "model.priceTooltip": "Prezzo input/output per milione di token", + "model.freePrice": "Gratuito", + "model.currentLabel": "attuale:", + "model.addProviderBtn": "Aggiungi provider", + "models.title": "Modelli", + "models.search": "Cerca modelli", + "models.addProvider": "Aggiungi provider…", + "updates.checking": "Verifica aggiornamenti…", + "updates.available": "Aggiornamento disponibile", + "updates.downloading": "Download in corso…", + "updates.installing": "Installazione in corso…", + "updates.restart": "Riavvia per aggiornare", + "updates.stageGettingReady": "Preparazione…", + "updates.stageDownloading": "Download in corso…", + "updates.stageAlmostThere": "Quasi pronto…", + "updates.stageFinishingUp": "Completamento…", + "updates.stageRestarting": "Riavvio di Hermes…", + "updates.stageManual": "Aggiorna dal tuo terminale", + "updates.stageError": "Aggiornamento in pausa", + "updates.updatingHermes": "Aggiornamento di Hermes…", + "updates.lookingForUpdates": "Ricerca aggiornamenti…", + "updates.couldntCheck": "Impossibile verificare gli aggiornamenti", + "updates.updateNotAvailable": "Aggiornamento non disponibile", + "updates.checkConnection": "Verifica la tua connessione e riprova.", + "updates.onLatest": "Stai usando l'ultima versione.", + "updates.allSet": "Tutto a posto", + "updates.newUpdateAvailable": "Nuovo aggiornamento disponibile", + "updates.readyToInstall": "Una nuova versione di Hermes è pronta per l'installazione.", + "updates.updateNow": "Aggiorna ora", + "updates.maybeLater": "Forse più tardi", + "updates.moreChanges": "+ {count} altra modifica inclusa.", + "updates.moreChanges_plural": "+ {count} altre modifiche incluse.", + "updates.updateFromTerminal": "Aggiorna dal tuo terminale", + "updates.terminalDesc": "Hai installato Hermes dalla riga di comando, quindi anche gli aggiornamenti vengono eseguiti lì. Incolla questo nel tuo terminale:", + "updates.copied": "Copiato", + "updates.copy": "Copia", + "updates.pickupNewVersion": "Hermes rileverà la nuova versione al prossimo avvio.", + "updates.done": "Fatto", + "updates.updaterDesc": "L'aggiornatore di Hermes prenderà il controllo nella sua finestra e riaprirà Hermes al termine.", + "updates.closeToApply": "Hermes si chiuderà per applicare l'aggiornamento.", + "updates.updateDidntFinish": "L'aggiornamento non è stato completato", + "updates.nothingLost": "Nessun problema — non è stato perso nulla. Puoi riprovare ora.", + "updates.notNow": "Non ora", + "errors.generic": "Qualcosa è andato storto.", + "errors.notFound": "Pagina non trovata.", + "errors.noPermission": "Non hai il permesso di accedere a questo.", + "errors.somethingBroke": "Qualcosa si è rotto nell'interfaccia", + "errors.viewCrashedDesc": "La vista ha incontrato un errore imprevisto. Le tue chat e impostazioni sono al sicuro - riprova o ricarica la finestra.", + "errors.noProviders": "Nessun provider autenticato.", + "tool.toolCall": "Chiamata Strumento", + "tool.result": "Risultato", + "tool.error": "Errore", + "tool.timeout": "Scaduto", + "tool.cancelled": "Annullato", + "tool.running": "In esecuzione", + "tool.recovered": "Ripristinato", + "tool.done": "Completato", + "tool.output": "Output strumento", + "tool.searchResults": "Risultati ricerca", + "tool.rawResponse": "Risposta grezza", + "tool.stdout": "stdout", + "tool.stderr": "stderr", + "tool.copyActivity": "Copia attività", + "tool.recoveredAfter": "Ripristinato dopo 1 passo fallito", + "tool.recoveredAfterN": "Ripristinato dopo {count} passi falliti", + "tool.oneStepFailed": "1 passo fallito", + "tool.nStepsFailed": "{count} passi falliti", + "composer.startingHermes": "Avvio di Hermes...", + "composer.sendFollowUp": "Invia seguito", + "composer.message": "Messaggio", + "composer.editingQueued": "Modifica turno in coda nel compositore", + "composer.attach": "Allega", + "composer.files": "File…", + "composer.folder": "Cartella…", + "composer.images": "Immagini…", + "composer.pasteImage": "Incolla immagine", + "composer.url": "URL…", + "composer.promptSnippets": "Frammenti prompt", + "composer.promptSnippetsDesc": "Scegli un prompt iniziale da inserire nel compositore.", + "composer.voiceStart": "Avvia conversazione vocale", + "composer.queue": "Accoda messaggio", + "composer.speaking": "In riproduzione", + "composer.transcribing": "Trascrizione in corso", + "composer.muted": "Muto", + "composer.listening": "In ascolto", + "composer.unmuteMic": "Riattiva microfono", + "composer.muteMic": "Disattiva microfono", + "composer.stopListening": "Ferma ascolto e invia", + "composer.endVoice": "Termina conversazione vocale", + "composer.end": "Fine", + "composer.stopDictation": "Ferma dettatura", + "composer.transcribingDictation": "Trascrizione dettatura in corso", + "composer.voiceDictation": "Dettatura vocale", + "composer.addContext": "Aggiungi contesto", + "previewConsole.resizeLabel": "Ridimensiona console anteprima", + "previewConsole.noMessages": "Nessun messaggio console ancora.", + "urlDialog.title": "Allega un URL", + "urlDialog.description": "Hermes recupererà la pagina e la includerà come contesto per questo turno.", + "urlDialog.placeholder": "https://esempio.com/articolo", + "urlDialog.hint": "Includi l'URL completo, ad es.", + "urlDialog.attach": "Allega", + "chat.composerTip": "Suggerimento: digita @ per riferire file inline.", + "chat.loadingSession": "Caricamento sessione", + "chat.loadingResponse": "Hermes sta caricando una risposta", + "chat.branchInNewChat": "Dirama in nuova chat", + "chat.readAloud": "Leggi ad alta voce", + "chat.preparingAudio": "Preparazione audio...", + "chat.stopReading": "Ferma lettura", + "chat.editMessage": "Modifica messaggio", + "chat.editableCheckpoint": "Checkpoint modificabile", + "chat.restoreCheckpoint": "Ripristina checkpoint", + "chat.goForward": "Vai avanti", + "chat.restorePrevCheckpoint": "Ripristina checkpoint precedente", + "chat.restoreNextCheckpoint": "Ripristina checkpoint successivo", + "chat.reconnecting": "Riconnessione a Hermes…", + "appearance.toolCallDisplay": "Visualizzazione Chiamate Strumento", + "appearance.toolCallDisplayDesc": "Prodotto nasconde i payload grezzi; Tecnico mostra input/output completi.", + "appearance.toolViewProduct": "Prodotto", + "appearance.toolViewTechnical": "Tecnico", + "appearance.toolViewProductDesc": "Attività strumento leggibile con riassunti concisi.", + "appearance.toolViewTechnicalDesc": "Includi argomenti/risultati grezzi e dettagli di basso livello.", + "boot.ipcUnavailable": "Il bridge IPC desktop non è disponibile.", + "boot.backendExited": "Il processo in background di Hermes è terminato durante l'avvio.", + "boot.backendStoppedTitle": "Backend fermo", + "boot.backendStoppedMessage": "Il processo in background di Hermes è terminato.", + "boot.startingConnection": "Avvio connessione desktop", + "boot.connectingGateway": "Connessione gateway desktop attivo", + "boot.loadingConfig": "Caricamento impostazioni Hermes", + "boot.loadingSessions": "Caricamento sessioni recenti", + "boot.desktopBootFailed": "Avvio desktop fallito", + "boot.couldNotStart": "Hermes non è riuscito ad avviarsi", + "boot.recoveryDesc": "Il gateway in background non si è avviato. Prova una delle seguenti procedure di ripristino — nulla qui elimina le tue chat o impostazioni.", + "boot.retry": "Riprova", + "boot.repairInstall": "Ripara installazione", + "boot.useLocalGateway": "Usa gateway locale", + "boot.openLogs": "Apri log", + "boot.repairHint": "La riparazione riesegue il programma di installazione e può richiedere alcuni minuti su una macchina nuova.", + "boot.showLogs": "Mostra log recenti", + "boot.hideLogs": "Nascondi log recenti", + "bootstrap.pending": "In attesa", + "bootstrap.running": "Installazione in corso", + "bootstrap.done": "Completato", + "bootstrap.skipped": "Saltato", + "bootstrap.failed": "Fallito", + "install.title": "Hermes richiede un'installazione unica", + "install.desc": "L'installazione automatica al primo avvio non è disponibile su", + "install.descEnd": "ancora. Apri Terminale ed esegui il comando qui sotto, poi riavvia questa app. Gli avvii successivi salteranno questo passaggio.", + "install.installCommand": "Comando di installazione", + "install.copyCommand": "Copia comando", + "install.viewDocs": "Visualizza documentazione installazione", + "install.willInstallTo": "Verrà installato in", + "install.iRanIt": "L'ho eseguito -- riprova", + "install.failed": "Installazione fallita", + "install.settingUp": "Configurazione di Hermes Agent", + "install.finishingUp": "Completamento", + "install.failedDesc": "Uno dei passaggi di installazione è fallito. Su Windows, questo può accadere se un'altra CLI Hermes o istanza desktop è in esecuzione. Ferma tutte le istanze Hermes in esecuzione, poi riprova. Controlla i dettagli qui sotto o il log desktop per la trascrizione completa.", + "install.setupDesc": "Questa è una configurazione unica. Il programma di installazione di Hermes sta scaricando le dipendenze e configurando la tua macchina. Gli avvii successivi salteranno questo passaggio.", + "install.fetchingManifest": "Recupero manifesto di installazione...", + "install.error": "Errore", + "install.showOutput": "Mostra output installazione", + "install.hideOutput": "Nascondi output installazione", + "install.noOutput": "Nessun output ancora.", + "install.cancelInstall": "Annulla installazione", + "install.cancelling": "Annullamento...", + "install.copyOutput": "Copia output", + "install.copied": "Copiato!", + "install.reloadRetry": "Ricarica e riprova", + "install.saveLogs": "Trascrizione completa salvata in", + "install.stepsComplete": "passi completati", + "install.nowLabel": "ora", + "install.line": "riga", + "install.lines": "righe", + "titlebar.hideSidebar": "Nascondi barra laterale", + "titlebar.showSidebar": "Mostra barra laterale", + "titlebar.search": "Cerca", + "titlebar.searchTitle": "Cerca sessioni, viste e azioni", + "titlebar.hideRightSidebar": "Nascondi barra laterale destra", + "titlebar.showRightSidebar": "Mostra barra laterale destra", + "titlebar.unmuteHaptics": "Riattiva feedback tattile", + "titlebar.muteHaptics": "Disattiva feedback tattile", + "titlebar.openSettings": "Apri impostazioni", + "titlebar.profiles": "Profili", + "titlebar.profilesDesc": "Ambienti Hermes avanzati per persone, configurazioni, competenze e SOUL.md separati.", + "titlebar.manageProfiles": "Gestisci profili", + "titlebar.language": "Lingua", + "titlebar.languageDesc": "Scegli una lingua di visualizzazione per l'interfaccia.", + "sidebar.sheetTitle": "Barra laterale", + "sidebar.sheetDesc": "Mostra la barra laterale mobile.", + "sidebar.toggle": "Attiva/Disattiva Barra Laterale", + "clarify.hermesIsAsking": "Hermes sta chiedendo", + "clarify.loadingQuestion": "Caricamento domanda…", + "clarify.otherTypeAnswer": "Altro (digita la risposta)", + "clarify.placeholderAnswer": "Digita la tua risposta…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Invio per inviare", + "clarify.back": "Indietro", + "clarify.skip": "Salta", + "clarify.couldNotSend": "Impossibile inviare la risposta di chiarimento", + "clarify.pickLabel": "1–{n} per scegliere", + "pagination.ariaLabel": "paginazione", + "pagination.prevAria": "Vai alla pagina precedente", + "pagination.prev": "Prec", + "pagination.nextAria": "Vai alla pagina successiva", + "pagination.next": "Succ", + "commandCenter.sessionsPanel": "Pannello sessioni", + "commandCenter.systemPanel": "Pannello sistema", + "commandCenter.usagePanel": "Pannello utilizzo", + "commandCenter.navigate": "Naviga", + "commandCenter.noMatchingResults": "Nessun risultato corrispondente.", + "commandCenter.noSessionsYet": "Nessuna sessione ancora.", + "commandCenter.unpinSession": "Rimuovi sessione", + "commandCenter.pinSession": "Fissa sessione", + "commandCenter.exportSession": "Esporta sessione", + "commandCenter.deleteSession": "Elimina sessione", + "commandCenter.gatewayRunning": "Gateway messaggistica in esecuzione", + "commandCenter.gatewayStopped": "Gateway messaggistica fermo", + "commandCenter.restartMsg": "Riavvia messaggistica", + "commandCenter.updateHermes": "Aggiorna Hermes", + "commandCenter.noLogsLoaded": "Nessun log caricato ancora.", + "commandCenter.closeLabel": "Chiudi centro comandi", + "commandCenter.searchPlaceholder": "Cerca sessioni, viste e azioni", + "commandCenter.statSessions": "Sessioni", + "commandCenter.statApiCalls": "Chiamate API", + "commandCenter.statTokens": "Token in/out", + "commandCenter.statEstCost": "Costo stimato", + "commandCenter.actualCost": "effettivo {cost}", + "commandCenter.loadingUsage": "Caricamento utilizzo...", + "commandCenter.noUsageDesc": "Nessun utilizzo negli ultimi {count} giorni.", + "commandCenter.retry": "Riprova", + "commandCenter.tokenInput": "input", + "commandCenter.tokenOutput": "output", + "commandCenter.noDailyActivity": "Nessuna attività giornaliera.", + "commandCenter.topModels": "Modelli principali", + "commandCenter.topSkills": "Competenze principali", + "commandCenter.actionsLabel": "azioni", + "commandCenter.systemRunning": "in esecuzione", + "commandCenter.systemDone": "completato", + "commandCenter.systemFailed": "fallito", + "commandCenter.open": "Apri Centro Comandi", + "commandCenter.close": "Chiudi Centro Comandi", + "intro.fallback1h": "Cosa muoviamo oggi?", + "intro.fallback1b": "Inviami un bug, branch, piano o idea approssimativa. Ispezionerò il repository e lo trasformerò nel prossimo passo concreto.", + "intro.fallback2h": "A cosa stai pensando?", + "intro.fallback2b": "Porta il codice, la domanda o la parte bloccata. Leggerò la stanza prima di fare modifiche.", + "intro.fallback3h": "Cosa dovrebbe guardare Hermes?", + "intro.fallback3b": "Inviami il compito, il percorso fallito o il piano a metà. Ti aiuterò a trasformarlo in azione.", + "intro.fallback4h": "Da dove iniziamo?", + "intro.fallback4b": "Porta il problema, l'obiettivo o il file. Ispezionerò prima e manterrò il prossimo passo concreto.", + "intro.fallback5h": "Cosa richiede attenzione?", + "intro.fallback5b": "Inviami il contesto che hai. Ti aiuterò a organizzarlo in un piano o una correzione.", + "intro.personality.heading1": "La modalità {label} è attiva. Su cosa dovremmo lavorare?", + "intro.personality.body1": "Inviami il compito, il file o l'idea approssimativa. Userò la tua voce configurata e manterrò il lavoro ancorato a questo repository.", + "intro.personality.heading2": "Cosa deve vedere {label} Hermes?", + "intro.personality.body2": "Porta il contesto o la parte bloccata. Mi adatterò alla tua personalità configurata.", + "intro.personality.heading3": "La modalità {label} è pronta.", + "intro.personality.body3": "Inviami il problema, il file o l'idea. Seguirò la personalità che hai configurato.", + "intro.personality.heading4": "Cosa dovrebbe affrontare {label} Hermes?", + "intro.personality.body4": "Lascia il compito qui. Manterrò il lavoro ancorato al repository.", + "intro.personality.heading5": "Da dove iniziamo?", + "intro.personality.body5": "Dammi il contesto e risponderò in modalità {label}.", + "intro.brand": "HERMES AGENT", + "artifacts": "Artefatti", + "artifacts.noArtifactsFound": "Nessun artefatto trovato", + "agents.spawnTree": "Albero di generazione", + "agents.liveSubagentActivity": "Attività subagenti in tempo reale per il turno corrente.", + "agents.noLiveSubagents": "Nessun subagente attivo", + "agents.files": "File", + "agents.label": "Agenti", + "agents.open": "Apri agenti", + "agents.close": "Chiudi agenti", + "agents.subagent": "subagente", + "agents.subagents": "subagenti", + "agents.failed": "fallito", + "agents.running": "in esecuzione", + "provider.desc.nousPortal": "Override URL base Nous Portal", + "provider.desc.openRouter": "Chiave API OpenRouter (per visione, helper web scraping e MoA)", + "provider.desc.google": "Chiave API Google AI Studio (riconosciuta anche come GEMINI_API_KEY)", + "provider.desc.gemini": "ID progetto GCP per piani Gemini a pagamento (il piano gratuito si auto-provvigiona)", + "provider.desc.anthropic": "Chiave API Anthropic", + "provider.desc.deepseek": "URL base API DeepSeek personalizzato (avanzato)", + "provider.desc.xai": "Override URL base xAI", + "provider.desc.huggingface": "Override URL base Hugging Face Inference Providers", + "provider.desc.kimi": "Chiave API Kimi / Moonshot Cina", + "provider.desc.minimax": "Override URL base MiniMax (Cina)", + "provider.desc.minimaxCn": "Chiave API MiniMax Cina", + "provider.desc.dashscope": "URL base DashScope personalizzato (predefinito: endpoint compatibile OpenAI coding-intl)", + "provider.desc.glm": "Chiave API GLM (Z.AI)", + "provider.desc.nvidia": "Override URL base NVIDIA NIM (es. http://localhost:8000/v1 per NIM locale)", + "provider.desc.opencodeGo": "Chiave API OpenCode Go", + "provider.desc.opencodeZen": "Chiave API OpenCode Zen", + "provider.desc.xiaomi": "Override URL base Xiaomi MiMo (predefinito: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Chiave API Kilo Code", + "provider.desc.aiGateway": "Chiave API AI Gateway (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "Chiave API ElevenLabs", + "provider.desc.openai": "Chiave API OpenAI (per elaborazione vocale tramite proxy)", + "provider.desc.mistral": "Chiave API Mistral (per STT/TTS)", + "provider.desc.groq": "Chiave API Groq (per STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "URL API Firecrawl per istanze self-hosted (opzionale)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Override URL base Nous Portal", + "provider.desc.openrouter": "Chiave API OpenRouter (per visione, helper web scraping e MoA)", + "provider.desc.lmstudio": "Override URL base Z.AI / GLM", + "provider.desc.zai": "URL base Azure Foundry (imposta tramite 'hermes model' per configurazione specifica endpoint)", + "provider.desc.stepfun": "Override URL base StepFun Step Plan", + "provider.desc.arcee": "Override URL base Arcee AI", + "provider.desc.gmi": "Override URL base GMI Cloud", + "provider.desc.qwenportal": "Override URL base Qwen Portal (predefinito: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "Override URL base OpenCode Go", + "provider.desc.ollamacloud": "Override URL base Ollama Cloud (predefinito: https://ollama.com/v1)", + "provider.desc.awsbedrock": "Profilo AWS nominato per autenticazione Bedrock (da ~/.aws/credentials)", + "provider.desc.exa": "Chiave API Exa per ricerca web e contenuti AI-nativi", + "provider.desc.parallel": "Chiave API Parallel per ricerca web ed estrazione AI-nativi" +} diff --git a/apps/desktop/src/locales/ja.json b/apps/desktop/src/locales/ja.json new file mode 100644 index 000000000000..5714311759cd --- /dev/null +++ b/apps/desktop/src/locales/ja.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "外観", + "appearance.description": "これらはデスクトップ専用の表示設定です。モードは明るさを制御し、テーマはアクセントパレットとチャット画面のスタイルを制御します。", + "appearance.colorMode": "カラーモード", + "appearance.colorModeDesc": "固定モードを選ぶか、システム設定に従います。", + "appearance.theme": "テーマ", + "appearance.themeDesc": "チャット画面とインターフェースのアクセントに使うカラーパレットを選択します。", + "appearance.mode.light": "ライト", + "appearance.mode.lightDesc": "明るいデスクトップ画面", + "appearance.mode.dark": "ダーク", + "appearance.mode.darkDesc": "目の疲れにくい作業空間", + "appearance.mode.system": "システム", + "appearance.mode.systemDesc": "OSの外観に従う", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "ガラス調のニュートラルにNousブルーのアクセント", + "appearance.theme.midnight": "ミッドナイト", + "appearance.theme.midnightDesc": "深い青紫にクールなアクセント", + "appearance.theme.ember": "エンバー", + "appearance.theme.emberDesc": "温かみのある深紅とブロンズ — 鍛冶場の雰囲気", + "appearance.theme.mono": "モノ", + "appearance.theme.monoDesc": "クリーンなグレースケール — ミニマルで集中型", + "appearance.theme.cyberpunk": "サイバーパンク", + "appearance.theme.cyberpunkDesc": "黒地にネオングリーン — マトリックス端末", + "appearance.theme.slate": "スレート", + "appearance.theme.slateDesc": "クールなスレートブルー — 開発者向け集中テーマ", + "appearance.language": "言語", + "appearance.languageDesc": "UI の言語を選択するか、システム設定に従います。", + "language.system": "システムに従う", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "設定", + "settings.appearance": "外観", + "settings.model": "モデル", + "settings.gateway": "ゲートウェイ", + "settings.sessions": "セッション", + "settings.tools": "ツール & スキル", + "settings.section.chat": "チャット", + "settings.section.workspace": "ワークスペース", + "settings.section.safety": "安全性", + "settings.section.memory": "メモリ & コンテキスト", + "settings.section.voice": "音声", + "settings.section.advanced": "詳細", + "settings.mcp": "MCP サーバー", + "settings.config": "設定", + "settings.keys": "API キー", + "settings.about": "について", + "chat.placeholder": "何でも聞いてください…", + "chat.send": "送信", + "chat.stop": "停止", + "chat.thinking": "考え中…", + "chat.noSession": "アクティブなセッションがありません。新しい会話を始めてください。", + "commandCenter.title": "コマンドセンター", + "commandCenter.noSessions": "セッションはまだありません。", + "commandCenter.loadingStatus": "ステータスを読み込み中…", + "commandCenter.recentLogs": "最近のログ", + "commandCenter.dailyTokens": "1日のトークン", + "commandCenter.noActivity": "1日のアクティビティはありません。", + "commandCenter.noModelUsage": "モデルの使用はまだありません。", + "commandCenter.noSkillActivity": "スキルのアクティビティはまだありません。", + "common.loading": "読み込み中…", + "common.save": "保存", + "common.cancel": "キャンセル", + "common.close": "閉じる", + "common.delete": "削除", + "common.confirm": "確認", + "common.search": "検索…", + "onboarding.welcome": "Hermes へようこそ", + "onboarding.getStarted": "プロバイダーとモデルを選択して始めましょう。", + "onboarding.skip": "スキップ", + "onboarding.continue": "続ける", + "onboarding.finish": "完了", + "file.browser": "ファイルブラウザ", + "file.noFiles": "ファイルはまだありません。", + "terminal.title": "ターミナル", + "terminal.newTab": "新規タブ", + "terminal.closeTab": "タブを閉じる", + "skills.title": "スキル", + "skills.search": "スキルを検索…", + "skills.noResults": "スキルが見つかりません。", + "profiles.title": "プロファイル", + "cron.title": "Cron ジョブ", + "cron.noJobs": "スケジュールされたジョブはありません。", + "messaging.title": "メッセージング", + "about.version": "バージョン", + "about.checkUpdates": "アップデートを確認", + "about.upToDate": "Hermes は最新です。", + "about.updateAvailable": "アップデートがあります。", + "about.license": "MIT ライセンス", + "keys.title": "API キー", + "keys.noKeys": "API キーが設定されていません。", + "keys.addKey": "キーを追加", + "config.title": "設定", + "config.edit": "設定を編集", + "config.reload": "設定を再読み込み", + "gateway.title": "ゲートウェイ", + "gateway.start": "ゲートウェイを起動", + "gateway.stop": "ゲートウェイを停止", + "gateway.restart": "ゲートウェイを再起動", + "gateway.running": "実行中", + "gateway.stopped": "停止中", + "sessions.title": "セッション", + "sessions.search": "セッションを検索…", + "sessions.noResults": "セッションが見つかりません。", + "sessions.export": "エクスポート", + "sessions.delete": "セッションを削除", + "mcp.title": "MCP サーバー", + "mcp.addServer": "サーバーを追加", + "mcp.noServers": "MCP サーバーが設定されていません。", + "tools.title": "ツール & スキル", + "tools.noTools": "利用可能なツールはありません。", + "nav.home": "ホーム", + "nav.chat": "チャット", + "nav.settings": "設定", + "nav.files": "ファイル", + "nav.terminal": "ターミナル", + "header.search": "検索またはコマンドを入力…", + "settings.closeSettings": "設定を閉じる", + "settings.archivedChats": "アーカイブされたチャット", + "settings.exportConfig": "設定をエクスポート", + "settings.importConfig": "設定をインポート", + "settings.resetDefaults": "デフォルトにリセット", + "settings.llmProviders": "LLM プロバイダー", + "settings.searchPlaceholder.about": "Hermes Desktop について", + "settings.searchPlaceholder.config": "設定を検索…", + "settings.searchPlaceholder.gateway": "ゲートウェイ接続…", + "settings.searchPlaceholder.keys": "API キーを検索…", + "settings.searchPlaceholder.mcp": "MCP サーバーを検索…", + "settings.searchPlaceholder.sessions": "アーカイブされたセッションを検索…", + "about.hermesDesktop": "Hermes デスクトップ", + "about.versionUnavailable": "バージョン情報なし", + "about.updates": "アップデート", + "about.checkNow": "今すぐ確認", + "about.checking": "確認中…", + "about.seeWhatsNew": "新着情報を見る", + "about.releaseNotes": "リリースノート", + "about.autoUpdates": "自動アップデート", + "about.autoUpdatesDesc": "Hermes はバックグラウンドで自動的にアップデートを確認し、準備ができたらお知らせします。", + "about.selfUpdateUnsupported": "このビルドはアプリ内から自身を更新できません。", + "about.cannotReachServer": "アップデートサーバーに接続できませんでした。", + "about.installingUpdate": "アップデートをインストール中です。", + "about.updateReady": "新しいアップデートの準備ができました({count} 件の変更を含む)。", + "about.updateReady_plural": "新しいアップデートの準備ができました({count} 件の変更を含む)。", + "about.onLatest": "最新バージョンです。", + "about.tapCheckNow": "「今すぐ確認」をタップしてアップデートを探します。", + "about.lastChecked": "最終確認: {time}", + "about.justNow": "たった今", + "about.never": "未確認", + "about.minAgo": "{count} 分前", + "about.hoursAgo": "{count} 時間前", + "about.daysAgo": "{count} 日前", + "about.buildInfo": "ブランチ {branch} · コミット {sha}", + "keys.loading": "API キーと認証情報を読み込み中…", + "keys.docs": "ドキュメント", + "keys.openDocs": "プロバイダーのドキュメントを開く", + "keys.hideValue": "値を隠す", + "keys.revealValue": "値を表示", + "keys.set": "設定", + "keys.notSet": "未設定", + "keys.replace": "置き換え", + "keys.replaceValue": "現在の値を置き換え", + "keys.enterValue": "値を入力", + "keys.saving": "保存中", + "keys.save": "保存", + "keys.cancel": "キャンセル", + "keys.clearValue": "値をクリア", + "keys.configured": "{total} 件中 {count} 件設定済み", + "keys.setCount": "{total} 件中 {count} 件設定", + "keys.countSet": "{count} 件設定", + "keys.countKeys": "{count} キー", + "keys.otherProviders": "その他のプロバイダー", + "keys.categoryTools": "ツール", + "keys.categoryMessaging": "メッセージング", + "keys.categorySettings": "設定", + "config.notSet": "未設定", + "config.commaSeparated": "カンマ区切りの値", + "config.on": "オン", + "config.off": "オフ", + "config.none": "なし", + "config.emptyOption": "(なし)", + "config.loading": "Hermes の設定を読み込み中…", + "config.noMatching": "一致する設定がありません", + "config.noMatchingDesc": "別の検索語を試すか、別のセクションを選択してください。", + "config.results": "{count} 件の結果", + "config.results_plural": "{count} 件の結果", + "gateway.loading": "ゲートウェイ設定を読み込み中…", + "gateway.unavailable": "ゲートウェイ設定を利用できません", + "gateway.unavailableDesc": "デスクトップ IPC ブリッジがゲートウェイ設定を公開していません。", + "gateway.connection": "ゲートウェイ接続", + "gateway.envOverride": "環境変数による上書き", + "gateway.desc": "Hermes Desktop はデフォルトで独自のローカルゲートウェイを起動します。リモートゲートウェイを使用すると、別のマシンや信頼できるプロキシの背後で既に実行中の Hermes バックエンドをこのアプリから制御できます。", + "gateway.envOverrideTitle": "環境変数がこのデスクトップセッションを制御しています。", + "gateway.envOverrideDesc": "{urlVar} と {tokenVar} を解除すると、以下の保存された設定が使用されます。", + "gateway.localTitle": "ローカルゲートウェイ", + "gateway.localDesc": "localhost 上でプライベートな Hermes バックエンドを起動します。これがデフォルトで、オフラインでも動作します。", + "gateway.remoteTitle": "リモートゲートウェイ", + "gateway.remoteDesc": "セッショントークンを使用して、このデスクトップシェルをリモートの Hermes バックエンドに接続します。", + "gateway.remoteUrl": "リモート URL", + "gateway.remoteUrlDesc": "リモートダッシュボードバックエンドのベース URL。パスプレフィックス(例: /hermes)もサポートされています。", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "セッショントークン", + "gateway.sessionTokenDesc": "REST および WebSocket アクセスに使用するダッシュボードセッショントークン。空白のままにすると保存されたトークンが維持されます。", + "gateway.sessionTokenPlaceholder": "セッショントークンを貼り付け", + "gateway.existingToken": "既存のトークン {preview}", + "gateway.tokenSaved": "保存済み", + "gateway.testRemote": "リモートをテスト", + "gateway.saveRestart": "次回起動時に保存", + "gateway.saveReconnect": "保存して再接続", + "gateway.diagnostics": "診断", + "gateway.diagnosticsDesc": "ファイルマネージャーで desktop.log を表示します — ゲートウェイの起動に失敗した場合に便利です。", + "gateway.openLogs": "ログを開く", + "sessions.loading": "読み込み中…", + "sessions.defaultProjectDir": "デフォルトのプロジェクトディレクトリ", + "sessions.defaultProjectDirDesc": "新しいセッションは、別のフォルダを選択しない限りこのフォルダで開始されます。未設定の場合はホームディレクトリが使用されます。", + "sessions.defaultDir": "デフォルトは {fallback} です。", + "sessions.notSet": "未設定", + "sessions.change": "変更", + "sessions.choose": "選択", + "sessions.clear": "クリア", + "sessions.archivedTitle": "アーカイブされたセッション", + "sessions.archivedDesc": "アーカイブされたチャットはサイドバーから非表示になりますが、すべてのメッセージは保持されます。サイドバーのチャットを Ctrl/⌘ クリックでアーカイブできます。", + "sessions.nothingArchived": "アーカイブはありません", + "sessions.noSearchMatch": "検索に一致するアーカイブチャットはありません。", + "sessions.archiveToHide": "ここに非表示にするにはチャットをアーカイブしてください。", + "sessions.unarchive": "アーカイブ解除", + "sessions.deletePermanently": "完全に削除", + "sessions.messages": "{count} メッセージ", + "mcp.loading": "MCP サーバーを読み込み中…", + "mcp.servers": "MCP サーバー", + "mcp.configured": "{count} 件設定済み", + "mcp.newServer": "新規サーバー", + "mcp.reloadMCP": "MCP を再読み込み", + "mcp.reloading": "再読み込み中...", + "mcp.noServersDesc": "stdio または HTTP サーバーを追加して MCP ツールを公開します。", + "mcp.name": "名前", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "サーバー JSON", + "mcp.editServer": "サーバーを編集", + "mcp.saveServer": "サーバーを保存", + "mcp.saving": "保存中...", + "mcp.remove": "削除", + "mcp.disabled": "無効", + "model.auxTask.vision": "画像認識", + "model.auxTask.visionHint": "画像解析", + "model.auxTask.web_extract": "Web抽出", + "model.auxTask.web_extractHint": "ページ要約", + "model.auxTask.compression": "圧縮", + "model.auxTask.compressionHint": "コンテキスト圧縮", + "model.auxTask.session_search": "セッション検索", + "model.auxTask.session_searchHint": "検索クエリ", + "model.auxTask.skills_hub": "スキルハブ", + "model.auxTask.skills_hubHint": "スキル検索", + "model.auxTask.approval": "承認", + "model.auxTask.approvalHint": "スマート自動承認", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "MCP ツールルーティング", + "model.auxTask.title_generation": "タイトル生成", + "model.auxTask.title_generationHint": "セッションタイトル", + "model.auxTask.curator": "キュレーター", + "model.auxTask.curatorHint": "スキル使用レビュー", + "model.mainModel": "メインモデル", + "model.mainDesc": "新しいセッションに適用されます。コンポーザーのモデルピッカーでアクティブなチャットを切り替えられます。", + "model.providerPlaceholder": "プロバイダー", + "model.modelPlaceholder": "モデル", + "model.apply": "適用", + "model.applying": "適用中…", + "model.auxiliaryModels": "補助モデル", + "model.auxiliaryDesc": "ヘルパータスクはデフォルトでメインモデルで実行されます。任意のタスクに専用モデルを割り当てて上書きできます。", + "model.resetAllToMain": "すべてメインにリセット", + "model.setToMain": "メインに設定", + "model.change": "変更", + "model.cancel": "キャンセル", + "model.autoUseMain": "自動 · メインモデルを使用", + "model.providerDefault": "(プロバイダーのデフォルト)", + "model.loading": "モデル設定を読み込み中…", + "updates.checking": "アップデートを確認中…", + "updates.available": "アップデートがあります", + "updates.downloading": "ダウンロード中…", + "updates.installing": "インストール中…", + "updates.restart": "再起動して更新", + "errors.generic": "問題が発生しました。", + "errors.notFound": "ページが見つかりません。", + "errors.noPermission": "これにアクセスする権限がありません。", + "tool.toolCall": "ツール呼び出し", + "tool.result": "結果", + "tool.error": "エラー", + "tool.timeout": "タイムアウト", + "tool.cancelled": "キャンセルされました", + "tool.running": "実行中", + "tool.recovered": "回復済み", + "tool.done": "完了", + "tool.output": "ツール出力", + "tool.searchResults": "検索結果", + "tool.rawResponse": "生のレスポンス", + "tool.stdout": "標準出力", + "tool.stderr": "標準エラー出力", + "tool.copyActivity": "アクティビティをコピー", + "composer.startingHermes": "Hermes を起動中...", + "composer.sendFollowUp": "フォローアップを送信", + "composer.message": "メッセージ", + "composer.editingQueued": "キュー内のターンをコンポーザーで編集中", + "composer.attach": "添付", + "composer.files": "ファイル…", + "composer.folder": "フォルダ…", + "composer.images": "画像…", + "composer.pasteImage": "画像を貼り付け", + "composer.url": "URL…", + "composer.promptSnippets": "プロンプトスニペット", + "composer.promptSnippetsDesc": "コンポーザーにドロップするスタータープロンプトを選択します。", + "composer.voiceStart": "音声会話を開始", + "composer.queue": "メッセージをキューに入れる", + "composer.speaking": "発話中", + "composer.transcribing": "文字起こし中", + "composer.muted": "ミュート中", + "composer.listening": "リスニング中", + "composer.unmuteMic": "マイクのミュートを解除", + "composer.muteMic": "マイクをミュート", + "composer.stopListening": "リスニングを停止して送信", + "composer.endVoice": "音声会話を終了", + "composer.end": "終了", + "composer.stopDictation": "ディクテーションを停止", + "composer.transcribingDictation": "ディクテーションを文字起こし中", + "composer.voiceDictation": "音声ディクテーション", + "sessions.new": "新規セッション", + "sessions.running": "セッション実行中", + "sessions.actions": "セッション操作", + "sessions.reorder": "並べ替え", + "sessions.pin": "ピン留め", + "sessions.unpin": "ピン留め解除", + "sessions.copyId": "ID をコピー", + "sessions.rename": "名前を変更", + "sessions.archive": "アーカイブ", + "sessions.renameDialog": "セッション名の変更", + "sessions.renameDesc": "このチャットにわかりやすいタイトルを付けてください。空白にするとクリアされます。", + "sessions.untitled": "無題のセッション", + "sessions.renamed": "名前を変更しました", + "sessions.renameFailed": "名前の変更に失敗しました", + "sessions.pinned": "ピン留め済み", + "sessions.results": "結果", + "sessions.allPinned": "ここにあるものはすべてピン留めされています。チャットのピン留めを解除すると最近のチャットに表示されます。", + "sessions.pinHint": "Shift クリックでチャットをピン留め · ドラッグで並べ替え", + "sessions.loadMore": "さらに読み込む", + "sessions.noWorkspace": "ワークスペースなし", + "sessions.ungroup": "セッションを単一リストで表示", + "sessions.groupByWorkspace": "ワークスペースでグループ化", + "skills.tools": "スキル & ツール", + "artifacts": "アーティファクト", + "common.clearSearch": "検索をクリア", + "common.copy": "コピー", + "common.refresh": "更新", + "common.moreActions": "その他の操作", + "common.tryAgain": "再試行", + "chat.loadingSession": "セッションを読み込み中", + "chat.loadingResponse": "Hermes が応答を読み込み中", + "chat.branchInNewChat": "新しいチャットで分岐", + "chat.readAloud": "読み上げる", + "chat.preparingAudio": "音声を準備中...", + "chat.stopReading": "読み上げを停止", + "chat.editMessage": "メッセージを編集", + "chat.editableCheckpoint": "編集可能なチェックポイント", + "chat.restoreCheckpoint": "チェックポイントを復元", + "chat.goForward": "進む", + "chat.restorePrevCheckpoint": "前のチェックポイントを復元", + "chat.restoreNextCheckpoint": "次のチェックポイントを復元", + "models.title": "モデル", + "models.search": "モデルを検索", + "models.addProvider": "プロバイダーを追加…", + "errors.somethingBroke": "インターフェースで問題が発生しました", + "errors.viewCrashedDesc": "ビューで予期しないエラーが発生しました。チャットと設定は安全です — 再試行するか、ウィンドウを再読み込みしてください。", + "errors.noProviders": "認証済みのプロバイダーがありません。", + "onboarding.setupTitle": "Hermes Agent のセットアップを始めましょう", + "onboarding.setupDesc": "モデルプロバイダーを接続してチャットを開始します。ほとんどのオプションはワンクリックで完了します。", + "onboarding.preparing": "Hermes を起動中…", + "onboarding.installing": "Hermes のインストールを完了中です。初回起動時は通常1分以内で完了します。", + "onboarding.lookingUp": "プロバイダーを検索中...", + "onboarding.otherProviders": "その他のプロバイダー", + "onboarding.collapse": "折りたたむ", + "onboarding.iHaveKey": "API キーを持っています", + "onboarding.recommended": "推奨", + "onboarding.connected": "接続済み", + "onboarding.backToSignIn": "サインインに戻る", + "onboarding.getKey": "キーを取得", + "onboarding.pasteKey": "API キーを貼り付け", + "onboarding.connect": "接続", + "onboarding.connecting": "接続中", + "onboarding.copyCode": "コピー", + "onboarding.startSignIn": "サインインを開始: ", + "onboarding.verifyingCode": "コードを確認中: ", + "onboarding.pickingModel": "接続されました。デフォルトモデルを選択中...", + "onboarding.signInFailed": "サインインに失敗しました。再試行してください。", + "onboarding.pickDifferent": "別のプロバイダーを選択", + "onboarding.signInTitle": "サインイン: ", + "onboarding.step1": "ブラウザで ", + "onboarding.step1End": " を開きました。", + "onboarding.step2": "そこで Hermes を承認してください。", + "onboarding.step3": "認証コードをコピーして、下に貼り付けてください。", + "onboarding.pasteCode": "認証コードを貼り付け", + "onboarding.reopenAuth": "認証ページを再度開く", + "onboarding.cancel": "キャンセル", + "onboarding.browserDesc": "ブラウザで ", + "onboarding.browserDescEnd": " を開きました。そこで Hermes を承認すると自動的に接続されます — コピー&ペーストは不要です。", + "onboarding.waitingAuth": "承認を待っています...", + "onboarding.reopenSignIn": "サインインページを再度開く", + "onboarding.externalDesc": "は独自の CLI でサインインします。ターミナルで以下のコマンドを実行し、「サインインしました」を選択してください:", + "onboarding.iSignedIn": "サインインしました", + "onboarding.enterCode": "ブラウザで ", + "onboarding.enterCodeEnd": " を開きました。そこにこのコードを入力してください:", + "onboarding.reopenVerification": "確認ページを再度開く", + "onboarding.defaultModel": "デフォルトモデル", + "onboarding.freeTier": "無料枠", + "onboarding.pro": "プロ", + "onboarding.change": "変更", + "onboarding.startChatting": "チャットを開始", + "onboarding.docs": "ドキュメント", + "onboarding.close": "閉じる", + "onboarding.savingError": "認証情報を保存できませんでした。", + "install.title": "Hermes には一度だけのインストールが必要です", + "install.desc": "自動初回起動インストールは ", + "install.descEnd": " ではまだ利用できません。ターミナルを開いて下のコマンドを実行し、このアプリを再起動してください。次回以降の起動ではこの手順はスキップされます。", + "install.installCommand": "インストールコマンド", + "install.copyCommand": "コマンドをコピー", + "install.viewDocs": "インストールドキュメントを見る", + "install.willInstallTo": "インストール先: ", + "install.iRanIt": "実行しました — 再試行", + "install.failed": "インストールに失敗しました", + "install.settingUp": "Hermes Agent をセットアップ中", + "install.finishingUp": "仕上げ中", + "install.failedDesc": "インストール手順のいずれかが失敗しました。Windows では、別の Hermes CLI またはデスクトップインスタンスが実行中の場合に発生することがあります。実行中の Hermes インスタンスを停止してから再試行してください。詳細は下記またはデスクトップログで完全な記録を確認してください。", + "install.setupDesc": "これは一度だけのセットアップです。Hermes インストーラーが依存関係をダウンロードし、マシンを設定しています。次回以降の起動ではこの手順はスキップされます。", + "install.fetchingManifest": "インストーラーマニフェストを取得中...", + "install.error": "エラー", + "install.showOutput": "インストーラー出力を表示", + "install.hideOutput": "インストーラー出力を非表示", + "install.noOutput": "まだ出力はありません。", + "install.cancelInstall": "インストールをキャンセル", + "install.cancelling": "キャンセル中...", + "install.copyOutput": "出力をコピー", + "install.copied": "コピーしました!", + "install.reloadRetry": "再読み込みして再試行", + "install.saveLogs": "完全な記録を保存しました: ", + "install.stepsComplete": "ステップ完了", + "install.nowLabel": "今", + "chat.composerTip": "ヒント: @ を入力するとファイルをインラインで参照できます。", + "composer.addContext": "コンテキストを追加", + "sessions.loadStep": "読み込み", + "sessions.moreLabel": "さらに", + "chat.reconnecting": "Hermes に再接続中…", + "appearance.toolCallDisplay": "ツール呼び出し表示", + "appearance.toolCallDisplayDesc": "Product は生のツールペイロードを非表示にし、Technical は完全な入出力を表示します。", + "appearance.toolViewProduct": "プロダクト", + "appearance.toolViewTechnical": "テクニカル", + "appearance.toolViewProductDesc": "簡潔なサマリーで人間にわかりやすいツールアクティビティ。", + "appearance.toolViewTechnicalDesc": "生のツール引数/結果と低レベルの詳細を含めます。", + "messaging.recommended": "推奨", + "messaging.recommendedTelegram": "推奨。@userinfobot から取得したカンマ区切りの数値 ID。未設定の場合、誰でもボットに DM できます。", + "messaging.recommendedDiscord": "推奨。カンマ区切りの Discord ユーザー ID。", + "messaging.recommendedSlack": "推奨。カンマ区切りの Slack ユーザー ID。", + "messaging.recommendedMattermost": "推奨。カンマ区切りの Mattermost ユーザー ID。", + "messaging.recommendedMatrix": "推奨。@user:server 形式のカンマ区切りユーザー ID。", + "messaging.recommendedSignal": "推奨。カンマ区切りの Signal 識別子。", + "messaging.recommendedWhatsApp": "推奨。カンマ区切りの電話番号または WhatsApp ID。", + "previewConsole.resizeLabel": "プレビューコンソールのサイズ変更", + "boot.ipcUnavailable": "デスクトップ IPC ブリッジが利用できません。", + "boot.backendExited": "起動中に Hermes バックグラウンドプロセスが終了しました。", + "boot.backendStoppedTitle": "バックエンドが停止しました", + "boot.backendStoppedMessage": "Hermes バックグラウンドプロセスが終了しました。", + "boot.startingConnection": "デスクトップ接続を開始中", + "boot.connectingGateway": "ライブデスクトップゲートウェイに接続中", + "boot.loadingConfig": "Hermes 設定を読み込み中", + "boot.loadingSessions": "最近のセッションを読み込み中", + "boot.desktopBootFailed": "デスクトップの起動に失敗しました", + "updates.stageGettingReady": "準備中…", + "updates.stageDownloading": "ダウンロード中…", + "updates.stageAlmostThere": "もう少し…", + "updates.stageFinishingUp": "仕上げ中…", + "updates.stageRestarting": "Hermes を再起動中…", + "updates.stageManual": "ターミナルから更新", + "updates.stageError": "更新が一時停止しました", + "updates.updatingHermes": "Hermes を更新中…", + "updates.lookingForUpdates": "アップデートを探しています…", + "updates.couldntCheck": "アップデートを確認できませんでした", + "updates.updateNotAvailable": "アップデートはありません", + "updates.checkConnection": "接続を確認して再試行してください。", + "updates.onLatest": "最新バージョンを使用しています。", + "updates.allSet": "準備完了です", + "updates.newUpdateAvailable": "新しいアップデートがあります", + "updates.readyToInstall": "Hermes の新しいバージョンをインストールする準備ができました。", + "updates.updateNow": "今すぐ更新", + "updates.maybeLater": "後で", + "updates.moreChanges": "+ {count} 件の変更を含む", + "updates.moreChanges_plural": "+ {count} 件の変更を含む", + "updates.updateFromTerminal": "ターミナルから更新", + "updates.terminalDesc": "コマンドラインから Hermes をインストールしたため、更新も同様に行います。以下をターミナルに貼り付けてください:", + "updates.copied": "コピーしました", + "updates.copy": "コピー", + "updates.pickupNewVersion": "次回起動時に新しいバージョンが適用されます。", + "updates.done": "完了", + "updates.updaterDesc": "Hermes アップデーターが独自のウィンドウで処理を引き継ぎ、完了後に Hermes を再起動します。", + "updates.closeToApply": "更新を適用するため Hermes を閉じます。", + "updates.updateDidntFinish": "更新が完了しませんでした", + "updates.nothingLost": "ご安心ください — 何も失われていません。今すぐ再試行できます。", + "updates.notNow": "後で", + "commandCenter.sessionsPanel": "セッションパネル", + "commandCenter.systemPanel": "システムパネル", + "commandCenter.usagePanel": "使用状況パネル", + "commandCenter.navigate": "移動", + "commandCenter.noMatchingResults": "一致する結果が見つかりません。", + "commandCenter.noSessionsYet": "セッションはまだありません。", + "commandCenter.unpinSession": "セッションのピン留めを解除", + "commandCenter.pinSession": "セッションをピン留め", + "commandCenter.exportSession": "セッションをエクスポート", + "commandCenter.deleteSession": "セッションを削除", + "commandCenter.gatewayRunning": "メッセージングゲートウェイ実行中", + "commandCenter.gatewayStopped": "メッセージングゲートウェイ停止中", + "commandCenter.restartMsg": "メッセージングを再起動", + "commandCenter.updateHermes": "Hermes を更新", + "commandCenter.noLogsLoaded": "ログはまだ読み込まれていません。", + "commandCenter.closeLabel": "コマンドセンターを閉じる", + "commandCenter.searchPlaceholder": "セッション、ビュー、アクションを検索", + "commandCenter.statSessions": "セッション", + "commandCenter.statApiCalls": "API 呼び出し", + "commandCenter.statTokens": "トークン入出力", + "commandCenter.statEstCost": "推定コスト", + "commandCenter.actualCost": "実際 {cost}", + "commandCenter.loadingUsage": "使用状況を読み込み中...", + "commandCenter.noUsageDesc": "過去 {count} 日間の使用はありません。", + "commandCenter.retry": "再試行", + "commandCenter.tokenInput": "入力", + "commandCenter.tokenOutput": "出力", + "commandCenter.noDailyActivity": "1日のアクティビティはありません。", + "commandCenter.topModels": "トップモデル", + "commandCenter.topSkills": "トップスキル", + "commandCenter.actionsLabel": "アクション", + "commandCenter.systemRunning": "実行中", + "commandCenter.systemDone": "完了", + "commandCenter.systemFailed": "失敗", + "mcp.nameRequired": "名前が必要です", + "mcp.nameRequiredDesc": "この MCP サーバーに設定キーを付けてください。", + "mcp.invalidJson": "サーバー設定は JSON オブジェクトである必要があります", + "mcp.invalidJsonDesc": "無効な MCP JSON", + "mcp.saved": "MCP サーバーを保存しました", + "mcp.savedDesc": "{name} は MCP 再読み込み後に適用されます。", + "mcp.saveFailed": "保存に失敗しました", + "mcp.removeFailed": "削除に失敗しました", + "mcp.gatewayUnavailable": "ゲートウェイが利用できません", + "mcp.gatewayUnavailableDesc": "MCP を再読み込みする前にゲートウェイを再接続してください。", + "mcp.reloadedTitle": "MCP ツールを再読み込みしました", + "mcp.reloadedDesc": "新しいツールスキーマは新しいターンに適用されます。", + "mcp.reloadFailed": "MCP の再読み込みに失敗しました", + "urlDialog.title": "URL を添付", + "urlDialog.description": "Hermes がページを取得し、このターンのコンテキストとして含めます。", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "完全な URL を含めてください(例: ", + "urlDialog.attach": "添付", + "model.options": "オプション", + "model.thinking": "思考", + "model.fast": "高速", + "model.effort": "努力レベル", + "model.noOptions": "このモデルにはオプションがありません", + "model.optionUpdateFailed": "モデルオプションの更新に失敗しました", + "model.fastModeUpdateFailed": "高速モードの更新に失敗しました", + "model.effortMinimal": "最小", + "model.effortLow": "低", + "model.effortMedium": "中", + "model.effortHigh": "高", + "model.effortMax": "最大", + "gateway.connected": "接続済み", + "gateway.connecting": "接続中", + "gateway.disconnected": "切断", + "gateway.inferenceReady": "推論準備完了", + "gateway.inferenceNotReady": "推論準備未完了", + "gateway.checkingInference": "推論を確認中", + "gateway.openSystemPanel": "システムパネルを開く", + "gateway.connectionLabel": "接続:", + "gateway.recentActivity": "最近のアクティビティ", + "gateway.viewAllLogs": "すべてのログを表示 →", + "gateway.messagingPlatforms": "メッセージングプラットフォーム", + "titlebar.hideSidebar": "サイドバーを隠す", + "titlebar.showSidebar": "サイドバーを表示", + "titlebar.search": "検索", + "titlebar.searchTitle": "セッション、ビュー、アクションを検索", + "titlebar.hideRightSidebar": "右サイドバーを隠す", + "titlebar.showRightSidebar": "右サイドバーを表示", + "titlebar.unmuteHaptics": "触覚フィードバックをオン", + "titlebar.muteHaptics": "触覚フィードバックをオフ", + "titlebar.openSettings": "設定を開く", + "titlebar.profiles": "プロファイル", + "titlebar.profilesDesc": "別々のペルソナ、設定、スキル、SOUL.md のための高度な Hermes 環境。", + "titlebar.manageProfiles": "プロファイルを管理", + "pagination.ariaLabel": "ページネーション", + "pagination.prevAria": "前のページへ", + "pagination.prev": "前へ", + "pagination.nextAria": "次のページへ", + "pagination.next": "次へ", + "boot.couldNotStart": "Hermes を起動できませんでした", + "boot.recoveryDesc": "バックグラウンドゲートウェイが起動しませんでした。以下の復旧手順のいずれかをお試しください — チャットや設定は削除されません。", + "boot.retry": "再試行", + "boot.repairInstall": "インストールを修復", + "boot.useLocalGateway": "ローカルゲートウェイを使用", + "boot.openLogs": "ログを開く", + "boot.repairHint": "修復はインストーラーを再実行し、新しいマシンでは数分かかることがあります。", + "boot.showLogs": "最近のログを表示", + "boot.hideLogs": "最近のログを非表示", + "bootstrap.pending": "保留中", + "bootstrap.running": "インストール中", + "bootstrap.done": "完了", + "bootstrap.skipped": "スキップ", + "bootstrap.failed": "失敗", + "model.switch": "モデルを切り替え", + "model.unknown": "(不明)", + "model.filterPlaceholder": "プロバイダーとモデルを絞り込み...", + "model.persistGlobal": "全体に保存", + "model.persistGlobalSession": "全体に保存(しない場合はこのセッションのみ)", + "model.couldNotLoad": "モデルを読み込めませんでした", + "model.proLockedDesc": "Pro モデルには有料の Nous サブスクリプションが必要です。", + "model.priceTooltip": "100万トークンあたりの入力/出力価格", + "model.freePrice": "無料", + "model.currentLabel": "現在:", + "model.addProviderBtn": "プロバイダーを追加", + "sidebar.sheetTitle": "サイドバー", + "sidebar.sheetDesc": "モバイルサイドバーを表示します。", + "sidebar.toggle": "サイドバーを切り替え", + "clarify.hermesIsAsking": "Hermes が質問しています", + "clarify.loadingQuestion": "質問を読み込み中…", + "clarify.otherTypeAnswer": "その他(回答を入力)", + "clarify.placeholderAnswer": "回答を入力…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter で送信", + "clarify.back": "戻る", + "clarify.skip": "スキップ", + "clarify.couldNotSend": "確認応答を送信できませんでした", + "clarify.pickLabel": "1~{n} で選択", + "tool.recoveredAfter": "1回の失敗ステップ後に回復", + "tool.recoveredAfterN": "{count} 回の失敗ステップ後に回復", + "tool.oneStepFailed": "1ステップ失敗", + "tool.nStepsFailed": "{count} ステップ失敗", + "intro.fallback1h": "今日は何を進めましょう?", + "intro.fallback1b": "バグ、ブランチ、計画、または大まかなアイデアを送ってください。リポジトリを確認して、次の具体的なステップに変換します。", + "intro.fallback2h": "何をお考えですか?", + "intro.fallback2b": "コード、質問、または行き詰まった部分をお持ちください。変更を加える前に状況を把握します。", + "intro.fallback3h": "Hermes に何を見てほしいですか?", + "intro.fallback3b": "タスク、失敗したパス、または途中の計画を送ってください。アクションに変えるお手伝いをします。", + "intro.fallback4h": "どこから始めましょう?", + "intro.fallback4b": "問題、目標、またはファイルをお持ちください。まず確認し、次のステップを具体的にします。", + "intro.fallback5h": "何に注意が必要ですか?", + "intro.fallback5b": "お持ちのコンテキストを送ってください。計画や修正に整理するお手伝いをします。", + "intro.personality.heading1": "{label} モードがオンです。何に取り組みましょう?", + "intro.personality.body1": "タスク、ファイル、または大まかなアイデアを送ってください。設定されたボイスを使用し、このリポジトリに基づいて作業します。", + "intro.personality.heading2": "{label} Hermes に何を見せる必要がありますか?", + "intro.personality.body2": "コンテキストまたは行き詰まった部分をお持ちください。設定されたペルソナに適応します。", + "intro.personality.heading3": "{label} モードの準備ができました。", + "intro.personality.body3": "問題、ファイル、またはアイデアを送ってください。設定されたペルソナに従います。", + "intro.personality.heading4": "{label} Hermes は何に取り組むべきですか?", + "intro.personality.body4": "タスクをここにドロップしてください。リポジトリに基づいて作業します。", + "intro.personality.heading5": "どこから始めましょう?", + "intro.personality.body5": "コンテキストを教えてください。{label} モードで回答します。", + "intro.brand": "HERMES AGENT", + "install.line": "行", + "install.lines": "行", + "artifacts.noArtifactsFound": "アーティファクトが見つかりません", + "previewConsole.noMessages": "コンソールメッセージはまだありません。", + "agents.spawnTree": "スポーンツリー", + "agents.liveSubagentActivity": "現在のターンのライブサブエージェントアクティビティ。", + "agents.noLiveSubagents": "ライブサブエージェントはありません", + "agents.files": "ファイル", + "profiles.noProfilesYet": "プロファイルはまだありません。", + "profiles.selectProfile": "プロファイルを選択して詳細を表示してください。", + "profiles.deleteProfile": "プロファイルを削除しますか?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "未保存の変更", + "profiles.newProfile": "新規プロファイル", + "profiles.cloneFromDefault": "デフォルトから複製", + "profiles.renameProfile": "プロファイル名を変更", + "messaging.gatewayStopped": "メッセージングゲートウェイが停止しています", + "messaging.getCredentials": "認証情報を取得", + "messaging.required": "必須", + "messaging.unsavedChanges": "未保存の変更", + "messaging.saved": "保存済み", + "cron.deleteCronJob": "Cron ジョブを削除しますか?", + "cron.optional": "任意", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "ゲートウェイ", + "gateway.inferenceStatus": "ゲートウェイ推論ステータス", + "agents.label": "エージェント", + "agents.open": "エージェントを開く", + "agents.close": "エージェントを閉じる", + "agents.subagent": "サブエージェント", + "agents.subagents": "サブエージェント", + "agents.failed": "失敗", + "agents.running": "実行中", + "cron.label": "Cron", + "cron.open": "Cron ジョブを開く", + "commandCenter.open": "コマンドセンターを開く", + "commandCenter.close": "コマンドセンターを閉じる", + "mcp.giveConfigKey": "この MCP サーバーに設定キーを付けてください。", + "mcp.reconnectGateway": "MCP を再読み込みする前にゲートウェイを再接続してください。", + "mcp.newSchemas": "新しいツールスキーマは新しいターンに適用されます。", + "mcp.loadingServers": "MCP サーバーを読み込み中...", + "mcp.serverName": "名前", + "mcp.serversTitle": "MCP サーバー", + "mcp.noServersTitle": "MCP サーバーはありません", + "sessions.nothingArchivedTitle": "アーカイブはありません", + "sessions.deletePermanentlyTitle": "完全に削除", + "sessions.defaultProjectDirTitle": "デフォルトのプロジェクトディレクトリ", + "sessions.loadingArchived": "アーカイブされたセッションを読み込み中…", + "sessions.restored": "復元しました", + "sessions.projectDirUpdated": "デフォルトのプロジェクトディレクトリを更新しました", + "gateway.enterUrlFirst": "切り替える前にリモート URL とセッショントークンを入力してください", + "gateway.enterUrlFirstTest": "テストする前にリモート URL とセッショントークンを入力してください", + "config.saving": "保存中…", + "keys.openProviderDocs": "プロバイダーのドキュメントを開く", + "config.label.defaultModel": "デフォルトモデル", + "config.label.contextWindow": "コンテキストウィンドウ", + "config.label.fallbackModels": "フォールバックモデル", + "config.label.enabledToolsets": "有効なツールセット", + "config.label.timezone": "タイムゾーン", + "config.label.personality": "ペルソナ", + "config.label.reasoningBlocks": "推論ブロック", + "config.label.maxAgentSteps": "最大エージェントステップ", + "config.label.imageAttachments": "画像添付", + "config.label.workingDirectory": "作業ディレクトリ", + "config.label.executionBackend": "実行バックエンド", + "config.label.commandTimeout": "コマンドタイムアウト", + "config.label.persistentShell": "永続シェル", + "config.label.envPassthrough": "環境変数パススルー", + "config.label.fileReadLimit": "ファイル読み取り制限", + "config.label.terminalOutputLimit": "端末出力制限", + "config.label.filePageLimit": "ファイルページ制限", + "config.label.lineLengthLimit": "行長制限", + "config.label.codeExecutionMode": "コード実行モード", + "config.label.approvalMode": "承認モード", + "config.label.approvalTimeout": "承認タイムアウト", + "config.label.confirmMcpReloads": "MCP 再読み込みを確認", + "config.label.commandAllowlist": "コマンド許可リスト", + "config.label.redactSecrets": "シークレットを秘匿", + "config.label.allowPrivateUrls": "プライベート URL を許可", + "config.label.browserPrivateUrls": "プライベート URL をブラウザで開く", + "config.label.localBrowserForPrivateUrls": "プライベート URL にローカルブラウザを使用", + "config.label.fileCheckpoints": "ファイルチェックポイント", + "config.label.checkpointLimit": "チェックポイント制限", + "config.label.voiceShortcut": "音声ショートカット", + "config.label.maxRecordingLength": "最大録音時間", + "config.label.readResponsesAloud": "応答を読み上げる", + "config.label.speechToText": "音声テキスト変換", + "config.label.speechToTextProvider": "音声テキスト変換プロバイダー", + "config.label.localTranscriptionModel": "ローカル文字起こしモデル", + "config.label.transcriptionLanguage": "文字起こし言語", + "config.label.elevenlabsSttModel": "ElevenLabs STT モデル", + "config.label.elevenlabsLanguage": "ElevenLabs 言語", + "config.label.tagAudioEvents": "音声イベントにタグ付け", + "config.label.speakerDiarization": "話者識別", + "config.label.textToSpeechProvider": "テキスト音声変換プロバイダー", + "config.label.edgeVoice": "Edge 音声", + "config.label.openaiTtsModel": "OpenAI TTS モデル", + "config.label.openaiVoice": "OpenAI 音声", + "config.label.elevenlabsVoice": "ElevenLabs 音声", + "config.label.elevenlabsModel": "ElevenLabs モデル", + "config.label.persistentMemory": "永続メモリ", + "config.label.userProfile": "ユーザープロファイル", + "config.label.memoryBudget": "メモリ予算", + "config.label.profileBudget": "プロファイル予算", + "config.label.memoryProvider": "メモリプロバイダー", + "config.label.contextEngine": "コンテキストエンジン", + "config.label.autoCompression": "自動圧縮", + "config.label.compressionThreshold": "圧縮しきい値", + "config.label.compressionTarget": "圧縮目標", + "config.label.protectedRecentMessages": "保護する最近のメッセージ", + "config.label.apiRetries": "API 再試行", + "config.label.serviceTier": "サービスティア", + "config.label.toolUseEnforcement": "ツール使用強制", + "config.label.subagentModel": "サブエージェントモデル", + "config.label.subagentProvider": "サブエージェントプロバイダー", + "config.label.subagentTurnLimit": "サブエージェントターン制限", + "config.label.parallelSubagents": "並列サブエージェント", + "config.label.subagentTimeout": "サブエージェントタイムアウト", + "config.label.subagentReasoningEffort": "サブエージェント推論努力", + "config.desc.defaultModel": "コンポーザーで別のモデルを選択しない限り、新しいチャットに使用されます。", + "config.desc.contextWindow": "0 のままにすると、選択したモデルの検出されたコンテキストウィンドウが使用されます。", + "config.desc.fallbackModels": "デフォルトモデルが失敗した場合に試行するバックアップの provider:model エントリ。", + "config.desc.personality": "新しいセッションのデフォルトアシスタントスタイル。", + "config.desc.timezone": "Hermes がローカル時刻のコンテキストを必要とする場合に使用されます。空白の場合はシステムのタイムゾーンが使用されます。", + "config.desc.reasoningBlocks": "バックエンドが提供する場合に推論セクションを表示します。", + "config.desc.imageAttachments": "画像添付をモデルに送信する方法を制御します。", + "config.desc.workingDirectory": "ツールと端末作業のデフォルトプロジェクトフォルダ。", + "config.desc.codeExecutionMode": "コード実行を現在のプロジェクトにどの程度厳密にスコープするか。", + "config.desc.persistentShell": "バックエンドがサポートしている場合、コマンド間でシェル状態を保持します。", + "config.desc.envPassthrough": "ツール実行に渡す環境変数。", + "config.desc.fileReadLimit": "Hermes が1回のファイルリクエストで読み取れる最大文字数。", + "config.desc.approvalMode": "明示的な承認が必要なコマンドを Hermes がどのように処理するか。", + "config.desc.approvalTimeout": "承認プロンプトがタイムアウトするまでの待機時間。", + "config.desc.redactSecrets": "可能な場合、検出されたシークレットをモデル可視コンテンツから非表示にします。", + "config.desc.fileCheckpoints": "ファイル編集前にロールバックスナップショットを作成します。", + "config.desc.persistentMemory": "将来のセッションに役立つ永続的なメモリを保存します。", + "config.desc.userProfile": "ユーザー設定のコンパクトなプロファイルを維持します。", + "config.desc.contextEngine": "コンテキスト制限に近い長い会話を管理するための戦略。", + "config.desc.autoCompression": "会話が大きくなったときに古いコンテキストを要約します。", + "config.desc.readResponsesAloud": "アシスタントの応答を自動的に読み上げます。", + "config.desc.speechToText": "ローカルまたはプロバイダーによる音声文字起こしを有効にします。", + "config.desc.elevenlabsLanguage": "オプションの ISO-639-3 言語コード。空白の場合は ElevenLabs が自動検出します。", + "config.desc.maxAgentSteps": "Hermes が実行を停止するまでのツール呼び出しターンの上限。", + "mcp.failedToLoad": "MCP 設定の読み込みに失敗しました", + "mcp.invalidJsonShort": "無効な MCP JSON", + "mcp.serverSaved": "MCP サーバーを保存しました", + "mcp.toolsReloaded": "MCP ツールを再読み込みしました", + "mcp.emptyDesc": "stdio または HTTP サーバーを追加して MCP ツールを公開します。", + "sessions.loadFailed": "アーカイブされたセッションを読み込めませんでした", + "sessions.unarchiveFailed": "アーカイブ解除に失敗しました", + "sessions.deleteFailed": "削除に失敗しました", + "sessions.archiveHint": "チャットをアーカイブしてここに非表示にします。", + "sessions.updateDirFailed": "デフォルトディレクトリを更新できませんでした", + "sessions.clearDirFailed": "デフォルトディレクトリをクリアできませんでした", + "keys.showAdvanced": "詳細を表示", + "keys.loadFailed": "API キーの読み込みに失敗しました", + "keys.credentialSaved": "認証情報を保存しました", + "keys.credentialRemoved": "認証情報を削除しました", + "provider.desc.nousPortal": "Nous Portal ベース URL の上書き", + "provider.desc.openRouter": "OpenRouter API キー(Vision、Web スクレイピングヘルパー、MoA 用)", + "provider.desc.google": "Google AI Studio API キー(GEMINI_API_KEY としても認識)", + "provider.desc.gemini": "有料 Gemini ティア用 GCP プロジェクト ID(無料ティアは自動プロビジョニング)", + "provider.desc.anthropic": "Anthropic API キー", + "provider.desc.deepseek": "カスタム DeepSeek API ベース URL(詳細設定)", + "provider.desc.xai": "xAI ベース URL の上書き", + "provider.desc.huggingface": "Hugging Face Inference Providers ベース URL の上書き", + "provider.desc.kimi": "Kimi / Moonshot China API キー", + "provider.desc.minimax": "MiniMax(中国)ベース URL の上書き", + "provider.desc.minimaxCn": "MiniMax China API キー", + "provider.desc.dashscope": "カスタム DashScope ベース URL(デフォルト: coding-intl OpenAI 互換エンドポイント)", + "provider.desc.glm": "GLM API キー(Z.AI)", + "provider.desc.nvidia": "NVIDIA NIM ベース URL の上書き(例: ローカル NIM 用 http://localhost:8000/v1)", + "provider.desc.opencodeGo": "OpenCode Go API キー", + "provider.desc.opencodeZen": "OpenCode Zen API キー", + "provider.desc.xiaomi": "Xiaomi MiMo ベース URL の上書き(デフォルト: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Kilo Code API キー", + "provider.desc.aiGateway": "AI Gateway API キー(Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "ElevenLabs API キー", + "provider.desc.openai": "OpenAI API キー(プロキシ経由の音声処理用)", + "provider.desc.mistral": "Mistral API キー(STT/TTS 用)", + "provider.desc.groq": "Groq API キー(STT 用)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "セルフホストインスタンス用 Firecrawl API URL(オプション)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Nous Portal ベース URL の上書き", + "provider.desc.openrouter": "OpenRouter API キー(Vision、Web スクレイピングヘルパー、MoA 用)", + "provider.desc.lmstudio": "Z.AI / GLM ベース URL の上書き", + "provider.desc.zai": "Azure Foundry ベース URL(エンドポイント固有の設定は 'hermes model' で設定)", + "provider.desc.stepfun": "StepFun Step Plan ベース URL の上書き", + "provider.desc.arcee": "Arcee AI ベース URL の上書き", + "provider.desc.gmi": "GMI Cloud ベース URL の上書き", + "provider.desc.qwenportal": "Qwen Portal ベース URL の上書き(デフォルト: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "OpenCode Go ベース URL の上書き", + "provider.desc.ollamacloud": "Ollama Cloud ベース URL の上書き(デフォルト: https://ollama.com/v1)", + "provider.desc.awsbedrock": "Bedrock 認証用 AWS 名前付きプロファイル(~/.aws/credentials から)", + "provider.desc.exa": "AI ネイティブ Web 検索・コンテンツ用 Exa API キー", + "provider.desc.parallel": "AI ネイティブ Web 検索・抽出用 Parallel API キー", + "titlebar.language": "言語", + "titlebar.languageDesc": "インターフェースの表示言語を選択してください。", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} \ No newline at end of file diff --git a/apps/desktop/src/locales/ko.json b/apps/desktop/src/locales/ko.json new file mode 100644 index 000000000000..3cf21352614c --- /dev/null +++ b/apps/desktop/src/locales/ko.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "외관", + "appearance.description": "데스크톱 전용 디스플레이 설정입니다. 모드는 밝기를 제어하고, 테마는 악센트 팔레트와 채팅 화면 스타일을 제어합니다.", + "appearance.colorMode": "색상 모드", + "appearance.colorModeDesc": "고정 모드를 선택하거나 시스템 설정을 따르도록 합니다.", + "appearance.theme": "테마", + "appearance.themeDesc": "채팅 화면과 인터페이스 악센트에 사용할 색상 팔레트를 선택하세요.", + "appearance.mode.light": "라이트", + "appearance.mode.lightDesc": "밝은 데스크톱 화면", + "appearance.mode.dark": "다크", + "appearance.mode.darkDesc": "눈부심이 적은 작업 공간", + "appearance.mode.system": "시스템", + "appearance.mode.systemDesc": "OS 설정을 따릅니다", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "글라스 뉴트럴 톤에 Nous 블루 악센트", + "appearance.theme.midnight": "미드나잇", + "appearance.theme.midnightDesc": "깊은 블루-바이올렛과 시원한 악센트", + "appearance.theme.ember": "엠버", + "appearance.theme.emberDesc": "따뜻한 크림슨과 브론즈 - 대장간 분위기", + "appearance.theme.mono": "모노", + "appearance.theme.monoDesc": "깔끔한 그레이스케일 - 미니멀하고 집중도 높은", + "appearance.theme.cyberpunk": "사이버펑크", + "appearance.theme.cyberpunkDesc": "검은 바탕에 네온 그린 - 매트릭스 터미널", + "appearance.theme.slate": "슬레이트", + "appearance.theme.slateDesc": "차분한 슬레이트 블루 - 개발자 집중 테마", + "appearance.language": "언어", + "appearance.languageDesc": "UI 언어를 선택하거나 시스템 설정을 따릅니다.", + "language.system": "시스템 따르기", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "설정", + "settings.appearance": "외관", + "settings.model": "모델", + "settings.gateway": "게이트웨이", + "settings.sessions": "세션", + "settings.tools": "도구 & 스킬", + "settings.section.chat": "채팅", + "settings.section.workspace": "작업 공간", + "settings.section.safety": "안전", + "settings.section.memory": "메모리 & 컨텍스트", + "settings.section.voice": "음성", + "settings.section.advanced": "고급", + "settings.mcp": "MCP 서버", + "settings.config": "설정", + "settings.keys": "API 키", + "settings.about": "정보", + "chat.placeholder": "무엇이든 물어보세요…", + "chat.send": "보내기", + "chat.stop": "중지", + "chat.thinking": "생각 중…", + "chat.noSession": "활성 세션이 없습니다. 새 대화를 시작하세요.", + "commandCenter.title": "커맨드 센터", + "commandCenter.noSessions": "아직 세션이 없습니다.", + "commandCenter.loadingStatus": "상태 로딩 중…", + "commandCenter.recentLogs": "최근 로그", + "commandCenter.dailyTokens": "일일 토큰", + "commandCenter.noActivity": "일일 활동이 없습니다.", + "commandCenter.noModelUsage": "아직 모델 사용 내역이 없습니다.", + "commandCenter.noSkillActivity": "아직 스킬 활동이 없습니다.", + "common.loading": "로딩 중…", + "common.save": "저장", + "common.cancel": "취소", + "common.close": "닫기", + "common.delete": "삭제", + "common.confirm": "확인", + "common.search": "검색…", + "onboarding.welcome": "Hermes에 오신 것을 환영합니다", + "onboarding.getStarted": "제공자와 모델을 선택하여 시작하세요.", + "onboarding.skip": "건너뛰기", + "onboarding.continue": "계속", + "onboarding.finish": "완료", + "file.browser": "파일 브라우저", + "file.noFiles": "아직 파일이 없습니다.", + "terminal.title": "터미널", + "terminal.newTab": "새 탭", + "terminal.closeTab": "탭 닫기", + "skills.title": "스킬", + "skills.search": "스킬 검색…", + "skills.noResults": "스킬을 찾을 수 없습니다.", + "profiles.title": "프로필", + "cron.title": "크론 작업", + "cron.noJobs": "예약된 작업이 없습니다.", + "messaging.title": "메시징", + "about.version": "버전", + "about.checkUpdates": "업데이트 확인", + "about.upToDate": "최신 버전입니다.", + "about.updateAvailable": "업데이트가 있습니다.", + "about.license": "MIT 라이선스", + "keys.title": "API 키", + "keys.noKeys": "설정된 API 키가 없습니다.", + "keys.addKey": "키 추가", + "config.title": "설정", + "config.edit": "설정 편집", + "config.reload": "설정 다시 불러오기", + "gateway.title": "게이트웨이", + "gateway.start": "게이트웨이 시작", + "gateway.stop": "게이트웨이 중지", + "gateway.restart": "게이트웨이 재시작", + "gateway.running": "실행 중", + "gateway.stopped": "중지됨", + "sessions.title": "세션", + "sessions.search": "세션 검색…", + "sessions.noResults": "세션을 찾을 수 없습니다.", + "sessions.export": "내보내기", + "sessions.delete": "세션 삭제", + "mcp.title": "MCP 서버", + "mcp.addServer": "서버 추가", + "mcp.noServers": "설정된 MCP 서버가 없습니다.", + "tools.title": "도구 & 스킬", + "tools.noTools": "사용 가능한 도구가 없습니다.", + "nav.home": "홈", + "nav.chat": "채팅", + "nav.settings": "설정", + "nav.files": "파일", + "nav.terminal": "터미널", + "header.search": "검색 또는 명령어 입력…", + "settings.closeSettings": "설정 닫기", + "settings.archivedChats": "보관된 채팅", + "settings.exportConfig": "설정 내보내기", + "settings.importConfig": "설정 가져오기", + "settings.resetDefaults": "기본값으로 초기화", + "settings.llmProviders": "LLM 제공자", + "settings.searchPlaceholder.about": "Hermes Desktop 정보", + "settings.searchPlaceholder.config": "설정 검색…", + "settings.searchPlaceholder.gateway": "게이트웨이 연결…", + "settings.searchPlaceholder.keys": "API 키 검색…", + "settings.searchPlaceholder.mcp": "MCP 서버 검색…", + "settings.searchPlaceholder.sessions": "보관된 세션 검색…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "버전 정보 없음", + "about.updates": "업데이트", + "about.checkNow": "지금 확인", + "about.checking": "확인 중…", + "about.seeWhatsNew": "새로운 기능 보기", + "about.releaseNotes": "릴리스 노트", + "about.autoUpdates": "자동 업데이트", + "about.autoUpdatesDesc": "Hermes가 백그라운드에서 자동으로 업데이트를 확인하고 준비되면 알려드립니다.", + "about.selfUpdateUnsupported": "이 빌드는 앱 내에서 자체 업데이트할 수 없습니다.", + "about.cannotReachServer": "업데이트 서버에 연결할 수 없습니다.", + "about.installingUpdate": "현재 업데이트를 설치 중입니다.", + "about.updateReady": "새 업데이트가 준비되었습니다 ({count}개 변경사항 포함).", + "about.updateReady_plural": "새 업데이트가 준비되었습니다 ({count}개 변경사항 포함).", + "about.onLatest": "최신 버전을 사용 중입니다.", + "about.tapCheckNow": "업데이트를 확인하려면 \"지금 확인\"을 누르세요.", + "about.lastChecked": "마지막 확인: {time}", + "about.justNow": "방금 전", + "about.never": "확인 안 함", + "about.minAgo": "{count}분 전", + "about.hoursAgo": "{count}시간 전", + "about.daysAgo": "{count}일 전", + "about.buildInfo": "브랜치 {branch} · 커밋 {sha}", + "keys.loading": "API 키 및 자격 증명 로딩 중…", + "keys.docs": "문서", + "keys.openDocs": "제공자 문서 열기", + "keys.hideValue": "값 숨기기", + "keys.revealValue": "값 보기", + "keys.set": "설정됨", + "keys.notSet": "미설정", + "keys.replace": "교체", + "keys.replaceValue": "현재 값 교체", + "keys.enterValue": "값 입력", + "keys.saving": "저장 중", + "keys.save": "저장", + "keys.cancel": "취소", + "keys.clearValue": "값 지우기", + "keys.configured": "{total}개 중 {count}개 설정됨", + "keys.setCount": "{total}개 중 {count}개 설정됨", + "keys.countSet": "{count}개 설정됨", + "keys.countKeys": "{count}개 키", + "keys.otherProviders": "기타 제공자", + "keys.categoryTools": "도구", + "keys.categoryMessaging": "메시징", + "keys.categorySettings": "설정", + "config.notSet": "미설정", + "config.commaSeparated": "쉼표로 구분된 값", + "config.on": "켜기", + "config.off": "끄기", + "config.none": "없음", + "config.emptyOption": "(없음)", + "config.loading": "Hermes 설정 로딩 중…", + "config.noMatching": "일치하는 설정이 없습니다", + "config.noMatchingDesc": "다른 검색어를 시도하거나 다른 섹션을 선택하세요.", + "config.results": "{count}개 결과", + "config.results_plural": "{count}개 결과", + "gateway.loading": "게이트웨이 설정 로딩 중…", + "gateway.unavailable": "게이트웨이 설정을 사용할 수 없습니다", + "gateway.unavailableDesc": "데스크톱 IPC 브릿지가 게이트웨이 설정을 노출하지 않습니다.", + "gateway.connection": "게이트웨이 연결", + "gateway.envOverride": "환경 변수 오버라이드", + "gateway.desc": "Hermes Desktop은 기본적으로 자체 로컬 게이트웨이를 시작합니다. 다른 머신이나 신뢰할 수 있는 프록시 뒤에서 이미 실행 중인 Hermes 백엔드를 이 앱으로 제어하려면 원격 게이트웨이를 사용하세요.", + "gateway.envOverrideTitle": "환경 변수가 이 데스크톱 세션을 제어하고 있습니다.", + "gateway.envOverrideDesc": "아래 저장된 설정을 사용하려면 {urlVar}와 {tokenVar}를 해제하세요.", + "gateway.localTitle": "로컬 게이트웨이", + "gateway.localDesc": "localhost에 비공개 Hermes 백엔드를 시작합니다. 기본값이며 오프라인에서도 작동합니다.", + "gateway.remoteTitle": "원격 게이트웨이", + "gateway.remoteDesc": "세션 토큰을 사용하여 이 데스크톱 셸을 원격 Hermes 백엔드에 연결합니다.", + "gateway.remoteUrl": "원격 URL", + "gateway.remoteUrlDesc": "원격 대시보드 백엔드의 기본 URL입니다. /hermes와 같은 경로 접두사를 지원합니다.", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "세션 토큰", + "gateway.sessionTokenDesc": "REST 및 WebSocket 접근에 사용되는 대시보드 세션 토큰입니다. 저장된 토큰을 유지하려면 빈 칸으로 두세요.", + "gateway.sessionTokenPlaceholder": "세션 토큰 붙여넣기", + "gateway.existingToken": "기존 토큰 {preview}", + "gateway.tokenSaved": "저장됨", + "gateway.testRemote": "원격 테스트", + "gateway.saveRestart": "다음 재시작에 저장", + "gateway.saveReconnect": "저장 후 재연결", + "gateway.diagnostics": "진단", + "gateway.diagnosticsDesc": "파일 관리자에서 desktop.log를 확인하세요 — 게이트웨이 시작 실패 시 유용합니다.", + "gateway.openLogs": "로그 열기", + "sessions.loading": "로딩 중…", + "sessions.defaultProjectDir": "기본 프로젝트 디렉터리", + "sessions.defaultProjectDirDesc": "다른 폴더를 선택하지 않으면 새 세션이 이 폴더에서 시작됩니다. 설정하지 않으면 홈 디렉터리를 사용합니다.", + "sessions.defaultDir": "기본값: {fallback}.", + "sessions.notSet": "미설정", + "sessions.change": "변경", + "sessions.choose": "선택", + "sessions.clear": "지우기", + "sessions.archivedTitle": "보관된 세션", + "sessions.archivedDesc": "보관된 채팅은 사이드바에서 숨겨지지만 모든 메시지는 유지됩니다. 사이드바에서 채팅을 Ctrl/⌘-클릭하여 보관하세요.", + "sessions.nothingArchived": "보관된 항목 없음", + "sessions.noSearchMatch": "검색과 일치하는 보관된 채팅이 없습니다.", + "sessions.archiveToHide": "채팅을 보관하여 여기에 숨기세요.", + "sessions.unarchive": "보관 해제", + "sessions.deletePermanently": "영구 삭제", + "sessions.messages": "메시지 {count}개", + "mcp.loading": "MCP 서버 로딩 중…", + "mcp.servers": "MCP 서버", + "mcp.configured": "{count}개 설정됨", + "mcp.newServer": "새 서버", + "mcp.reloadMCP": "MCP 다시 불러오기", + "mcp.reloading": "다시 불러오는 중...", + "mcp.noServersDesc": "stdio 또는 HTTP 서버를 추가하여 MCP 도구를 노출하세요.", + "mcp.name": "이름", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "서버 JSON", + "mcp.editServer": "서버 편집", + "mcp.saveServer": "서버 저장", + "mcp.saving": "저장 중...", + "mcp.remove": "제거", + "mcp.disabled": "비활성화됨", + "model.auxTask.vision": "비전", + "model.auxTask.visionHint": "이미지 분석", + "model.auxTask.web_extract": "웹 추출", + "model.auxTask.web_extractHint": "페이지 요약", + "model.auxTask.compression": "압축", + "model.auxTask.compressionHint": "컨텍스트 압축", + "model.auxTask.session_search": "세션 검색", + "model.auxTask.session_searchHint": "리콜 쿼리", + "model.auxTask.skills_hub": "스킬 허브", + "model.auxTask.skills_hubHint": "스킬 검색", + "model.auxTask.approval": "승인", + "model.auxTask.approvalHint": "스마트 자동 승인", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "MCP 도구 라우팅", + "model.auxTask.title_generation": "제목 생성", + "model.auxTask.title_generationHint": "세션 제목", + "model.auxTask.curator": "큐레이터", + "model.auxTask.curatorHint": "스킬 사용 검토", + "model.mainModel": "메인 모델", + "model.mainDesc": "새 세션에 적용됩니다. 컴포저의 모델 선택기를 사용하여 활성 채팅을 즉시 전환할 수 있습니다.", + "model.providerPlaceholder": "제공자", + "model.modelPlaceholder": "모델", + "model.apply": "적용", + "model.applying": "적용 중…", + "model.auxiliaryModels": "보조 모델", + "model.auxiliaryDesc": "도우미 작업은 기본적으로 메인 모델에서 실행됩니다. 특정 작업에 전용 모델을 할당하여 오버라이드할 수 있습니다.", + "model.resetAllToMain": "모두 메인으로 초기화", + "model.setToMain": "메인으로 설정", + "model.change": "변경", + "model.cancel": "취소", + "model.autoUseMain": "자동 · 메인 모델 사용", + "model.providerDefault": "(제공자 기본값)", + "model.loading": "모델 설정 로딩 중…", + "updates.checking": "업데이트 확인 중…", + "updates.available": "업데이트 있음", + "updates.downloading": "다운로드 중…", + "updates.installing": "설치 중…", + "updates.restart": "재시작하여 업데이트", + "errors.generic": "문제가 발생했습니다.", + "errors.notFound": "페이지를 찾을 수 없습니다.", + "errors.noPermission": "이 페이지에 접근할 권한이 없습니다.", + "tool.toolCall": "도구 호출", + "tool.result": "결과", + "tool.error": "오류", + "tool.timeout": "시간 초과", + "tool.cancelled": "취소됨", + "tool.running": "실행 중", + "tool.recovered": "복구됨", + "tool.done": "완료", + "tool.output": "도구 출력", + "tool.searchResults": "검색 결과", + "tool.rawResponse": "원시 응답", + "tool.stdout": "표준 출력", + "tool.stderr": "표준 에러", + "tool.copyActivity": "활동 복사", + "composer.startingHermes": "Hermes 시작 중...", + "composer.sendFollowUp": "후속 메시지 보내기", + "composer.message": "메시지", + "composer.editingQueued": "컴포저에서 대기 중인 턴 편집 중", + "composer.attach": "첨부", + "composer.files": "파일…", + "composer.folder": "폴더…", + "composer.images": "이미지…", + "composer.pasteImage": "이미지 붙여넣기", + "composer.url": "URL…", + "composer.promptSnippets": "프롬프트 스니펫", + "composer.promptSnippetsDesc": "컴포저에 넣을 시작 프롬프트를 선택하세요.", + "composer.voiceStart": "음성 대화 시작", + "composer.queue": "메시지 대기열", + "composer.speaking": "말하는 중", + "composer.transcribing": "텍스트 변환 중", + "composer.muted": "음소거됨", + "composer.listening": "듣는 중", + "composer.unmuteMic": "마이크 음소거 해제", + "composer.muteMic": "마이크 음소거", + "composer.stopListening": "듣기 중지하고 보내기", + "composer.endVoice": "음성 대화 종료", + "composer.end": "종료", + "composer.stopDictation": "받아쓰기 중지", + "composer.transcribingDictation": "받아쓰기 변환 중", + "composer.voiceDictation": "음성 받아쓰기", + "sessions.new": "새 세션", + "sessions.running": "세션 실행 중", + "sessions.actions": "세션 작업", + "sessions.reorder": "순서 변경", + "sessions.pin": "고정", + "sessions.unpin": "고정 해제", + "sessions.copyId": "ID 복사", + "sessions.rename": "이름 변경", + "sessions.archive": "보관", + "sessions.renameDialog": "세션 이름 변경", + "sessions.renameDesc": "이 채팅에 기억하기 쉬운 제목을 지정하세요. 비우면 제목이 지워집니다.", + "sessions.untitled": "제목 없음", + "sessions.renamed": "이름 변경됨", + "sessions.renameFailed": "이름 변경 실패", + "sessions.pinned": "고정됨", + "sessions.results": "결과", + "sessions.allPinned": "여기 모든 항목이 고정되었습니다. 최근 항목에 표시하려면 채팅 고정을 해제하세요.", + "sessions.pinHint": "Shift-클릭으로 채팅 고정 · 드래그로 순서 변경", + "sessions.loadMore": "더 보기", + "sessions.noWorkspace": "작업 공간 없음", + "sessions.ungroup": "세션을 단일 목록으로 표시", + "sessions.groupByWorkspace": "작업 공간별로 세션 그룹화", + "skills.tools": "스킬 & 도구", + "artifacts": "아티팩트", + "common.clearSearch": "검색 지우기", + "common.copy": "복사", + "common.refresh": "새로고침", + "common.moreActions": "더 많은 작업", + "common.tryAgain": "다시 시도", + "chat.loadingSession": "세션 로딩 중", + "chat.loadingResponse": "Hermes가 응답을 불러오는 중", + "chat.branchInNewChat": "새 채팅에서 분기", + "chat.readAloud": "소리내어 읽기", + "chat.preparingAudio": "오디오 준비 중...", + "chat.stopReading": "읽기 중지", + "chat.editMessage": "메시지 편집", + "chat.editableCheckpoint": "편집 가능한 체크포인트", + "chat.restoreCheckpoint": "체크포인트 복원", + "chat.goForward": "앞으로 가기", + "chat.restorePrevCheckpoint": "이전 체크포인트 복원", + "chat.restoreNextCheckpoint": "다음 체크포인트 복원", + "models.title": "모델", + "models.search": "모델 검색", + "models.addProvider": "제공자 추가…", + "errors.somethingBroke": "인터페이스에 문제가 발생했습니다", + "errors.viewCrashedDesc": "뷰에서 예상치 못한 오류가 발생했습니다. 채팅과 설정은 안전합니다 - 다시 시도하거나 창을 새로고침하세요.", + "errors.noProviders": "인증된 제공자가 없습니다.", + "onboarding.setupTitle": "Hermes Agent 설정을 시작합니다", + "onboarding.setupDesc": "모델 제공자를 연결하여 채팅을 시작하세요. 대부분 클릭 한 번으로 가능합니다.", + "onboarding.preparing": "Hermes 시작 중…", + "onboarding.installing": "Hermes 설치를 마무리 중입니다. 처음 실행 시 보통 1분 이내에 완료됩니다.", + "onboarding.lookingUp": "제공자 조회 중...", + "onboarding.otherProviders": "기타 제공자", + "onboarding.collapse": "접기", + "onboarding.iHaveKey": "API 키가 있습니다", + "onboarding.recommended": "추천", + "onboarding.connected": "연결됨", + "onboarding.backToSignIn": "로그인으로 돌아가기", + "onboarding.getKey": "키 받기", + "onboarding.pasteKey": "API 키 붙여넣기", + "onboarding.connect": "연결", + "onboarding.connecting": "연결 중", + "onboarding.copyCode": "복사", + "onboarding.startSignIn": "로그인 시작 중:", + "onboarding.verifyingCode": "코드 확인 중:", + "onboarding.pickingModel": "연결됨. 기본 모델 선택 중...", + "onboarding.signInFailed": "로그인 실패. 다시 시도하세요.", + "onboarding.pickDifferent": "다른 제공자 선택", + "onboarding.signInTitle": "로그인:", + "onboarding.step1": "브라우저에서", + "onboarding.step1End": "페이지를 열었습니다.", + "onboarding.step2": "해당 페이지에서 Hermes를 인증하세요.", + "onboarding.step3": "인증 코드를 복사하여 아래에 붙여넣으세요.", + "onboarding.pasteCode": "인증 코드 붙여넣기", + "onboarding.reopenAuth": "인증 페이지 다시 열기", + "onboarding.cancel": "취소", + "onboarding.browserDesc": "브라우저에서", + "onboarding.browserDescEnd": "페이지를 열었습니다. 해당 페이지에서 Hermes를 인증하면 자동으로 연결됩니다 — 복사하거나 붙여넣을 필요가 없습니다.", + "onboarding.waitingAuth": "인증을 기다리는 중...", + "onboarding.reopenSignIn": "로그인 페이지 다시 열기", + "onboarding.externalDesc": "자체 CLI를 통해 로그인합니다. 터미널에서 이 명령어를 실행한 후 돌아와서 \"로그인 완료\"를 선택하세요:", + "onboarding.iSignedIn": "로그인 완료", + "onboarding.enterCode": "브라우저에서", + "onboarding.enterCodeEnd": "페이지를 열었습니다. 이 코드를 입력하세요:", + "onboarding.reopenVerification": "확인 페이지 다시 열기", + "onboarding.defaultModel": "기본 모델", + "onboarding.freeTier": "무료 등급", + "onboarding.pro": "프로", + "onboarding.change": "변경", + "onboarding.startChatting": "채팅 시작", + "onboarding.docs": "문서", + "onboarding.close": "닫기", + "onboarding.savingError": "자격 증명을 저장할 수 없습니다.", + "install.title": "Hermes 일회성 설치 필요", + "install.desc": "자동 최초 실행 설치는", + "install.descEnd": "에서 아직 지원되지 않습니다. 터미널을 열고 아래 명령어를 실행한 후 이 앱을 다시 실행하세요. 이후 실행에서는 이 단계를 건너뜁니다.", + "install.installCommand": "설치 명령어", + "install.copyCommand": "명령어 복사", + "install.viewDocs": "설치 문서 보기", + "install.willInstallTo": "설치 경로:", + "install.iRanIt": "실행했습니다 -- 다시 시도", + "install.failed": "설치 실패", + "install.settingUp": "Hermes Agent 설정 중", + "install.finishingUp": "마무리 중", + "install.failedDesc": "설치 단계 중 하나가 실패했습니다. Windows에서는 다른 Hermes CLI 또는 데스크톱 인스턴스가 실행 중일 때 발생할 수 있습니다. 실행 중인 모든 Hermes 인스턴스를 중지한 후 다시 시도하세요. 자세한 내용은 아래 세부 정보나 데스크톱 로그를 확인하세요.", + "install.setupDesc": "일회성 설정입니다. Hermes 설치 프로그램이 의존성을 다운로드하고 머신을 구성합니다. 이후 실행에서는 이 단계를 건너뜁니다.", + "install.fetchingManifest": "설치 매니페스트 가져오는 중...", + "install.error": "오류", + "install.showOutput": "설치 출력 보기", + "install.hideOutput": "설치 출력 숨기기", + "install.noOutput": "아직 출력이 없습니다.", + "install.cancelInstall": "설치 취소", + "install.cancelling": "취소 중...", + "install.copyOutput": "출력 복사", + "install.copied": "복사됨!", + "install.reloadRetry": "새로고침 후 다시 시도", + "install.saveLogs": "전체 기록 저장 위치:", + "install.stepsComplete": "단계 완료", + "install.nowLabel": "지금", + "chat.composerTip": "팁: @를 입력하여 파일을 인라인으로 참조하세요.", + "composer.addContext": "컨텍스트 추가", + "sessions.loadStep": "불러오기", + "sessions.moreLabel": "더 보기", + "chat.reconnecting": "Hermes에 재연결 중…", + "appearance.toolCallDisplay": "도구 호출 표시", + "appearance.toolCallDisplayDesc": "Product는 원시 도구 페이로드를 숨기고, Technical은 전체 입출력을 표시합니다.", + "appearance.toolViewProduct": "프로덕트", + "appearance.toolViewTechnical": "테크니컬", + "appearance.toolViewProductDesc": "간결한 요약으로 사람 친화적인 도구 활동을 표시합니다.", + "appearance.toolViewTechnicalDesc": "원시 도구 인자/결과와 저수준 세부 정보를 포함합니다.", + "messaging.recommended": "권장", + "messaging.recommendedTelegram": "권장. @userinfobot에서 얻은 쉼표로 구분된 숫자 ID입니다. 설정하지 않으면 누구나 봇에 DM을 보낼 수 있습니다.", + "messaging.recommendedDiscord": "권장. 쉼표로 구분된 Discord 사용자 ID입니다.", + "messaging.recommendedSlack": "권장. 쉼표로 구분된 Slack 사용자 ID입니다.", + "messaging.recommendedMattermost": "권장. 쉼표로 구분된 Mattermost 사용자 ID입니다.", + "messaging.recommendedMatrix": "권장. @user:server 형식의 쉼표로 구분된 사용자 ID입니다.", + "messaging.recommendedSignal": "권장. 쉼표로 구분된 Signal 식별자입니다.", + "messaging.recommendedWhatsApp": "권장. 쉼표로 구분된 전화번호 또는 WhatsApp ID입니다.", + "previewConsole.resizeLabel": "미리보기 콘솔 크기 조정", + "boot.ipcUnavailable": "데스크톱 IPC 브릿지를 사용할 수 없습니다.", + "boot.backendExited": "시작 중에 Hermes 백그라운드 프로세스가 종료되었습니다.", + "boot.backendStoppedTitle": "백엔드 중지됨", + "boot.backendStoppedMessage": "Hermes 백그라운드 프로세스가 종료되었습니다.", + "boot.startingConnection": "데스크톱 연결 시작 중", + "boot.connectingGateway": "라이브 데스크톱 게이트웨이 연결 중", + "boot.loadingConfig": "Hermes 설정 로딩 중", + "boot.loadingSessions": "최근 세션 로딩 중", + "boot.desktopBootFailed": "데스크톱 부팅 실패", + "updates.stageGettingReady": "준비 중…", + "updates.stageDownloading": "다운로드 중…", + "updates.stageAlmostThere": "거의 완료…", + "updates.stageFinishingUp": "마무리 중…", + "updates.stageRestarting": "Hermes 재시작 중…", + "updates.stageManual": "터미널에서 업데이트", + "updates.stageError": "업데이트 일시 중지", + "updates.updatingHermes": "Hermes 업데이트 중…", + "updates.lookingForUpdates": "업데이트 확인 중…", + "updates.couldntCheck": "업데이트를 확인할 수 없습니다", + "updates.updateNotAvailable": "사용 가능한 업데이트 없음", + "updates.checkConnection": "연결을 확인하고 다시 시도하세요.", + "updates.onLatest": "최신 버전을 실행 중입니다.", + "updates.allSet": "모두 준비 완료", + "updates.newUpdateAvailable": "새 업데이트 있음", + "updates.readyToInstall": "새 버전의 Hermes를 설치할 준비가 되었습니다.", + "updates.updateNow": "지금 업데이트", + "updates.maybeLater": "나중에", + "updates.moreChanges": "+ {count}개 변경사항 추가 포함.", + "updates.moreChanges_plural": "+ {count}개 변경사항 추가 포함.", + "updates.updateFromTerminal": "터미널에서 업데이트", + "updates.terminalDesc": "명령줄에서 Hermes를 설치했으므로 업데이트도 터미널에서 실행됩니다. 터미널에 다음을 붙여넣으세요:", + "updates.copied": "복사됨", + "updates.copy": "복사", + "updates.pickupNewVersion": "다음에 Hermes를 실행할 때 새 버전이 적용됩니다.", + "updates.done": "완료", + "updates.updaterDesc": "Hermes 업데이터가 자체 창에서 실행되고 완료되면 Hermes를 다시 엽니다.", + "updates.closeToApply": "업데이트를 적용하기 위해 Hermes가 종료됩니다.", + "updates.updateDidntFinish": "업데이트가 완료되지 않았습니다", + "updates.nothingLost": "걱정 마세요 — 아무것도 손실되지 않았습니다. 지금 다시 시도할 수 있습니다.", + "updates.notNow": "나중에", + "commandCenter.sessionsPanel": "세션 패널", + "commandCenter.systemPanel": "시스템 패널", + "commandCenter.usagePanel": "사용량 패널", + "commandCenter.navigate": "이동", + "commandCenter.noMatchingResults": "일치하는 결과를 찾을 수 없습니다.", + "commandCenter.noSessionsYet": "아직 세션이 없습니다.", + "commandCenter.unpinSession": "세션 고정 해제", + "commandCenter.pinSession": "세션 고정", + "commandCenter.exportSession": "세션 내보내기", + "commandCenter.deleteSession": "세션 삭제", + "commandCenter.gatewayRunning": "메시징 게이트웨이 실행 중", + "commandCenter.gatewayStopped": "메시징 게이트웨이 중지됨", + "commandCenter.restartMsg": "메시징 재시작", + "commandCenter.updateHermes": "Hermes 업데이트", + "commandCenter.noLogsLoaded": "아직 로그가 로드되지 않았습니다.", + "commandCenter.closeLabel": "커맨드 센터 닫기", + "commandCenter.searchPlaceholder": "세션, 뷰, 작업 검색", + "commandCenter.statSessions": "세션", + "commandCenter.statApiCalls": "API 호출", + "commandCenter.statTokens": "토큰 입/출력", + "commandCenter.statEstCost": "예상 비용", + "commandCenter.actualCost": "실제 비용 {cost}", + "commandCenter.loadingUsage": "사용량 로딩 중...", + "commandCenter.noUsageDesc": "지난 {count}일 동안 사용 내역이 없습니다.", + "commandCenter.retry": "재시도", + "commandCenter.tokenInput": "입력", + "commandCenter.tokenOutput": "출력", + "commandCenter.noDailyActivity": "일일 활동이 없습니다.", + "commandCenter.topModels": "인기 모델", + "commandCenter.topSkills": "인기 스킬", + "commandCenter.actionsLabel": "작업", + "commandCenter.systemRunning": "실행 중", + "commandCenter.systemDone": "완료", + "commandCenter.systemFailed": "실패", + "mcp.nameRequired": "이름 필수", + "mcp.nameRequiredDesc": "이 MCP 서버에 설정 키를 지정하세요.", + "mcp.invalidJson": "서버 설정은 JSON 객체여야 합니다", + "mcp.invalidJsonDesc": "유효하지 않은 MCP JSON", + "mcp.saved": "MCP 서버 저장 완료", + "mcp.savedDesc": "{name}은(는) MCP 다시 불러오기 후 적용됩니다.", + "mcp.saveFailed": "저장 실패", + "mcp.removeFailed": "제거 실패", + "mcp.gatewayUnavailable": "게이트웨이를 사용할 수 없음", + "mcp.gatewayUnavailableDesc": "MCP를 다시 불러오기 전에 게이트웨이를 다시 연결하세요.", + "mcp.reloadedTitle": "MCP 도구 다시 불러오기 완료", + "mcp.reloadedDesc": "새 도구 스키마가 새 턴에 적용됩니다.", + "mcp.reloadFailed": "MCP 다시 불러오기 실패", + "urlDialog.title": "URL 첨부", + "urlDialog.description": "Hermes가 페이지를 가져와서 이 턴의 컨텍스트로 포함합니다.", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "전체 URL을 포함하세요, 예:", + "urlDialog.attach": "첨부", + "model.options": "옵션", + "model.thinking": "생각", + "model.fast": "빠른 모드", + "model.effort": "노력", + "model.noOptions": "이 모델에 대한 옵션 없음", + "model.optionUpdateFailed": "모델 옵션 업데이트 실패", + "model.fastModeUpdateFailed": "빠른 모드 업데이트 실패", + "model.effortMinimal": "최소", + "model.effortLow": "낮음", + "model.effortMedium": "중간", + "model.effortHigh": "높음", + "model.effortMax": "최대", + "gateway.connected": "연결됨", + "gateway.connecting": "연결 중", + "gateway.disconnected": "연결 끊김", + "gateway.inferenceReady": "추론 준비 완료", + "gateway.inferenceNotReady": "추론 준비 안 됨", + "gateway.checkingInference": "추론 확인 중", + "gateway.openSystemPanel": "시스템 패널 열기", + "gateway.connectionLabel": "연결:", + "gateway.recentActivity": "최근 활동", + "gateway.viewAllLogs": "모든 로그 보기 →", + "gateway.messagingPlatforms": "메시징 플랫폼", + "titlebar.hideSidebar": "사이드바 숨기기", + "titlebar.showSidebar": "사이드바 보기", + "titlebar.search": "검색", + "titlebar.searchTitle": "세션, 뷰, 작업 검색", + "titlebar.hideRightSidebar": "오른쪽 사이드바 숨기기", + "titlebar.showRightSidebar": "오른쪽 사이드바 보기", + "titlebar.unmuteHaptics": "햅틱 켜기", + "titlebar.muteHaptics": "햅틱 끄기", + "titlebar.openSettings": "설정 열기", + "titlebar.profiles": "프로필", + "titlebar.profilesDesc": "별도의 페르소나, 설정, 스킬, SOUL.md를 위한 고급 Hermes 환경입니다.", + "titlebar.manageProfiles": "프로필 관리", + "pagination.ariaLabel": "페이지네이션", + "pagination.prevAria": "이전 페이지로 이동", + "pagination.prev": "이전", + "pagination.nextAria": "다음 페이지로 이동", + "pagination.next": "다음", + "boot.couldNotStart": "Hermes를 시작할 수 없습니다", + "boot.recoveryDesc": "백그라운드 게이트웨이가 시작되지 않았습니다. 아래 복구 단계 중 하나를 시도하세요 — 채팅이나 설정이 삭제되지는 않습니다.", + "boot.retry": "재시도", + "boot.repairInstall": "설치 복구", + "boot.useLocalGateway": "로컬 게이트웨이 사용", + "boot.openLogs": "로그 열기", + "boot.repairHint": "복구는 설치 프로그램을 다시 실행하며 새 머신에서는 몇 분 정도 걸릴 수 있습니다.", + "boot.showLogs": "최근 로그 보기", + "boot.hideLogs": "최근 로그 숨기기", + "bootstrap.pending": "대기 중", + "bootstrap.running": "설치 중", + "bootstrap.done": "완료", + "bootstrap.skipped": "건너뜀", + "bootstrap.failed": "실패", + "model.switch": "모델 전환", + "model.unknown": "(알 수 없음)", + "model.filterPlaceholder": "제공자 및 모델 필터...", + "model.persistGlobal": "전역으로 유지", + "model.persistGlobalSession": "전역으로 유지 (그렇지 않으면 이 세션에만 적용)", + "model.couldNotLoad": "모델을 불러올 수 없습니다", + "model.proLockedDesc": "Pro 모델은 유료 Nous 구독이 필요합니다.", + "model.priceTooltip": "백만 토큰당 입력 / 출력 가격", + "model.freePrice": "무료", + "model.currentLabel": "현재:", + "model.addProviderBtn": "제공자 추가", + "sidebar.sheetTitle": "사이드바", + "sidebar.sheetDesc": "모바일 사이드바를 표시합니다.", + "sidebar.toggle": "사이드바 전환", + "clarify.hermesIsAsking": "Hermes 질문", + "clarify.loadingQuestion": "질문 로딩 중…", + "clarify.otherTypeAnswer": "기타 (직접 입력)", + "clarify.placeholderAnswer": "답변 입력…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter로 보내기", + "clarify.back": "뒤로", + "clarify.skip": "건너뛰기", + "clarify.couldNotSend": "명확화 응답을 보낼 수 없습니다", + "clarify.pickLabel": "1–{n} 선택", + "tool.recoveredAfter": "1회 실패 후 복구됨", + "tool.recoveredAfterN": "{count}회 실패 후 복구됨", + "tool.oneStepFailed": "1단계 실패", + "tool.nStepsFailed": "{count}단계 실패", + "intro.fallback1h": "오늘은 무엇을 진행할까요?", + "intro.fallback1b": "버그, 브랜치, 계획 또는 대략적인 아이디어를 보내주세요. 저장소를 검사하고 다음 구체적인 단계로 전환하겠습니다.", + "intro.fallback2h": "무슨 생각을 하고 계신가요?", + "intro.fallback2b": "코드, 질문 또는 막힌 부분을 가져와 주세요. 변경하기 전에 상황을 파악하겠습니다.", + "intro.fallback3h": "Hermes가 무엇을 살펴볼까요?", + "intro.fallback3b": "작업, 실패 경로 또는 미완성 계획을 보내주세요. 실행 가능하게 전환하도록 도와드리겠습니다.", + "intro.fallback4h": "어디서부터 시작할까요?", + "intro.fallback4b": "문제, 목표 또는 파일을 가져와 주세요. 먼저 검사하고 다음 단계를 구체적으로 유지하겠습니다.", + "intro.fallback5h": "어디에 주의가 필요한가요?", + "intro.fallback5b": "가지고 계신 컨텍스트를 보내주세요. 계획이나 수정으로 정리해 드리겠습니다.", + "intro.personality.heading1": "{label} 모드가 켜져 있습니다. 무엇을 작업할까요?", + "intro.personality.body1": "작업, 파일 또는 대략적인 아이디어를 보내주세요. 설정된 음성을 사용하고 작업을 이 저장소에 기반하여 진행하겠습니다.", + "intro.personality.heading2": "{label} Hermes가 무엇을 봐야 할까요?", + "intro.personality.body2": "컨텍스트나 막힌 부분을 가져와 주세요. 설정된 페르소나에 맞춰 조정하겠습니다.", + "intro.personality.heading3": "{label} 모드 준비 완료.", + "intro.personality.body3": "문제, 파일 또는 아이디어를 보내주세요. 설정된 페르소나를 따르겠습니다.", + "intro.personality.heading4": "{label} Hermes가 무엇을 처리할까요?", + "intro.personality.body4": "작업을 여기에 남겨주세요. 저장소에 기반하여 작업을 진행하겠습니다.", + "intro.personality.heading5": "어디서부터 시작할까요?", + "intro.personality.body5": "컨텍스트를 제공해 주시면 {label} 모드로 답변하겠습니다.", + "intro.brand": "HERMES AGENT", + "install.line": "줄", + "install.lines": "줄", + "artifacts.noArtifactsFound": "아티팩트를 찾을 수 없습니다", + "previewConsole.noMessages": "아직 콘솔 메시지가 없습니다.", + "agents.spawnTree": "트리 생성", + "agents.liveSubagentActivity": "현재 턴의 라이브 서브에이전트 활동입니다.", + "agents.noLiveSubagents": "라이브 서브에이전트 없음", + "agents.files": "파일", + "profiles.noProfilesYet": "아직 프로필이 없습니다.", + "profiles.selectProfile": "세부 정보를 보려면 프로필을 선택하세요.", + "profiles.deleteProfile": "프로필을 삭제할까요?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "저장되지 않은 변경사항", + "profiles.newProfile": "새 프로필", + "profiles.cloneFromDefault": "기본값에서 복제", + "profiles.renameProfile": "프로필 이름 변경", + "messaging.gatewayStopped": "메시징 게이트웨이 중지됨", + "messaging.getCredentials": "자격 증명 가져오기", + "messaging.required": "필수", + "messaging.unsavedChanges": "저장되지 않은 변경사항", + "messaging.saved": "저장됨", + "cron.deleteCronJob": "크론 작업을 삭제할까요?", + "cron.optional": "선택 사항", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "게이트웨이", + "gateway.inferenceStatus": "게이트웨이 추론 상태", + "agents.label": "에이전트", + "agents.open": "에이전트 열기", + "agents.close": "에이전트 닫기", + "agents.subagent": "서브에이전트", + "agents.subagents": "서브에이전트", + "agents.failed": "실패", + "agents.running": "실행 중", + "cron.label": "크론", + "cron.open": "크론 작업 열기", + "commandCenter.open": "커맨드 센터 열기", + "commandCenter.close": "커맨드 센터 닫기", + "mcp.giveConfigKey": "이 MCP 서버에 설정 키를 지정하세요.", + "mcp.reconnectGateway": "MCP를 다시 불러오기 전에 게이트웨이를 다시 연결하세요.", + "mcp.newSchemas": "새 도구 스키마가 새 턴에 적용됩니다.", + "mcp.loadingServers": "MCP 서버 로딩 중...", + "mcp.serverName": "이름", + "mcp.serversTitle": "MCP 서버", + "mcp.noServersTitle": "MCP 서버 없음", + "sessions.nothingArchivedTitle": "보관된 항목 없음", + "sessions.deletePermanentlyTitle": "영구 삭제", + "sessions.defaultProjectDirTitle": "기본 프로젝트 디렉터리", + "sessions.loadingArchived": "보관된 세션 로딩 중…", + "sessions.restored": "복원됨", + "sessions.projectDirUpdated": "기본 프로젝트 디렉터리 업데이트됨", + "gateway.enterUrlFirst": "전환하기 전에 원격 URL과 세션 토큰을 입력하세요", + "gateway.enterUrlFirstTest": "테스트하기 전에 원격 URL과 세션 토큰을 입력하세요", + "config.saving": "저장 중…", + "keys.openProviderDocs": "제공자 문서 열기", + "config.label.defaultModel": "기본 모델", + "config.label.contextWindow": "컨텍스트 창", + "config.label.fallbackModels": "대체 모델", + "config.label.enabledToolsets": "활성화된 도구 세트", + "config.label.timezone": "시간대", + "config.label.personality": "페르소나", + "config.label.reasoningBlocks": "추론 블록", + "config.label.maxAgentSteps": "최대 에이전트 단계", + "config.label.imageAttachments": "이미지 첨부", + "config.label.workingDirectory": "작업 디렉터리", + "config.label.executionBackend": "실행 백엔드", + "config.label.commandTimeout": "명령어 시간 초과", + "config.label.persistentShell": "영구 셸", + "config.label.envPassthrough": "환경 변수 전달", + "config.label.fileReadLimit": "파일 읽기 제한", + "config.label.terminalOutputLimit": "터미널 출력 제한", + "config.label.filePageLimit": "파일 페이지 제한", + "config.label.lineLengthLimit": "줄 길이 제한", + "config.label.codeExecutionMode": "코드 실행 모드", + "config.label.approvalMode": "승인 모드", + "config.label.approvalTimeout": "승인 시간 초과", + "config.label.confirmMcpReloads": "MCP 다시 불러오기 확인", + "config.label.commandAllowlist": "명령어 허용 목록", + "config.label.redactSecrets": "비밀 정보 가리기", + "config.label.allowPrivateUrls": "비공개 URL 허용", + "config.label.browserPrivateUrls": "브라우저 비공개 URL", + "config.label.localBrowserForPrivateUrls": "비공개 URL용 로컬 브라우저", + "config.label.fileCheckpoints": "파일 체크포인트", + "config.label.checkpointLimit": "체크포인트 제한", + "config.label.voiceShortcut": "음성 단축키", + "config.label.maxRecordingLength": "최대 녹음 길이", + "config.label.readResponsesAloud": "응답 소리내어 읽기", + "config.label.speechToText": "음성-텍스트 변환", + "config.label.speechToTextProvider": "음성-텍스트 변환 제공자", + "config.label.localTranscriptionModel": "로컬 변환 모델", + "config.label.transcriptionLanguage": "변환 언어", + "config.label.elevenlabsSttModel": "ElevenLabs STT 모델", + "config.label.elevenlabsLanguage": "ElevenLabs 언어", + "config.label.tagAudioEvents": "오디오 이벤트 태그", + "config.label.speakerDiarization": "화자 분리", + "config.label.textToSpeechProvider": "텍스트-음성 변환 제공자", + "config.label.edgeVoice": "Edge 음성", + "config.label.openaiTtsModel": "OpenAI TTS 모델", + "config.label.openaiVoice": "OpenAI 음성", + "config.label.elevenlabsVoice": "ElevenLabs 음성", + "config.label.elevenlabsModel": "ElevenLabs 모델", + "config.label.persistentMemory": "영구 메모리", + "config.label.userProfile": "사용자 프로필", + "config.label.memoryBudget": "메모리 예산", + "config.label.profileBudget": "프로필 예산", + "config.label.memoryProvider": "메모리 제공자", + "config.label.contextEngine": "컨텍스트 엔진", + "config.label.autoCompression": "자동 압축", + "config.label.compressionThreshold": "압축 임계값", + "config.label.compressionTarget": "압축 대상", + "config.label.protectedRecentMessages": "보호된 최근 메시지", + "config.label.apiRetries": "API 재시도", + "config.label.serviceTier": "서비스 등급", + "config.label.toolUseEnforcement": "도구 사용 강제", + "config.label.subagentModel": "서브에이전트 모델", + "config.label.subagentProvider": "서브에이전트 제공자", + "config.label.subagentTurnLimit": "서브에이전트 턴 제한", + "config.label.parallelSubagents": "병렬 서브에이전트", + "config.label.subagentTimeout": "서브에이전트 시간 초과", + "config.label.subagentReasoningEffort": "서브에이전트 추론 노력", + "config.desc.defaultModel": "컴포저에서 다른 모델을 선택하지 않으면 새 채팅에 사용됩니다.", + "config.desc.contextWindow": "선택한 모델의 감지된 컨텍스트 창을 사용하려면 0으로 두세요.", + "config.desc.fallbackModels": "기본 모델이 실패할 경우 시도할 백업 provider:model 항목입니다.", + "config.desc.personality": "새 세션의 기본 어시스턴트 스타일입니다.", + "config.desc.timezone": "Hermes가 현지 시간 컨텍스트가 필요할 때 사용됩니다. 비워두면 시스템 시간대를 사용합니다.", + "config.desc.reasoningBlocks": "백엔드가 추론 섹션을 제공할 때 표시합니다.", + "config.desc.imageAttachments": "이미지 첨부 파일이 모델로 전송되는 방식을 제어합니다.", + "config.desc.workingDirectory": "도구 및 터미널 작업을 위한 기본 프로젝트 폴더입니다.", + "config.desc.codeExecutionMode": "코드 실행이 현재 프로젝트로 얼마나 엄격하게 범위가 지정되는지 설정합니다.", + "config.desc.persistentShell": "백엔드가 지원할 때 명령어 간에 셸 상태를 유지합니다.", + "config.desc.envPassthrough": "도구 실행에 전달할 환경 변수입니다.", + "config.desc.fileReadLimit": "Hermes가 한 번의 파일 요청에서 읽을 수 있는 최대 문자 수입니다.", + "config.desc.approvalMode": "명시적 승인이 필요한 명령어를 Hermes가 처리하는 방식입니다.", + "config.desc.approvalTimeout": "승인 프롬프트가 시간 초과되기까지 기다리는 시간입니다.", + "config.desc.redactSecrets": "가능한 경우 모델에 표시되는 콘텐츠에서 감지된 비밀 정보를 숨깁니다.", + "config.desc.fileCheckpoints": "파일 편집 전에 롤백 스냅샷을 생성합니다.", + "config.desc.persistentMemory": "향후 세션에 도움이 될 수 있는 지속적인 메모리를 저장합니다.", + "config.desc.userProfile": "사용자 선호도의 간결한 프로필을 유지합니다.", + "config.desc.contextEngine": "컨텍스트 제한 근처에서 긴 대화를 관리하기 위한 전략입니다.", + "config.desc.autoCompression": "대화가 길어지면 이전 컨텍스트를 요약합니다.", + "config.desc.readResponsesAloud": "어시스턴트 응답을 자동으로 소리내어 읽습니다.", + "config.desc.speechToText": "로컬 또는 제공자 지원 음성 변환을 활성화합니다.", + "config.desc.elevenlabsLanguage": "선택적 ISO-639-3 언어 코드입니다. 비워두면 ElevenLabs가 자동 감지합니다.", + "config.desc.maxAgentSteps": "Hermes가 실행을 중지하기 전 도구 호출 턴의 상한입니다.", + "mcp.failedToLoad": "MCP 설정 로딩 실패", + "mcp.invalidJsonShort": "유효하지 않은 MCP JSON", + "mcp.serverSaved": "MCP 서버 저장 완료", + "mcp.toolsReloaded": "MCP 도구 다시 불러오기 완료", + "mcp.emptyDesc": "stdio 또는 HTTP 서버를 추가하여 MCP 도구를 노출하세요.", + "sessions.loadFailed": "보관된 세션을 불러올 수 없습니다", + "sessions.unarchiveFailed": "보관 해제 실패", + "sessions.deleteFailed": "삭제 실패", + "sessions.archiveHint": "채팅을 보관하여 여기에 숨기세요.", + "sessions.updateDirFailed": "기본 디렉터리를 업데이트할 수 없습니다", + "sessions.clearDirFailed": "기본 디렉터리를 지울 수 없습니다", + "keys.showAdvanced": "고급 설정 보기", + "keys.loadFailed": "API 키 로딩 실패", + "keys.credentialSaved": "자격 증명 저장 완료", + "keys.credentialRemoved": "자격 증명 제거 완료", + "provider.desc.nousPortal": "Nous Portal 기본 URL 오버라이드", + "provider.desc.openRouter": "OpenRouter API 키 (비전, 웹 스크래핑 도우미, MoA용)", + "provider.desc.google": "Google AI Studio API 키 (GEMINI_API_KEY로도 인식됨)", + "provider.desc.gemini": "유료 Gemini 등급용 GCP 프로젝트 ID (무료 등급은 자동 프로비저닝)", + "provider.desc.anthropic": "Anthropic API 키", + "provider.desc.deepseek": "커스텀 DeepSeek API 기본 URL (고급)", + "provider.desc.xai": "xAI 기본 URL 오버라이드", + "provider.desc.huggingface": "Hugging Face Inference Providers 기본 URL 오버라이드", + "provider.desc.kimi": "Kimi / Moonshot China API 키", + "provider.desc.minimax": "MiniMax (중국) 기본 URL 오버라이드", + "provider.desc.minimaxCn": "MiniMax China API 키", + "provider.desc.dashscope": "커스텀 DashScope 기본 URL (기본값: coding-intl OpenAI 호환 엔드포인트)", + "provider.desc.glm": "GLM API 키 (Z.AI)", + "provider.desc.nvidia": "NVIDIA NIM 기본 URL 오버라이드 (예: 로컬 NIM용 http://localhost:8000/v1)", + "provider.desc.opencodeGo": "OpenCode Go API 키", + "provider.desc.opencodeZen": "OpenCode Zen API 키", + "provider.desc.xiaomi": "Xiaomi MiMo 기본 URL 오버라이드 (기본값: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Kilo Code API 키", + "provider.desc.aiGateway": "AI Gateway API 키 (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "ElevenLabs API 키", + "provider.desc.openai": "OpenAI API 키 (프록시를 통한 음성 처리용)", + "provider.desc.mistral": "Mistral API 키 (STT/TTS용)", + "provider.desc.groq": "Groq API 키 (STT용)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "자체 호스팅 인스턴스용 Firecrawl API URL (선택 사항)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Nous Portal 기본 URL 오버라이드", + "provider.desc.openrouter": "OpenRouter API 키 (비전, 웹 스크래핑 도우미, MoA용)", + "provider.desc.lmstudio": "Z.AI / GLM 기본 URL 오버라이드", + "provider.desc.zai": "Azure Foundry 기본 URL ('hermes model'을 통해 엔드포인트별 설정)", + "provider.desc.stepfun": "StepFun Step Plan 기본 URL 오버라이드", + "provider.desc.arcee": "Arcee AI 기본 URL 오버라이드", + "provider.desc.gmi": "GMI Cloud 기본 URL 오버라이드", + "provider.desc.qwenportal": "Qwen Portal 기본 URL 오버라이드 (기본값: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "OpenCode Go 기본 URL 오버라이드", + "provider.desc.ollamacloud": "Ollama Cloud 기본 URL 오버라이드 (기본값: https://ollama.com/v1)", + "provider.desc.awsbedrock": "Bedrock 인증용 AWS 명명된 프로필 (~/.aws/credentials에서)", + "provider.desc.exa": "AI 네이티브 웹 검색 및 콘텐츠용 Exa API 키", + "provider.desc.parallel": "AI 네이티브 웹 검색 및 추출용 Parallel API 키", + "titlebar.language": "언어", + "titlebar.languageDesc": "인터페이스의 표시 언어를 선택하세요.", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} \ No newline at end of file diff --git a/apps/desktop/src/locales/locales.test.ts b/apps/desktop/src/locales/locales.test.ts new file mode 100644 index 000000000000..8dcc65000bf5 --- /dev/null +++ b/apps/desktop/src/locales/locales.test.ts @@ -0,0 +1,68 @@ +import { describe, expect, it } from 'vitest' + +import ar from './ar.json' +import de from './de.json' +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import hi from './hi.json' +import itLocale from './it.json' +import ja from './ja.json' +import ko from './ko.json' +import ptBR from './pt-BR.json' +import ru from './ru.json' +import th from './th.json' +import vi from './vi.json' +import zhCN from './zh-CN.json' +import zhHant from './zh-Hant.json' + +type LocaleCatalog = Record + +const catalogs: Record = { + ar, + de, + en, + es, + fr, + hi, + it: itLocale, + ja, + ko, + 'pt-BR': ptBR, + ru, + th, + vi, + 'zh-CN': zhCN, + 'zh-Hant': zhHant +} + +function flattenKeys(value: LocaleCatalog, prefix = ''): string[] { + return Object.entries(value).flatMap(([key, child]) => { + const path = prefix ? `${prefix}.${key}` : key + if (child && typeof child === 'object' && !Array.isArray(child)) { + return flattenKeys(child as LocaleCatalog, path) + } + return path + }) +} + +describe('desktop locale catalogs', () => { + it('keep key parity with the English catalog', () => { + const englishKeys = flattenKeys(en).sort() + + for (const [locale, catalog] of Object.entries(catalogs)) { + // ar, hi, it, ru, th, vi have 1 extra self-reference key (language.xx) + // that en.json doesn't have — these are expected and not parity violations + const localeKeys = flattenKeys(catalog).sort() + const extraKeys = localeKeys.filter(k => !englishKeys.includes(k)) + const missingKeys = englishKeys.filter(k => !localeKeys.includes(k)) + + // Only fail on missing keys, not extra self-reference keys + expect(missingKeys, `${locale}: missing keys`).toEqual([]) + + // Log extra keys as info (self-reference language.xx is expected) + const unexpectedExtra = extraKeys.filter(k => !k.startsWith(`language.${locale}`) && k !== `language.${locale}`) + expect(unexpectedExtra, `${locale}: unexpected extra keys`).toEqual([]) + } + }) +}) diff --git a/apps/desktop/src/locales/pt-BR.json b/apps/desktop/src/locales/pt-BR.json new file mode 100644 index 000000000000..bbfaf350aba6 --- /dev/null +++ b/apps/desktop/src/locales/pt-BR.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "Aparência", + "appearance.description": "Preferências de exibição exclusivas do desktop. O modo controla o brilho; o tema controla a paleta de acentos e o estilo da superfície de chat.", + "appearance.colorMode": "Modo de Cor", + "appearance.colorModeDesc": "Escolha um modo fixo ou deixe o Hermes seguir a configuração do seu sistema.", + "appearance.theme": "Tema", + "appearance.themeDesc": "Escolha uma paleta de cores para a superfície de chat e os acentos da interface.", + "appearance.mode.light": "Claro", + "appearance.mode.lightDesc": "Superfícies de desktop brilhantes", + "appearance.mode.dark": "Escuro", + "appearance.mode.darkDesc": "Espaço de trabalho com baixo brilho", + "appearance.mode.system": "Sistema", + "appearance.mode.systemDesc": "Seguir a aparência do sistema", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Neutros vítreos com acentos azul Nous", + "appearance.theme.midnight": "Meia-Noite", + "appearance.theme.midnightDesc": "Azul-violeta profundo com acentos frios", + "appearance.theme.ember": "Brasa", + "appearance.theme.emberDesc": "Carmim e bronze quentes — vibração de forja", + "appearance.theme.mono": "Mono", + "appearance.theme.monoDesc": "Escala de cinza limpa — minimalista e focada", + "appearance.theme.cyberpunk": "Cyberpunk", + "appearance.theme.cyberpunkDesc": "Verde neon no preto — terminal matrix", + "appearance.theme.slate": "Ardósia", + "appearance.theme.slateDesc": "Azul ardósia frio — tema focado para desenvolvedores", + "appearance.language": "Idioma", + "appearance.languageDesc": "Escolha o idioma da interface ou deixe o Hermes seguir a configuração do seu sistema.", + "language.system": "Seguir sistema", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "Configurações", + "settings.appearance": "Aparência", + "settings.model": "Modelo", + "settings.gateway": "Gateway", + "settings.sessions": "Sessões", + "settings.tools": "Ferramentas e Skills", + "settings.section.chat": "Chat", + "settings.section.workspace": "Espaço de Trabalho", + "settings.section.safety": "Segurança", + "settings.section.memory": "Memória e Contexto", + "settings.section.voice": "Voz", + "settings.section.advanced": "Avançado", + "settings.mcp": "Servidores MCP", + "settings.config": "Config", + "settings.keys": "Chaves de API", + "settings.about": "Sobre", + "chat.placeholder": "Pergunte-me qualquer coisa…", + "chat.send": "Enviar", + "chat.stop": "Parar", + "chat.thinking": "Pensando…", + "chat.noSession": "Nenhuma sessão ativa. Inicie uma nova conversa.", + "commandCenter.title": "Central de Comandos", + "commandCenter.noSessions": "Nenhuma sessão ainda.", + "commandCenter.loadingStatus": "Carregando status…", + "commandCenter.recentLogs": "Registros recentes", + "commandCenter.dailyTokens": "Tokens diários", + "commandCenter.noActivity": "Nenhuma atividade diária.", + "commandCenter.noModelUsage": "Nenhum uso de modelo ainda.", + "commandCenter.noSkillActivity": "Nenhuma atividade de skill ainda.", + "common.loading": "Carregando…", + "common.save": "Salvar", + "common.cancel": "Cancelar", + "common.close": "Fechar", + "common.delete": "Excluir", + "common.confirm": "Confirmar", + "common.search": "Pesquisar…", + "onboarding.welcome": "Bem-vindo ao Hermes", + "onboarding.getStarted": "Comece escolhendo um provedor e modelo.", + "onboarding.skip": "Pular", + "onboarding.continue": "Continuar", + "onboarding.finish": "Concluir", + "file.browser": "Navegador de Arquivos", + "file.noFiles": "Nenhum arquivo ainda.", + "terminal.title": "Terminal", + "terminal.newTab": "Nova Guia", + "terminal.closeTab": "Fechar Guia", + "skills.title": "Skills", + "skills.search": "Pesquisar skills…", + "skills.noResults": "Nenhuma skill encontrada.", + "profiles.title": "Perfis", + "cron.title": "Tarefas Agendadas", + "cron.noJobs": "Nenhuma tarefa agendada.", + "messaging.title": "Mensageria", + "about.version": "Versão", + "about.checkUpdates": "Verificar Atualizações", + "about.upToDate": "O Hermes está atualizado.", + "about.updateAvailable": "Uma atualização está disponível.", + "about.license": "Licença MIT", + "keys.title": "Chaves de API", + "keys.noKeys": "Nenhuma chave de API configurada.", + "keys.addKey": "Adicionar Chave", + "config.title": "Configuração", + "config.edit": "Editar Config", + "config.reload": "Recarregar Config", + "gateway.title": "Gateway", + "gateway.start": "Iniciar Gateway", + "gateway.stop": "Parar Gateway", + "gateway.restart": "Reiniciar Gateway", + "gateway.running": "Executando", + "gateway.stopped": "Parado", + "sessions.title": "Sessões", + "sessions.search": "Pesquisar sessões…", + "sessions.noResults": "Nenhuma sessão encontrada.", + "sessions.export": "Exportar", + "sessions.delete": "Excluir Sessão", + "mcp.title": "Servidores MCP", + "mcp.addServer": "Adicionar Servidor", + "mcp.noServers": "Nenhum servidor MCP configurado.", + "tools.title": "Ferramentas e Skills", + "tools.noTools": "Nenhuma ferramenta disponível.", + "nav.home": "Início", + "nav.chat": "Chat", + "nav.settings": "Configurações", + "nav.files": "Arquivos", + "nav.terminal": "Terminal", + "header.search": "Pesquise ou digite um comando…", + "settings.closeSettings": "Fechar configurações", + "settings.archivedChats": "Chats Arquivados", + "settings.exportConfig": "Exportar config", + "settings.importConfig": "Importar config", + "settings.resetDefaults": "Restaurar padrões", + "settings.llmProviders": "Provedores LLM", + "settings.searchPlaceholder.about": "Sobre o Hermes Desktop", + "settings.searchPlaceholder.config": "Pesquisar configurações…", + "settings.searchPlaceholder.gateway": "Conexão gateway…", + "settings.searchPlaceholder.keys": "Pesquisar chaves de API…", + "settings.searchPlaceholder.mcp": "Pesquisar servidores MCP…", + "settings.searchPlaceholder.sessions": "Pesquisar sessões arquivadas…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "Versão indisponível", + "about.updates": "Atualizações", + "about.checkNow": "Verificar agora", + "about.checking": "Verificando…", + "about.seeWhatsNew": "Veja as novidades", + "about.releaseNotes": "Notas de versão", + "about.autoUpdates": "Atualizações automáticas", + "about.autoUpdatesDesc": "O Hermes verifica automaticamente por atualizações em segundo plano e avisa quando uma está pronta.", + "about.selfUpdateUnsupported": "Esta compilação não pode se atualizar de dentro do aplicativo.", + "about.cannotReachServer": "Não foi possível alcançar o servidor de atualizações.", + "about.installingUpdate": "Uma atualização está sendo instalada.", + "about.updateReady": "Uma nova atualização está pronta ({count} alteração incluída).", + "about.updateReady_plural": "Uma nova atualização está pronta ({count} alterações incluídas).", + "about.onLatest": "Você está na versão mais recente.", + "about.tapCheckNow": "Toque em \"Verificar agora\" para procurar atualizações.", + "about.lastChecked": "Última verificação {time}", + "about.justNow": "agora mesmo", + "about.never": "nunca", + "about.minAgo": "{count} min atrás", + "about.hoursAgo": "{count} horas atrás", + "about.daysAgo": "{count} dias atrás", + "about.buildInfo": "Branch {branch} · Commit {sha}", + "keys.loading": "Carregando chaves de API e credenciais…", + "keys.docs": "Docs", + "keys.openDocs": "Abrir documentação do provedor", + "keys.hideValue": "Ocultar valor", + "keys.revealValue": "Revelar valor", + "keys.set": "Definir", + "keys.notSet": "Não definido", + "keys.replace": "Substituir", + "keys.replaceValue": "Substituir valor atual", + "keys.enterValue": "Inserir valor", + "keys.saving": "Salvando", + "keys.save": "Salvar", + "keys.cancel": "Cancelar", + "keys.clearValue": "Limpar valor", + "keys.configured": "{count} de {total} configurados", + "keys.setCount": "{count} de {total} definidos", + "keys.countSet": "{count} definidos", + "keys.countKeys": "{count} chaves", + "keys.otherProviders": "Outros provedores", + "keys.categoryTools": "Ferramentas", + "keys.categoryMessaging": "Mensageria", + "keys.categorySettings": "Configurações", + "config.notSet": "Não definido", + "config.commaSeparated": "valores separados por vírgula", + "config.on": "Ligado", + "config.off": "Desligado", + "config.none": "Nenhum", + "config.emptyOption": "(nenhum)", + "config.loading": "Carregando configuração do Hermes…", + "config.noMatching": "Nenhuma configuração correspondente", + "config.noMatchingDesc": "Tente um termo de pesquisa diferente ou escolha outra seção.", + "config.results": "{count} resultado", + "config.results_plural": "{count} resultados", + "gateway.loading": "Carregando configurações do gateway…", + "gateway.unavailable": "Configurações do gateway indisponíveis", + "gateway.unavailableDesc": "A bridge IPC do desktop não expõe configurações do gateway.", + "gateway.connection": "Conexão Gateway", + "gateway.envOverride": "substituído por env", + "gateway.desc": "O Hermes Desktop inicia seu próprio gateway local por padrão. Use um gateway remoto quando quiser que este aplicativo controle um backend Hermes já em execução em outra máquina ou atrás de um proxy confiável.", + "gateway.envOverrideTitle": "Variáveis de ambiente estão controlando esta sessão desktop.", + "gateway.envOverrideDesc": "Remova {urlVar} e {tokenVar} para usar a configuração salva abaixo.", + "gateway.localTitle": "Gateway local", + "gateway.localDesc": "Iniciar um backend Hermes privado no localhost. Este é o padrão e funciona offline.", + "gateway.remoteTitle": "Gateway remoto", + "gateway.remoteDesc": "Conectar este shell desktop a um backend Hermes remoto usando seu token de sessão.", + "gateway.remoteUrl": "URL Remota", + "gateway.remoteUrlDesc": "URL base para o backend do dashboard remoto. Prefixos de caminho são suportados, por exemplo /hermes.", + "gateway.remoteUrlPlaceholder": "https://gateway.exemplo.com/hermes", + "gateway.sessionToken": "Token de sessão", + "gateway.sessionTokenDesc": "O token de sessão do dashboard usado para acesso REST e WebSocket. Deixe em branco para manter o token salvo.", + "gateway.sessionTokenPlaceholder": "Cole o token de sessão", + "gateway.existingToken": "Token existente {preview}", + "gateway.tokenSaved": "salvo", + "gateway.testRemote": "Testar remoto", + "gateway.saveRestart": "Salvar para próxima reinicialização", + "gateway.saveReconnect": "Salvar e reconectar", + "gateway.diagnostics": "Diagnósticos", + "gateway.diagnosticsDesc": "Revelar desktop.log no gerenciador de arquivos — útil quando o gateway falha ao iniciar.", + "gateway.openLogs": "Abrir logs", + "sessions.loading": "Carregando…", + "sessions.defaultProjectDir": "Diretório de projeto padrão", + "sessions.defaultProjectDirDesc": "Novas sessões iniciam nesta pasta a menos que você escolha outra. Deixe vazio para usar seu diretório home.", + "sessions.defaultDir": "Padrão para {fallback}.", + "sessions.notSet": "Não definido", + "sessions.change": "Alterar", + "sessions.choose": "Escolher", + "sessions.clear": "Limpar", + "sessions.archivedTitle": "Sessões arquivadas", + "sessions.archivedDesc": "Chats arquivados ficam ocultos da barra lateral, mas mantêm todas as mensagens. Ctrl/⌘-clique em um chat na barra lateral para arquivá-lo.", + "sessions.nothingArchived": "Nada arquivado", + "sessions.noSearchMatch": "Nenhum chat arquivado corresponde à sua pesquisa.", + "sessions.archiveToHide": "Arquive um chat para ocultá-lo aqui.", + "sessions.unarchive": "Desarquivar", + "sessions.deletePermanently": "Excluir permanentemente", + "sessions.messages": "{count} mensagens", + "mcp.loading": "Carregando servidores MCP…", + "mcp.servers": "Servidores MCP", + "mcp.configured": "{count} configurados", + "mcp.newServer": "Novo servidor", + "mcp.reloadMCP": "Recarregar MCP", + "mcp.reloading": "Recarregando...", + "mcp.noServersDesc": "Adicione um servidor stdio ou HTTP para expor ferramentas MCP.", + "mcp.name": "Nome", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "JSON do Servidor", + "mcp.editServer": "Editar servidor", + "mcp.saveServer": "Salvar servidor", + "mcp.saving": "Salvando...", + "mcp.remove": "Remover", + "mcp.disabled": "desativado", + "model.auxTask.vision": "Visão", + "model.auxTask.visionHint": "Análise de imagem", + "model.auxTask.web_extract": "Extração web", + "model.auxTask.web_extractHint": "Resumo de página", + "model.auxTask.compression": "Compressão", + "model.auxTask.compressionHint": "Compactação de contexto", + "model.auxTask.session_search": "Pesquisa de sessão", + "model.auxTask.session_searchHint": "Consultas de recall", + "model.auxTask.skills_hub": "Central de skills", + "model.auxTask.skills_hubHint": "Pesquisa de skills", + "model.auxTask.approval": "Aprovação", + "model.auxTask.approvalHint": "Aprovação automática inteligente", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "Roteamento de ferramentas MCP", + "model.auxTask.title_generation": "Geração de título", + "model.auxTask.title_generationHint": "Títulos de sessão", + "model.auxTask.curator": "Curador", + "model.auxTask.curatorHint": "Revisão de uso de skills", + "model.mainModel": "Modelo principal", + "model.mainDesc": "Aplica-se a novas sessões. Use o seletor de modelo no composer para trocar o chat ativo.", + "model.providerPlaceholder": "Provedor", + "model.modelPlaceholder": "Modelo", + "model.apply": "Aplicar", + "model.applying": "Aplicando…", + "model.auxiliaryModels": "Modelos auxiliares", + "model.auxiliaryDesc": "Tarefas auxiliares usam o modelo principal por padrão. Atribua um modelo dedicado a qualquer tarefa para substituir.", + "model.resetAllToMain": "Redefinir todos para principal", + "model.setToMain": "Definir como principal", + "model.change": "Alterar", + "model.cancel": "Cancelar", + "model.autoUseMain": "auto · usar modelo principal", + "model.providerDefault": "(padrão do provedor)", + "model.loading": "Carregando configuração do modelo…", + "updates.checking": "Verificando atualizações…", + "updates.available": "Atualização disponível", + "updates.downloading": "Baixando…", + "updates.installing": "Instalando…", + "updates.restart": "Reiniciar para atualizar", + "errors.generic": "Algo deu errado.", + "errors.notFound": "Página não encontrada.", + "errors.noPermission": "Você não tem permissão para acessar isto.", + "tool.toolCall": "Chamada de Ferramenta", + "tool.result": "Resultado", + "tool.error": "Erro", + "tool.timeout": "Tempo esgotado", + "tool.cancelled": "Cancelado", + "tool.running": "Executando", + "tool.recovered": "Recuperado", + "tool.done": "Concluído", + "tool.output": "Saída da ferramenta", + "tool.searchResults": "Resultados da pesquisa", + "tool.rawResponse": "Resposta bruta", + "tool.stdout": "stdout", + "tool.stderr": "stderr", + "tool.copyActivity": "Copiar atividade", + "composer.startingHermes": "Iniciando Hermes...", + "composer.sendFollowUp": "Enviar continuação", + "composer.message": "Mensagem", + "composer.editingQueued": "Editando turno na fila no composer", + "composer.attach": "Anexar", + "composer.files": "Arquivos…", + "composer.folder": "Pasta…", + "composer.images": "Imagens…", + "composer.pasteImage": "Colar imagem", + "composer.url": "URL…", + "composer.promptSnippets": "Trechos de prompt", + "composer.promptSnippetsDesc": "Escolha um prompt inicial para inserir no composer.", + "composer.voiceStart": "Iniciar conversa por voz", + "composer.queue": "Enfileirar mensagem", + "composer.speaking": "Falando", + "composer.transcribing": "Transcrevendo", + "composer.muted": "Silenciado", + "composer.listening": "Ouvindo", + "composer.unmuteMic": "Ativar microfone", + "composer.muteMic": "Silenciar microfone", + "composer.stopListening": "Parar de ouvir e enviar", + "composer.endVoice": "Encerrar conversa por voz", + "composer.end": "Encerrar", + "composer.stopDictation": "Parar ditado", + "composer.transcribingDictation": "Transcrevendo ditado", + "composer.voiceDictation": "Ditado por voz", + "sessions.new": "Nova sessão", + "sessions.running": "Sessão em execução", + "sessions.actions": "Ações da sessão", + "sessions.reorder": "Reordenar", + "sessions.pin": "Fixar", + "sessions.unpin": "Desafixar", + "sessions.copyId": "Copiar ID", + "sessions.rename": "Renomear", + "sessions.archive": "Arquivar", + "sessions.renameDialog": "Renomear sessão", + "sessions.renameDesc": "Dê a este chat um título memorável. Deixe vazio para limpar.", + "sessions.untitled": "Sessão sem título", + "sessions.renamed": "Renomeado", + "sessions.renameFailed": "Falha ao renomear", + "sessions.pinned": "Fixado", + "sessions.results": "Resultados", + "sessions.allPinned": "Tudo aqui está fixado. Desafixe um chat para mostrá-lo nos recentes.", + "sessions.pinHint": "Shift+clique em um chat para fixar · arraste para reordenar", + "sessions.loadMore": "Carregar mais", + "sessions.noWorkspace": "Sem espaço de trabalho", + "sessions.ungroup": "Mostrar sessões como uma única lista", + "sessions.groupByWorkspace": "Agrupar sessões por espaço de trabalho", + "skills.tools": "Skills e Ferramentas", + "artifacts": "Artefatos", + "common.clearSearch": "Limpar pesquisa", + "common.copy": "Copiar", + "common.refresh": "Atualizar", + "common.moreActions": "Mais ações", + "common.tryAgain": "Tentar novamente", + "chat.loadingSession": "Carregando sessão", + "chat.loadingResponse": "Hermes está carregando uma resposta", + "chat.branchInNewChat": "Ramificar em novo chat", + "chat.readAloud": "Ler em voz alta", + "chat.preparingAudio": "Preparando áudio...", + "chat.stopReading": "Parar leitura", + "chat.editMessage": "Editar mensagem", + "chat.editableCheckpoint": "Ponto de verificação editável", + "chat.restoreCheckpoint": "Restaurar ponto de verificação", + "chat.goForward": "Avançar", + "chat.restorePrevCheckpoint": "Restaurar ponto de verificação anterior", + "chat.restoreNextCheckpoint": "Restaurar próximo ponto de verificação", + "models.title": "Modelos", + "models.search": "Pesquisar modelos", + "models.addProvider": "Adicionar provedor…", + "errors.somethingBroke": "Algo quebrou na interface", + "errors.viewCrashedDesc": "A visão encontrou um erro inesperado. Seus chats e configurações estão seguros - tente novamente ou recarregue a janela.", + "errors.noProviders": "Nenhum provedor autenticado.", + "onboarding.setupTitle": "Vamos configurar seu Hermes Agent", + "onboarding.setupDesc": "Conecte um provedor de modelo para começar a conversar. A maioria das opções leva um clique.", + "onboarding.preparing": "Iniciando Hermes…", + "onboarding.installing": "Hermes está finalizando a instalação. Isso geralmente leva menos de um minuto na primeira execução.", + "onboarding.lookingUp": "Procurando provedores...", + "onboarding.otherProviders": "Outros provedores", + "onboarding.collapse": "Recolher", + "onboarding.iHaveKey": "Tenho uma chave de API", + "onboarding.recommended": "Recomendado", + "onboarding.connected": "Conectado", + "onboarding.backToSignIn": "Voltar ao login", + "onboarding.getKey": "Obter uma chave", + "onboarding.pasteKey": "Colar chave de API", + "onboarding.connect": "Conectar", + "onboarding.connecting": "Conectando", + "onboarding.copyCode": "Copiar", + "onboarding.startSignIn": "Iniciando login para", + "onboarding.verifyingCode": "Verificando seu código com", + "onboarding.pickingModel": "conectado. Escolhendo um modelo padrão...", + "onboarding.signInFailed": "Falha no login. Tente novamente.", + "onboarding.pickDifferent": "Escolher um provedor diferente", + "onboarding.signInTitle": "Entrar com", + "onboarding.step1": "Abrimos", + "onboarding.step1End": "em seu navegador.", + "onboarding.step2": "Autorize o Hermes lá.", + "onboarding.step3": "Copie o código de autorização e cole abaixo.", + "onboarding.pasteCode": "Colar código de autorização", + "onboarding.reopenAuth": "Reabrir página de autorização", + "onboarding.cancel": "Cancelar", + "onboarding.browserDesc": "Abrimos", + "onboarding.browserDescEnd": "em seu navegador. Autorize o Hermes lá e você será conectado automaticamente — nada para copiar ou colar.", + "onboarding.waitingAuth": "Aguardando sua autorização...", + "onboarding.reopenSignIn": "Reabrir página de login", + "onboarding.externalDesc": "faz login através de seu próprio CLI. Execute este comando em um terminal, depois volte e escolha \"Entrei\":", + "onboarding.iSignedIn": "Entrei", + "onboarding.enterCode": "Abrimos", + "onboarding.enterCodeEnd": "em seu navegador. Insira este código lá:", + "onboarding.reopenVerification": "Reabrir página de verificação", + "onboarding.defaultModel": "Modelo padrão", + "onboarding.freeTier": "Gratuito", + "onboarding.pro": "Pro", + "onboarding.change": "Alterar", + "onboarding.startChatting": "Começar a conversar", + "onboarding.docs": "docs", + "onboarding.close": "Fechar", + "onboarding.savingError": "Não foi possível salvar a credencial.", + "install.title": "Hermes precisa de uma instalação única", + "install.desc": "Instalação automatizada na primeira execução não está disponível no", + "install.descEnd": "ainda. Abra o Terminal e execute o comando abaixo, depois reabra este aplicativo. Inicializações subsequentes pularão esta etapa.", + "install.installCommand": "Comando de instalação", + "install.copyCommand": "Copiar comando", + "install.viewDocs": "Ver docs de instalação", + "install.willInstallTo": "Será instalado em", + "install.iRanIt": "Eu executei — tentar novamente", + "install.failed": "Falha na instalação", + "install.settingUp": "Configurando Hermes Agent", + "install.finishingUp": "Finalizando", + "install.failedDesc": "Uma das etapas de instalação falhou. No Windows, isso pode acontecer se outra instância do Hermes CLI ou desktop estiver em execução. Pare qualquer instância do Hermes em execução e tente novamente. Verifique os detalhes abaixo ou o log do desktop para o transcript completo.", + "install.setupDesc": "Esta é uma configuração única. O instalador do Hermes está baixando dependências e configurando sua máquina. Inicializações subsequentes pularão esta etapa.", + "install.fetchingManifest": "Buscando manifesto do instalador...", + "install.error": "Erro", + "install.showOutput": "Mostrar saída do instalador", + "install.hideOutput": "Ocultar saída do instalador", + "install.noOutput": "Nenhuma saída ainda.", + "install.cancelInstall": "Cancelar instalação", + "install.cancelling": "Cancelando...", + "install.copyOutput": "Copiar saída", + "install.copied": "Copiado!", + "install.reloadRetry": "Recarregar e tentar novamente", + "install.saveLogs": "Transcript completo salvo em", + "install.stepsComplete": "etapas concluídas", + "install.nowLabel": "agora", + "chat.composerTip": "Dica: digite @ para referenciar arquivos inline.", + "composer.addContext": "Adicionar contexto", + "sessions.loadStep": "Carregar", + "sessions.moreLabel": "mais", + "chat.reconnecting": "Reconectando ao Hermes…", + "appearance.toolCallDisplay": "Exibição de Chamadas de Ferramenta", + "appearance.toolCallDisplayDesc": "Produto oculta payloads brutos de ferramentas; Técnico mostra entrada/saída completa.", + "appearance.toolViewProduct": "Produto", + "appearance.toolViewTechnical": "Técnico", + "appearance.toolViewProductDesc": "Atividade de ferramenta amigável com resumos concisos.", + "appearance.toolViewTechnicalDesc": "Incluir argumentos/resultados brutos e detalhes de baixo nível.", + "messaging.recommended": "Recomendado", + "messaging.recommendedTelegram": "Recomendado. IDs numéricos separados por vírgula do @userinfobot. Sem isso, qualquer um pode enviar DM para seu bot.", + "messaging.recommendedDiscord": "Recomendado. IDs de usuário Discord separados por vírgula.", + "messaging.recommendedSlack": "Recomendado. IDs de usuário Slack separados por vírgula.", + "messaging.recommendedMattermost": "Recomendado. IDs de usuário Mattermost separados por vírgula.", + "messaging.recommendedMatrix": "Recomendado. IDs de usuário no formato @usuario:servidor separados por vírgula.", + "messaging.recommendedSignal": "Recomendado. Identificadores Signal separados por vírgula.", + "messaging.recommendedWhatsApp": "Recomendado. Números de telefone ou IDs WhatsApp separados por vírgula.", + "previewConsole.resizeLabel": "Redimensionar console de pré-visualização", + "boot.ipcUnavailable": "Bridge IPC do Desktop indisponível.", + "boot.backendExited": "O processo em segundo plano do Hermes saiu durante a inicialização.", + "boot.backendStoppedTitle": "Backend parado", + "boot.backendStoppedMessage": "O processo em segundo plano do Hermes saiu.", + "boot.startingConnection": "Iniciando conexão desktop", + "boot.connectingGateway": "Conectando gateway desktop ativo", + "boot.loadingConfig": "Carregando configurações do Hermes", + "boot.loadingSessions": "Carregando sessões recentes", + "boot.desktopBootFailed": "Falha na inicialização do desktop", + "updates.stageGettingReady": "Preparando…", + "updates.stageDownloading": "Baixando…", + "updates.stageAlmostThere": "Quase lá…", + "updates.stageFinishingUp": "Finalizando…", + "updates.stageRestarting": "Reiniciando Hermes…", + "updates.stageManual": "Atualizar pelo terminal", + "updates.stageError": "Atualização pausada", + "updates.updatingHermes": "Atualizando Hermes…", + "updates.lookingForUpdates": "Procurando atualizações…", + "updates.couldntCheck": "Não foi possível verificar atualizações", + "updates.updateNotAvailable": "Atualização não disponível", + "updates.checkConnection": "Verifique sua conexão e tente novamente.", + "updates.onLatest": "Você está executando a versão mais recente.", + "updates.allSet": "Tudo pronto", + "updates.newUpdateAvailable": "Nova atualização disponível", + "updates.readyToInstall": "Uma nova versão do Hermes está pronta para instalar.", + "updates.updateNow": "Atualizar agora", + "updates.maybeLater": "Talvez depois", + "updates.moreChanges": "+ {count} alteração adicional incluída.", + "updates.moreChanges_plural": "+ {count} alterações adicionais incluídas.", + "updates.updateFromTerminal": "Atualizar pelo terminal", + "updates.terminalDesc": "Você instalou o Hermes pela linha de comando, então as atualizações também funcionam lá. Cole isto no seu terminal:", + "updates.copied": "Copiado", + "updates.copy": "Copiar", + "updates.pickupNewVersion": "O Hermes usará a nova versão na próxima vez que você o iniciar.", + "updates.done": "Concluído", + "updates.updaterDesc": "O atualizador do Hermes assumirá em sua própria janela e reabrirá o Hermes quando terminar.", + "updates.closeToApply": "O Hermes fechará para aplicar a atualização.", + "updates.updateDidntFinish": "A atualização não foi concluída", + "updates.nothingLost": "Sem problemas — nada foi perdido. Você pode tentar novamente agora.", + "updates.notNow": "Agora não", + "commandCenter.sessionsPanel": "Painel de sessões", + "commandCenter.systemPanel": "Painel do sistema", + "commandCenter.usagePanel": "Painel de uso", + "commandCenter.navigate": "Navegar", + "commandCenter.noMatchingResults": "Nenhum resultado correspondente encontrado.", + "commandCenter.noSessionsYet": "Nenhuma sessão ainda.", + "commandCenter.unpinSession": "Desafixar sessão", + "commandCenter.pinSession": "Fixar sessão", + "commandCenter.exportSession": "Exportar sessão", + "commandCenter.deleteSession": "Excluir sessão", + "commandCenter.gatewayRunning": "Gateway de mensageria em execução", + "commandCenter.gatewayStopped": "Gateway de mensageria parado", + "commandCenter.restartMsg": "Reiniciar mensageria", + "commandCenter.updateHermes": "Atualizar Hermes", + "commandCenter.noLogsLoaded": "Nenhum log carregado ainda.", + "commandCenter.closeLabel": "Fechar central de comandos", + "commandCenter.searchPlaceholder": "Pesquisar sessões, visualizações e ações", + "commandCenter.statSessions": "Sessões", + "commandCenter.statApiCalls": "Chamadas de API", + "commandCenter.statTokens": "Tokens in/out", + "commandCenter.statEstCost": "Custo est.", + "commandCenter.actualCost": "real {cost}", + "commandCenter.loadingUsage": "Carregando uso...", + "commandCenter.noUsageDesc": "Nenhum uso nos últimos {count} dias.", + "commandCenter.retry": "Tentar novamente", + "commandCenter.tokenInput": "entrada", + "commandCenter.tokenOutput": "saída", + "commandCenter.noDailyActivity": "Nenhuma atividade diária.", + "commandCenter.topModels": "Principais modelos", + "commandCenter.topSkills": "Principais skills", + "commandCenter.actionsLabel": "ações", + "commandCenter.systemRunning": "executando", + "commandCenter.systemDone": "concluído", + "commandCenter.systemFailed": "falhou", + "mcp.nameRequired": "Nome obrigatório", + "mcp.nameRequiredDesc": "Dê a este servidor MCP uma chave de configuração.", + "mcp.invalidJson": "A configuração do servidor deve ser um objeto JSON", + "mcp.invalidJsonDesc": "JSON MCP inválido", + "mcp.saved": "Servidor MCP salvo", + "mcp.savedDesc": "{name} é aplicado após recarregar MCP.", + "mcp.saveFailed": "Falha ao salvar", + "mcp.removeFailed": "Falha ao remover", + "mcp.gatewayUnavailable": "Gateway indisponível", + "mcp.gatewayUnavailableDesc": "Reconecte o gateway antes de recarregar MCP.", + "mcp.reloadedTitle": "Ferramentas MCP recarregadas", + "mcp.reloadedDesc": "Novos schemas de ferramentas se aplicam a novos turnos.", + "mcp.reloadFailed": "Falha ao recarregar MCP", + "urlDialog.title": "Anexar uma URL", + "urlDialog.description": "Hermes buscará a página e a incluirá como contexto para este turno.", + "urlDialog.placeholder": "https://exemplo.com/post", + "urlDialog.hint": "Inclua a URL completa, ex.", + "urlDialog.attach": "Anexar", + "model.options": "Opções", + "model.thinking": "Pensamento", + "model.fast": "Rápido", + "model.effort": "Esforço", + "model.noOptions": "Nenhuma opção para este modelo", + "model.optionUpdateFailed": "Falha ao atualizar opção do modelo", + "model.fastModeUpdateFailed": "Falha ao atualizar modo rápido", + "model.effortMinimal": "Mínimo", + "model.effortLow": "Baixo", + "model.effortMedium": "Médio", + "model.effortHigh": "Alto", + "model.effortMax": "Máximo", + "gateway.connected": "Conectado", + "gateway.connecting": "Conectando", + "gateway.disconnected": "Desconectado", + "gateway.inferenceReady": "Inferência pronta", + "gateway.inferenceNotReady": "Inferência não pronta", + "gateway.checkingInference": "Verificando inferência", + "gateway.openSystemPanel": "Abrir painel do sistema", + "gateway.connectionLabel": "Conexão:", + "gateway.recentActivity": "Atividade recente", + "gateway.viewAllLogs": "Ver todos os logs →", + "gateway.messagingPlatforms": "Plataformas de mensageria", + "titlebar.hideSidebar": "Ocultar barra lateral", + "titlebar.showSidebar": "Mostrar barra lateral", + "titlebar.search": "Pesquisar", + "titlebar.searchTitle": "Pesquisar sessões, visualizações e ações", + "titlebar.hideRightSidebar": "Ocultar barra lateral direita", + "titlebar.showRightSidebar": "Mostrar barra lateral direita", + "titlebar.unmuteHaptics": "Ativar resposta tátil", + "titlebar.muteHaptics": "Desativar resposta tátil", + "titlebar.openSettings": "Abrir configurações", + "titlebar.profiles": "Perfis", + "titlebar.profilesDesc": "Ambientes Hermes avançados para personas, config, skills e SOUL.md separados.", + "titlebar.manageProfiles": "Gerenciar perfis", + "pagination.ariaLabel": "paginação", + "pagination.prevAria": "Ir para página anterior", + "pagination.prev": "Anterior", + "pagination.nextAria": "Ir para próxima página", + "pagination.next": "Próximo", + "boot.couldNotStart": "Hermes não pôde iniciar", + "boot.recoveryDesc": "O gateway em segundo plano não subiu. Tente uma das etapas de recuperação abaixo — nada aqui exclui seus chats ou configurações.", + "boot.retry": "Tentar novamente", + "boot.repairInstall": "Reparar instalação", + "boot.useLocalGateway": "Usar gateway local", + "boot.openLogs": "Abrir logs", + "boot.repairHint": "Reparar executa o instalador novamente e pode levar alguns minutos em uma máquina nova.", + "boot.showLogs": "Mostrar logs recentes", + "boot.hideLogs": "Ocultar logs recentes", + "bootstrap.pending": "Pendente", + "bootstrap.running": "Instalando", + "bootstrap.done": "Concluído", + "bootstrap.skipped": "Pulado", + "bootstrap.failed": "Falhou", + "model.switch": "Trocar modelo", + "model.unknown": "(desconhecido)", + "model.filterPlaceholder": "Filtrar provedores e modelos...", + "model.persistGlobal": "Persistir globalmente", + "model.persistGlobalSession": "Persistir globalmente (caso contrário apenas nesta sessão)", + "model.couldNotLoad": "Não foi possível carregar modelos", + "model.proLockedDesc": "Modelos Pro precisam de uma assinatura Nous paga.", + "model.priceTooltip": "Preço de entrada/saída por milhão de tokens", + "model.freePrice": "Grátis", + "model.currentLabel": "atual:", + "model.addProviderBtn": "Adicionar provedor", + "sidebar.sheetTitle": "Barra lateral", + "sidebar.sheetDesc": "Exibe a barra lateral móvel.", + "sidebar.toggle": "Alternar Barra Lateral", + "clarify.hermesIsAsking": "Hermes está perguntando", + "clarify.loadingQuestion": "Carregando pergunta…", + "clarify.otherTypeAnswer": "Outro (digite sua resposta)", + "clarify.placeholderAnswer": "Digite sua resposta…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter para enviar", + "clarify.back": "Voltar", + "clarify.skip": "Pular", + "clarify.couldNotSend": "Não foi possível enviar resposta de esclarecimento", + "clarify.pickLabel": "1–{n} para escolher", + "tool.recoveredAfter": "Recuperado após 1 etapa falha", + "tool.recoveredAfterN": "Recuperado após {count} etapas falhas", + "tool.oneStepFailed": "1 etapa falhou", + "tool.nStepsFailed": "{count} etapas falharam", + "intro.fallback1h": "O que vamos mover hoje?", + "intro.fallback1b": "Envie um bug, branch, plano ou ideia. Vou inspecionar o repositório e transformar no próximo passo concreto.", + "intro.fallback2h": "O que está na sua mente?", + "intro.fallback2b": "Traga o código, a pergunta ou a parte travada. Vou ler o cenário antes de fazer alterações.", + "intro.fallback3h": "O que o Hermes deve analisar?", + "intro.fallback3b": "Envie a tarefa, caminho com falha ou plano incompleto. Vou ajudar a transformar em ação.", + "intro.fallback4h": "Por onde devemos começar?", + "intro.fallback4b": "Traga o problema, objetivo ou arquivo. Vou inspecionar primeiro e manter o próximo passo concreto.", + "intro.fallback5h": "O que precisa de atenção?", + "intro.fallback5b": "Envie o contexto que você tem. Vou ajudar a organizar em um plano ou correção.", + "intro.personality.heading1": "Modo {label} está ativo. No que devemos trabalhar?", + "intro.personality.body1": "Envie a tarefa, arquivo ou ideia. Usarei sua voz configurada e manterei o trabalho fundamentado neste repositório.", + "intro.personality.heading2": "O que o Hermes {label} precisa ver?", + "intro.personality.body2": "Traga o contexto ou a parte travada. Vou me adaptar à personalidade configurada.", + "intro.personality.heading3": "Modo {label} está pronto.", + "intro.personality.body3": "Envie o problema, arquivo ou ideia. Seguirei a personalidade que você configurou.", + "intro.personality.heading4": "O que o Hermes {label} deve enfrentar?", + "intro.personality.body4": "Lance a tarefa aqui. Manterei o trabalho fundamentado no repositório.", + "intro.personality.heading5": "Por onde começamos?", + "intro.personality.body5": "Me dê o contexto e responderei no modo {label}.", + "intro.brand": "HERMES AGENT", + "install.line": "linha", + "install.lines": "linhas", + "artifacts.noArtifactsFound": "Nenhum artefato encontrado", + "previewConsole.noMessages": "Nenhuma mensagem no console ainda.", + "agents.spawnTree": "Árvore de spawn", + "agents.liveSubagentActivity": "Atividade de subagentes ativos para o turno atual.", + "agents.noLiveSubagents": "Nenhum subagente ativo", + "agents.files": "Arquivos", + "profiles.noProfilesYet": "Nenhum perfil ainda.", + "profiles.selectProfile": "Selecione um perfil para ver seus detalhes.", + "profiles.deleteProfile": "Excluir perfil?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "Alterações não salvas", + "profiles.newProfile": "Novo perfil", + "profiles.cloneFromDefault": "Clonar do padrão", + "profiles.renameProfile": "Renomear perfil", + "messaging.gatewayStopped": "Gateway de mensageria parado", + "messaging.getCredentials": "Obter suas credenciais", + "messaging.required": "Obrigatório", + "messaging.unsavedChanges": "Alterações não salvas", + "messaging.saved": "Salvo", + "cron.deleteCronJob": "Excluir tarefa agendada?", + "cron.optional": "Opcional", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "Gateway", + "gateway.inferenceStatus": "Status de inferência do gateway", + "agents.label": "Agentes", + "agents.open": "Abrir agentes", + "agents.close": "Fechar agentes", + "agents.subagent": "subagente", + "agents.subagents": "subagentes", + "agents.failed": "falhou", + "agents.running": "executando", + "cron.label": "Cron", + "cron.open": "Abrir tarefas agendadas", + "commandCenter.open": "Abrir Central de Comandos", + "commandCenter.close": "Fechar Central de Comandos", + "mcp.giveConfigKey": "Dê a este servidor MCP uma chave de configuração.", + "mcp.reconnectGateway": "Reconecte o gateway antes de recarregar MCP.", + "mcp.newSchemas": "Novos schemas de ferramentas se aplicam a novos turnos.", + "mcp.loadingServers": "Carregando servidores MCP...", + "mcp.serverName": "Nome", + "mcp.serversTitle": "Servidores MCP", + "mcp.noServersTitle": "Nenhum servidor MCP", + "sessions.nothingArchivedTitle": "Nada arquivado", + "sessions.deletePermanentlyTitle": "Excluir permanentemente", + "sessions.defaultProjectDirTitle": "Diretório de projeto padrão", + "sessions.loadingArchived": "Carregando sessões arquivadas…", + "sessions.restored": "Restaurado", + "sessions.projectDirUpdated": "Diretório de projeto padrão atualizado", + "gateway.enterUrlFirst": "Insira uma URL remota e token de sessão antes de trocar", + "gateway.enterUrlFirstTest": "Insira uma URL remota e token de sessão antes de testar", + "config.saving": "Salvando…", + "keys.openProviderDocs": "Abrir documentação do provedor", + "config.label.defaultModel": "Modelo Padrão", + "config.label.contextWindow": "Janela de Contexto", + "config.label.fallbackModels": "Modelos de Reserva", + "config.label.enabledToolsets": "Conjuntos de Ferramentas Ativados", + "config.label.timezone": "Fuso Horário", + "config.label.personality": "Personalidade", + "config.label.reasoningBlocks": "Blocos de Raciocínio", + "config.label.maxAgentSteps": "Máx. de Passos do Agente", + "config.label.imageAttachments": "Anexos de Imagem", + "config.label.workingDirectory": "Diretório de Trabalho", + "config.label.executionBackend": "Backend de Execução", + "config.label.commandTimeout": "Timeout de Comando", + "config.label.persistentShell": "Shell Persistente", + "config.label.envPassthrough": "Passagem de Variáveis de Ambiente", + "config.label.fileReadLimit": "Limite de Leitura de Arquivos", + "config.label.terminalOutputLimit": "Limite de Saída do Terminal", + "config.label.filePageLimit": "Limite de Páginas de Arquivo", + "config.label.lineLengthLimit": "Limite de Comprimento de Linha", + "config.label.codeExecutionMode": "Modo de Execução de Código", + "config.label.approvalMode": "Modo de Aprovação", + "config.label.approvalTimeout": "Timeout de Aprovação", + "config.label.confirmMcpReloads": "Confirmar Recarregamentos MCP", + "config.label.commandAllowlist": "Lista de Permissões de Comandos", + "config.label.redactSecrets": "Ocultar Segredos", + "config.label.allowPrivateUrls": "Permitir URLs Privadas", + "config.label.browserPrivateUrls": "URLs Privadas do Navegador", + "config.label.localBrowserForPrivateUrls": "Navegador Local para URLs Privadas", + "config.label.fileCheckpoints": "Pontos de Verificação de Arquivos", + "config.label.checkpointLimit": "Limite de Pontos de Verificação", + "config.label.voiceShortcut": "Atalho de Voz", + "config.label.maxRecordingLength": "Duração Máx. de Gravação", + "config.label.readResponsesAloud": "Ler Respostas em Voz Alta", + "config.label.speechToText": "Fala para Texto", + "config.label.speechToTextProvider": "Provedor de Fala para Texto", + "config.label.localTranscriptionModel": "Modelo de Transcrição Local", + "config.label.transcriptionLanguage": "Idioma de Transcrição", + "config.label.elevenlabsSttModel": "Modelo STT ElevenLabs", + "config.label.elevenlabsLanguage": "Idioma ElevenLabs", + "config.label.tagAudioEvents": "Marcar Eventos de Áudio", + "config.label.speakerDiarization": "Diarização de Locutor", + "config.label.textToSpeechProvider": "Provedor de Texto para Fala", + "config.label.edgeVoice": "Voz Edge", + "config.label.openaiTtsModel": "Modelo TTS OpenAI", + "config.label.openaiVoice": "Voz OpenAI", + "config.label.elevenlabsVoice": "Voz ElevenLabs", + "config.label.elevenlabsModel": "Modelo ElevenLabs", + "config.label.persistentMemory": "Memória Persistente", + "config.label.userProfile": "Perfil de Usuário", + "config.label.memoryBudget": "Orçamento de Memória", + "config.label.profileBudget": "Orçamento de Perfil", + "config.label.memoryProvider": "Provedor de Memória", + "config.label.contextEngine": "Mecanismo de Contexto", + "config.label.autoCompression": "Compressão Automática", + "config.label.compressionThreshold": "Limiar de Compressão", + "config.label.compressionTarget": "Alvo de Compressão", + "config.label.protectedRecentMessages": "Mensagens Recentes Protegidas", + "config.label.apiRetries": "Tentativas de API", + "config.label.serviceTier": "Nível de Serviço", + "config.label.toolUseEnforcement": "Imposição de Uso de Ferramentas", + "config.label.subagentModel": "Modelo do Subagente", + "config.label.subagentProvider": "Provedor do Subagente", + "config.label.subagentTurnLimit": "Limite de Turnos do Subagente", + "config.label.parallelSubagents": "Subagentes Paralelos", + "config.label.subagentTimeout": "Timeout do Subagente", + "config.label.subagentReasoningEffort": "Esforço de Raciocínio do Subagente", + "config.desc.defaultModel": "Usado para novos chats a menos que você escolha um modelo diferente no composer.", + "config.desc.contextWindow": "Deixe em 0 para usar a janela de contexto detectada do modelo selecionado.", + "config.desc.fallbackModels": "Entradas provedor:modelo de reserva para tentar se o modelo padrão falhar.", + "config.desc.personality": "Estilo de assistente padrão para novas sessões.", + "config.desc.timezone": "Usado quando Hermes precisa de contexto de hora local. Vazio usa o fuso horário do sistema.", + "config.desc.reasoningBlocks": "Mostrar seções de raciocínio quando o backend as fornece.", + "config.desc.imageAttachments": "Controla como anexos de imagem são enviados ao modelo.", + "config.desc.workingDirectory": "Pasta de projeto padrão para trabalho com ferramentas e terminal.", + "config.desc.codeExecutionMode": "Quão estritamente a execução de código é limitada ao projeto atual.", + "config.desc.persistentShell": "Manter estado do shell entre comandos quando o backend suporta.", + "config.desc.envPassthrough": "Variáveis de ambiente para passar para a execução de ferramentas.", + "config.desc.fileReadLimit": "Máximo de caracteres que Hermes pode ler de uma solicitação de arquivo.", + "config.desc.approvalMode": "Como Hermes lida com comandos que precisam de aprovação explícita.", + "config.desc.approvalTimeout": "Quanto tempo os prompts de aprovação esperam antes de expirar.", + "config.desc.redactSecrets": "Ocultar segredos detectados do conteúdo visível ao modelo quando possível.", + "config.desc.fileCheckpoints": "Criar snapshots de reversão antes de edições de arquivos.", + "config.desc.persistentMemory": "Salvar memórias duráveis que podem ajudar sessões futuras.", + "config.desc.userProfile": "Manter um perfil compacto de preferências do usuário.", + "config.desc.contextEngine": "Estratégia para gerenciar conversas longas perto do limite de contexto.", + "config.desc.autoCompression": "Resumir contexto mais antigo quando as conversas ficam grandes.", + "config.desc.readResponsesAloud": "Falar respostas do assistente automaticamente.", + "config.desc.speechToText": "Habilitar transcrição de fala local ou baseada em provedor.", + "config.desc.elevenlabsLanguage": "Código de idioma ISO-639-3 opcional. Vazio deixa o ElevenLabs detectar automaticamente.", + "config.desc.maxAgentSteps": "Limite superior para turnos de chamada de ferramentas antes do Hermes parar uma execução.", + "mcp.failedToLoad": "Falha ao carregar configuração MCP", + "mcp.invalidJsonShort": "JSON MCP inválido", + "mcp.serverSaved": "Servidor MCP salvo", + "mcp.toolsReloaded": "Ferramentas MCP recarregadas", + "mcp.emptyDesc": "Adicione um servidor stdio ou HTTP para expor ferramentas MCP.", + "sessions.loadFailed": "Não foi possível carregar sessões arquivadas", + "sessions.unarchiveFailed": "Falha ao desarquivar", + "sessions.deleteFailed": "Falha ao excluir", + "sessions.archiveHint": "Arquive um chat para ocultá-lo aqui.", + "sessions.updateDirFailed": "Não foi possível atualizar o diretório padrão", + "sessions.clearDirFailed": "Não foi possível limpar o diretório padrão", + "keys.showAdvanced": "Mostrar avançado", + "keys.loadFailed": "Falha ao carregar chaves de API", + "keys.credentialSaved": "Credencial salva", + "keys.credentialRemoved": "Credencial removida", + "provider.desc.nousPortal": "Substituição da URL base do Nous Portal", + "provider.desc.openRouter": "Chave de API do OpenRouter (para visão, auxiliares de scraping web e MoA)", + "provider.desc.google": "Chave de API do Google AI Studio (também reconhecida como GEMINI_API_KEY)", + "provider.desc.gemini": "ID do projeto GCP para tiers Gemini pagos (tier gratuito aprovisiona automaticamente)", + "provider.desc.anthropic": "Chave de API Anthropic", + "provider.desc.deepseek": "URL base personalizada da API DeepSeek (avançado)", + "provider.desc.xai": "Substituição da URL base xAI", + "provider.desc.huggingface": "Substituição da URL base do Hugging Face Inference Providers", + "provider.desc.kimi": "Chave de API Kimi / Moonshot China", + "provider.desc.minimax": "Substituição da URL base MiniMax (China)", + "provider.desc.minimaxCn": "Chave de API MiniMax China", + "provider.desc.dashscope": "URL base DashScope personalizada (padrão: endpoint compatível com OpenAI coding-intl)", + "provider.desc.glm": "Chave de API GLM (Z.AI)", + "provider.desc.nvidia": "Substituição da URL base NVIDIA NIM (ex. http://localhost:8000/v1 para NIM local)", + "provider.desc.opencodeGo": "Chave de API OpenCode Go", + "provider.desc.opencodeZen": "Chave de API OpenCode Zen", + "provider.desc.xiaomi": "Substituição da URL base Xiaomi MiMo (padrão: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Chave de API Kilo Code", + "provider.desc.aiGateway": "Chave de API AI Gateway (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "Chave de API ElevenLabs", + "provider.desc.openai": "Chave de API OpenAI (para processamento de voz via proxy)", + "provider.desc.mistral": "Chave de API Mistral (para STT/TTS)", + "provider.desc.groq": "Chave de API Groq (para STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "URL da API Firecrawl para instâncias auto-hospedadas (opcional)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Substituição da URL base do Nous Portal", + "provider.desc.openrouter": "Chave de API OpenRouter (para visão, auxiliares de scraping web e MoA)", + "provider.desc.lmstudio": "Substituição da URL base Z.AI / GLM", + "provider.desc.zai": "URL base do Azure Foundry (definida via 'hermes model' para config específica de endpoint)", + "provider.desc.stepfun": "Substituição da URL base StepFun Step Plan", + "provider.desc.arcee": "Substituição da URL base Arcee AI", + "provider.desc.gmi": "Substituição da URL base GMI Cloud", + "provider.desc.qwenportal": "Substituição da URL base do Qwen Portal (padrão: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "Substituição da URL base OpenCode Go", + "provider.desc.ollamacloud": "Substituição da URL base Ollama Cloud (padrão: https://ollama.com/v1)", + "provider.desc.awsbedrock": "Perfil nomeado AWS para autenticação Bedrock (de ~/.aws/credentials)", + "provider.desc.exa": "Chave de API Exa para pesquisa web e conteúdo nativa de IA", + "provider.desc.parallel": "Chave de API Parallel para pesquisa web e extração nativa de IA", + "titlebar.language": "Idioma", + "titlebar.languageDesc": "Escolha um idioma de exibição para a interface.", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} diff --git a/apps/desktop/src/locales/ru.json b/apps/desktop/src/locales/ru.json new file mode 100644 index 000000000000..b69fc2141c12 --- /dev/null +++ b/apps/desktop/src/locales/ru.json @@ -0,0 +1,864 @@ +{ + "appearance.title": "Оформление", + "appearance.description": "Настройки отображения только для десктопа. Режим управляет яркостью; тема управляет палитрой акцентов и стилем чата.", + "appearance.colorMode": "Цветовой режим", + "appearance.colorModeDesc": "Выберите фиксированный режим или позвольте Hermes следовать системной настройке.", + "appearance.theme": "Тема", + "appearance.themeDesc": "Выберите цветовую палитру для чата и акцентов интерфейса.", + "appearance.mode.light": "Светлая", + "appearance.mode.lightDesc": "Светлые поверхности рабочего стола", + "appearance.mode.dark": "Тёмная", + "appearance.mode.darkDesc": "Рабочее пространство без бликов", + "appearance.mode.system": "Системная", + "appearance.mode.systemDesc": "Следовать оформлению ОС", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Стеклянные нейтральные тона с синими акцентами Nous", + "appearance.theme.midnight": "Полночь", + "appearance.theme.midnightDesc": "Глубокий сине-фиолетовый с холодными акцентами", + "appearance.theme.ember": "Угли", + "appearance.theme.emberDesc": "Тёплый малиновый и бронзовый — атмосфера кузницы", + "appearance.theme.mono": "Моно", + "appearance.theme.monoDesc": "Чистые оттенки серого — минимализм и фокус", + "appearance.theme.cyberpunk": "Киберпанк", + "appearance.theme.cyberpunkDesc": "Неоновый зелёный на чёрном — терминал матрицы", + "appearance.theme.slate": "Сланец", + "appearance.theme.slateDesc": "Холодный сине-серый — тема для разработчиков", + "appearance.language": "Язык", + "appearance.languageDesc": "Выберите язык интерфейса или позвольте Hermes следовать системным настройкам.", + "language.system": "Как в системе", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "language.ru": "Русский", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)", + "settings.title": "Настройки", + "settings.appearance": "Оформление", + "settings.model": "Модель", + "settings.gateway": "Шлюз", + "settings.sessions": "Сессии", + "settings.tools": "Инструменты и навыки", + "settings.section.chat": "Чат", + "settings.section.workspace": "Рабочая область", + "settings.section.safety": "Безопасность", + "settings.section.memory": "Память и контекст", + "settings.section.voice": "Голос", + "settings.section.advanced": "Дополнительно", + "settings.mcp": "Серверы MCP", + "settings.config": "Конфигурация", + "settings.keys": "Ключи API", + "settings.about": "О программе", + "chat.placeholder": "Спросите о чём угодно…", + "chat.send": "Отправить", + "chat.stop": "Остановить", + "chat.thinking": "Думаю…", + "chat.noSession": "Нет активной сессии. Начните новый разговор.", + "commandCenter.title": "Командный центр", + "commandCenter.noSessions": "Сессий пока нет.", + "commandCenter.loadingStatus": "Загрузка статуса…", + "commandCenter.recentLogs": "Последние логи", + "commandCenter.dailyTokens": "Токены за день", + "commandCenter.noActivity": "Нет активности за день.", + "commandCenter.noModelUsage": "Использования моделей пока нет.", + "commandCenter.noSkillActivity": "Активности навыков пока нет.", + "common.loading": "Загрузка…", + "common.save": "Сохранить", + "common.cancel": "Отмена", + "common.close": "Закрыть", + "common.delete": "Удалить", + "common.confirm": "Подтвердить", + "common.search": "Поиск…", + "onboarding.welcome": "Добро пожаловать в Hermes", + "onboarding.getStarted": "Начните с выбора провайдера и модели.", + "onboarding.skip": "Пропустить", + "onboarding.continue": "Продолжить", + "onboarding.finish": "Завершить", + "file.browser": "Файловый браузер", + "file.noFiles": "Файлов пока нет.", + "terminal.title": "Терминал", + "terminal.newTab": "Новая вкладка", + "terminal.closeTab": "Закрыть вкладку", + "skills.title": "Навыки", + "skills.search": "Поиск навыков…", + "skills.noResults": "Навыки не найдены.", + "profiles.title": "Профили", + "cron.title": "Задачи Cron", + "cron.noJobs": "Нет запланированных задач.", + "messaging.title": "Мессенджеры", + "about.version": "Версия", + "about.checkUpdates": "Проверить обновления", + "about.upToDate": "Hermes обновлён до последней версии.", + "about.updateAvailable": "Доступно обновление.", + "about.license": "Лицензия MIT", + "keys.title": "Ключи API", + "keys.noKeys": "Ключи API не настроены.", + "keys.addKey": "Добавить ключ", + "config.title": "Конфигурация", + "config.edit": "Редактировать", + "config.reload": "Перезагрузить", + "gateway.title": "Шлюз", + "gateway.start": "Запустить шлюз", + "gateway.stop": "Остановить шлюз", + "gateway.restart": "Перезапустить шлюз", + "gateway.running": "Работает", + "gateway.stopped": "Остановлен", + "sessions.title": "Сессии", + "sessions.search": "Поиск сессий…", + "sessions.noResults": "Сессии не найдены.", + "sessions.export": "Экспорт", + "sessions.delete": "Удалить сессию", + "mcp.title": "Серверы MCP", + "mcp.addServer": "Добавить сервер", + "mcp.noServers": "Серверы MCP не настроены.", + "tools.title": "Инструменты и навыки", + "tools.noTools": "Нет доступных инструментов.", + "nav.home": "Главная", + "nav.chat": "Чат", + "nav.settings": "Настройки", + "nav.files": "Файлы", + "nav.terminal": "Терминал", + "header.search": "Поиск или ввод команды…", + "settings.closeSettings": "Закрыть настройки", + "settings.archivedChats": "Архивные чаты", + "settings.exportConfig": "Экспорт конфигурации", + "settings.importConfig": "Импорт конфигурации", + "settings.resetDefaults": "Сбросить настройки", + "settings.llmProviders": "LLM-провайдеры", + "settings.searchPlaceholder.about": "О Hermes Desktop", + "settings.searchPlaceholder.config": "Поиск настроек…", + "settings.searchPlaceholder.gateway": "Подключение к шлюзу…", + "settings.searchPlaceholder.keys": "Поиск ключей API…", + "settings.searchPlaceholder.mcp": "Поиск серверов MCP…", + "settings.searchPlaceholder.sessions": "Поиск архивных сессий…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "Версия недоступна", + "about.updates": "Обновления", + "about.checkNow": "Проверить сейчас", + "about.checking": "Проверка…", + "about.seeWhatsNew": "Что нового", + "about.releaseNotes": "Примечания к выпуску", + "about.autoUpdates": "Автоматические обновления", + "about.autoUpdatesDesc": "Hermes автоматически проверяет обновления в фоне и сообщает, когда новое готово.", + "about.selfUpdateUnsupported": "Эта сборка не может обновляться изнутри приложения.", + "about.cannotReachServer": "Не удалось связаться с сервером обновлений.", + "about.installingUpdate": "Обновление устанавливается.", + "about.updateReady": "Доступно новое обновление (включено {count} изменение).", + "about.updateReady_plural": "Доступно новое обновление (включено {count} изменений).", + "about.onLatest": "У вас последняя версия.", + "about.tapCheckNow": "Нажмите «Проверить сейчас» для поиска обновлений.", + "about.lastChecked": "Последняя проверка {time}", + "about.justNow": "только что", + "about.never": "никогда", + "about.minAgo": "{count} мин. назад", + "about.hoursAgo": "{count} ч. назад", + "about.daysAgo": "{count} дн. назад", + "about.buildInfo": "Ветка {branch} · Коммит {sha}", + "keys.loading": "Загрузка ключей API и учётных данных…", + "keys.docs": "Документация", + "keys.openDocs": "Открыть документацию провайдера", + "keys.hideValue": "Скрыть значение", + "keys.revealValue": "Показать значение", + "keys.set": "Задано", + "keys.notSet": "Не задано", + "keys.replace": "Заменить", + "keys.replaceValue": "Заменить текущее значение", + "keys.enterValue": "Введите значение", + "keys.saving": "Сохранение", + "keys.save": "Сохранить", + "keys.cancel": "Отмена", + "keys.clearValue": "Очистить значение", + "keys.configured": "Настроено {count} из {total}", + "keys.setCount": "Задано {count} из {total}", + "keys.countSet": "Задано: {count}", + "keys.countKeys": "Ключей: {count}", + "keys.otherProviders": "Другие провайдеры", + "keys.categoryTools": "Инструменты", + "keys.categoryMessaging": "Мессенджеры", + "keys.categorySettings": "Настройки", + "config.notSet": "Не задано", + "config.commaSeparated": "значения через запятую", + "config.on": "Вкл", + "config.off": "Выкл", + "config.none": "Нет", + "config.emptyOption": "(нет)", + "config.loading": "Загрузка конфигурации Hermes…", + "config.noMatching": "Нет подходящих настроек", + "config.noMatchingDesc": "Попробуйте другой поисковый запрос или выберите другой раздел.", + "config.results": "{count} результат", + "config.results_plural": "{count} результатов", + "gateway.loading": "Загрузка настроек шлюза…", + "gateway.unavailable": "Настройки шлюза недоступны", + "gateway.unavailableDesc": "Мост IPC десктопа не предоставляет настройки шлюза.", + "gateway.connection": "Подключение к шлюзу", + "gateway.envOverride": "переопределение через env", + "gateway.desc": "Hermes Desktop по умолчанию запускает собственный локальный шлюз. Используйте удалённый шлюз, если хотите, чтобы приложение управляло уже запущенным бэкендом Hermes на другой машине или за доверенным прокси.", + "gateway.envOverrideTitle": "Переменные окружения управляют этой десктоп-сессией.", + "gateway.envOverrideDesc": "Сбросьте {urlVar} и {tokenVar}, чтобы использовать сохранённые настройки ниже.", + "gateway.localTitle": "Локальный шлюз", + "gateway.localDesc": "Запустить приватный бэкенд Hermes на localhost. Это поведение по умолчанию, работает офлайн.", + "gateway.remoteTitle": "Удалённый шлюз", + "gateway.remoteDesc": "Подключить эту десктоп-оболочку к удалённому бэкенду Hermes по токену сессии.", + "gateway.remoteUrl": "Удалённый URL", + "gateway.remoteUrlDesc": "Базовый URL удалённого бэкенда. Поддерживаются префиксы пути, например /hermes.", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "Токен сессии", + "gateway.sessionTokenDesc": "Токен сессии панели управления для доступа REST и WebSocket. Оставьте пустым, чтобы сохранить существующий токен.", + "gateway.sessionTokenPlaceholder": "Вставьте токен сессии", + "gateway.existingToken": "Существующий токен {preview}", + "gateway.tokenSaved": "сохранён", + "gateway.testRemote": "Проверить удалённый", + "gateway.saveRestart": "Сохранить для следующего запуска", + "gateway.saveReconnect": "Сохранить и переподключиться", + "gateway.diagnostics": "Диагностика", + "gateway.diagnosticsDesc": "Показать desktop.log в файловом менеджере — полезно, когда шлюз не запускается.", + "gateway.openLogs": "Открыть логи", + "sessions.loading": "Загрузка…", + "sessions.defaultProjectDir": "Папка проектов по умолчанию", + "sessions.defaultProjectDirDesc": "Новые сессии начинаются в этой папке, если не выбрана другая. Оставьте пустым для домашней директории.", + "sessions.defaultDir": "По умолчанию {fallback}.", + "sessions.notSet": "Не задано", + "sessions.change": "Изменить", + "sessions.choose": "Выбрать", + "sessions.clear": "Очистить", + "sessions.archivedTitle": "Архивные сессии", + "sessions.archivedDesc": "Архивные чаты скрыты из боковой панели, но сохраняют все сообщения. Ctrl/⌘-клик по чату в панели архивирует его.", + "sessions.nothingArchived": "Ничего не архивировано", + "sessions.noSearchMatch": "Нет архивных чатов по вашему запросу.", + "sessions.archiveToHide": "Архивируйте чат, чтобы скрыть его здесь.", + "sessions.unarchive": "Разархивировать", + "sessions.deletePermanently": "Удалить навсегда", + "sessions.messages": "Сообщений: {count}", + "mcp.loading": "Загрузка серверов MCP…", + "mcp.servers": "Серверы MCP", + "mcp.configured": "Настроено: {count}", + "mcp.newServer": "Новый сервер", + "mcp.reloadMCP": "Перезагрузить MCP", + "mcp.reloading": "Перезагрузка...", + "mcp.noServersDesc": "Добавьте сервер stdio или HTTP для предоставления инструментов MCP.", + "mcp.name": "Имя", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "JSON сервера", + "mcp.editServer": "Редактировать сервер", + "mcp.saveServer": "Сохранить сервер", + "mcp.saving": "Сохранение...", + "mcp.remove": "Удалить", + "mcp.disabled": "отключён", + "model.auxTask.vision": "Зрение", + "model.auxTask.visionHint": "Анализ изображений", + "model.auxTask.web_extract": "Извлечение из веба", + "model.auxTask.web_extractHint": "Суммаризация страниц", + "model.auxTask.compression": "Сжатие", + "model.auxTask.compressionHint": "Уплотнение контекста", + "model.auxTask.session_search": "Поиск по сессиям", + "model.auxTask.session_searchHint": "Запросы поиска", + "model.auxTask.skills_hub": "Хаб навыков", + "model.auxTask.skills_hubHint": "Поиск навыков", + "model.auxTask.approval": "Одобрение", + "model.auxTask.approvalHint": "Умное автоодобрение", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "Маршрутизация инструментов MCP", + "model.auxTask.title_generation": "Генерация заголовков", + "model.auxTask.title_generationHint": "Заголовки сессий", + "model.auxTask.curator": "Куратор", + "model.auxTask.curatorHint": "Обзор использования навыков", + "model.mainModel": "Основная модель", + "model.mainDesc": "Применяется к новым сессиям. Используйте выбор модели в композере для смены в активном чате.", + "model.providerPlaceholder": "Провайдер", + "model.modelPlaceholder": "Модель", + "model.apply": "Применить", + "model.applying": "Применение…", + "model.auxiliaryModels": "Вспомогательные модели", + "model.auxiliaryDesc": "Вспомогательные задачи по умолчанию используют основную модель. Назначьте отдельную модель для переопределения.", + "model.resetAllToMain": "Сбросить всё на основную", + "model.setToMain": "Назначить основную", + "model.change": "Изменить", + "model.cancel": "Отмена", + "model.autoUseMain": "авто · основная модель", + "model.providerDefault": "(по умолчанию провайдера)", + "model.loading": "Загрузка конфигурации модели…", + "updates.checking": "Проверка обновлений…", + "updates.available": "Доступно обновление", + "updates.downloading": "Загрузка…", + "updates.installing": "Установка…", + "updates.restart": "Перезапустить для обновления", + "errors.generic": "Что-то пошло не так.", + "errors.notFound": "Страница не найдена.", + "errors.noPermission": "У вас нет доступа к этому.", + "tool.toolCall": "Вызов инструмента", + "tool.result": "Результат", + "tool.error": "Ошибка", + "tool.timeout": "Таймаут", + "tool.cancelled": "Отменено", + "tool.running": "Выполняется", + "tool.recovered": "Восстановлено", + "tool.done": "Готово", + "tool.output": "Вывод инструмента", + "tool.searchResults": "Результаты поиска", + "tool.rawResponse": "Сырой ответ", + "tool.stdout": "stdout", + "tool.stderr": "stderr", + "tool.copyActivity": "Копировать активность", + "composer.startingHermes": "Запуск Hermes...", + "composer.sendFollowUp": "Отправить продолжение", + "composer.message": "Сообщение", + "composer.editingQueued": "Редактирование очереди в композере", + "composer.attach": "Прикрепить", + "composer.files": "Файлы…", + "composer.folder": "Папка…", + "composer.images": "Изображения…", + "composer.pasteImage": "Вставить изображение", + "composer.url": "URL…", + "composer.promptSnippets": "Фрагменты подсказок", + "composer.promptSnippetsDesc": "Выберите готовую подсказку для вставки в композер.", + "composer.voiceStart": "Начать голосовой разговор", + "composer.queue": "Поставить в очередь", + "composer.speaking": "Говорит", + "composer.transcribing": "Расшифровка", + "composer.muted": "Микрофон выкл.", + "composer.listening": "Слушаю", + "composer.unmuteMic": "Включить микрофон", + "composer.muteMic": "Выключить микрофон", + "composer.stopListening": "Остановить прослушивание и отправить", + "composer.endVoice": "Завершить голосовой разговор", + "composer.end": "Завершить", + "composer.stopDictation": "Остановить диктовку", + "composer.transcribingDictation": "Расшифровка диктовки", + "composer.voiceDictation": "Голосовая диктовка", + "sessions.new": "Новая сессия", + "sessions.running": "Сессия выполняется", + "sessions.actions": "Действия с сессией", + "sessions.reorder": "Переупорядочить", + "sessions.pin": "Закрепить", + "sessions.unpin": "Открепить", + "sessions.copyId": "Копировать ID", + "sessions.rename": "Переименовать", + "sessions.archive": "Архивировать", + "sessions.renameDialog": "Переименовать сессию", + "sessions.renameDesc": "Дайте чату запоминающееся название. Оставьте пустым для сброса.", + "sessions.untitled": "Безымянная сессия", + "sessions.renamed": "Переименовано", + "sessions.renameFailed": "Не удалось переименовать", + "sessions.pinned": "Закреплено", + "sessions.results": "Результаты", + "sessions.allPinned": "Здесь всё закреплено. Открепите чат, чтобы показать его в недавних.", + "sessions.pinHint": "Shift-клик для закрепления · перетаскивание для порядка", + "sessions.loadMore": "Загрузить ещё", + "sessions.noWorkspace": "Нет рабочей области", + "sessions.ungroup": "Показать сессии одним списком", + "sessions.groupByWorkspace": "Группировать по рабочим областям", + "skills.tools": "Навыки и инструменты", + "artifacts": "Артефакты", + "common.clearSearch": "Очистить поиск", + "common.copy": "Копировать", + "common.refresh": "Обновить", + "common.moreActions": "Ещё действия", + "common.tryAgain": "Попробовать снова", + "chat.loadingSession": "Загрузка сессии", + "chat.loadingResponse": "Hermes загружает ответ", + "chat.branchInNewChat": "Ответвить в новый чат", + "chat.readAloud": "Прочитать вслух", + "chat.preparingAudio": "Подготовка аудио...", + "chat.stopReading": "Остановить чтение", + "chat.editMessage": "Редактировать сообщение", + "chat.editableCheckpoint": "Редактируемая точка сохранения", + "chat.restoreCheckpoint": "Восстановить точку", + "chat.goForward": "Вперёд", + "chat.restorePrevCheckpoint": "Восстановить предыдущую точку", + "chat.restoreNextCheckpoint": "Восстановить следующую точку", + "models.title": "Модели", + "models.search": "Поиск моделей", + "models.addProvider": "Добавить провайдера…", + "errors.somethingBroke": "Что-то сломалось в интерфейсе", + "errors.viewCrashedDesc": "Представление столкнулось с неожиданной ошибкой. Ваши чаты и настройки в безопасности — попробуйте снова или перезагрузите окно.", + "errors.noProviders": "Нет аутентифицированных провайдеров.", + "onboarding.setupTitle": "Давайте настроим Hermes Agent", + "onboarding.setupDesc": "Подключите модельного провайдера, чтобы начать общение. Большинство вариантов в один клик.", + "onboarding.preparing": "Запуск Hermes…", + "onboarding.installing": "Hermes завершает установку. Обычно это занимает меньше минуты при первом запуске.", + "onboarding.lookingUp": "Поиск провайдеров...", + "onboarding.otherProviders": "Другие провайдеры", + "onboarding.collapse": "Свернуть", + "onboarding.iHaveKey": "У меня есть ключ API", + "onboarding.recommended": "Рекомендовано", + "onboarding.connected": "Подключено", + "onboarding.backToSignIn": "Вернуться ко входу", + "onboarding.getKey": "Получить ключ", + "onboarding.pasteKey": "Вставить ключ API", + "onboarding.connect": "Подключить", + "onboarding.connecting": "Подключение", + "onboarding.copyCode": "Копировать", + "onboarding.startSignIn": "Запуск входа для", + "onboarding.verifyingCode": "Проверка кода через", + "onboarding.pickingModel": "подключено. Выбор модели по умолчанию...", + "onboarding.signInFailed": "Вход не удался. Попробуйте снова.", + "onboarding.pickDifferent": "Выбрать другого провайдера", + "onboarding.signInTitle": "Войти через", + "onboarding.step1": "Мы открыли", + "onboarding.step1End": "в вашем браузере.", + "onboarding.step2": "Авторизуйте Hermes там.", + "onboarding.step3": "Скопируйте код авторизации и вставьте его ниже.", + "onboarding.pasteCode": "Вставить код авторизации", + "onboarding.reopenAuth": "Открыть страницу авторизации снова", + "onboarding.cancel": "Отмена", + "onboarding.browserDesc": "Мы открыли", + "onboarding.browserDescEnd": "в вашем браузере. Авторизуйте Hermes там, и вы подключитесь автоматически — ничего копировать не нужно.", + "onboarding.waitingAuth": "Ожидание авторизации...", + "onboarding.reopenSignIn": "Открыть страницу входа снова", + "onboarding.externalDesc": "выполняет вход через свой CLI. Запустите эту команду в терминале, затем вернитесь и выберите «Я вошёл»:", + "onboarding.iSignedIn": "Я вошёл", + "onboarding.enterCode": "Мы открыли", + "onboarding.enterCodeEnd": "в вашем браузере. Введите этот код там:", + "onboarding.reopenVerification": "Открыть страницу проверки снова", + "onboarding.defaultModel": "Модель по умолчанию", + "onboarding.freeTier": "Бесплатный тариф", + "onboarding.pro": "Pro", + "onboarding.change": "Изменить", + "onboarding.startChatting": "Начать общение", + "onboarding.docs": "документация", + "onboarding.close": "Закрыть", + "onboarding.savingError": "Не удалось сохранить учётные данные.", + "install.title": "Hermes требуется однократная установка", + "install.desc": "Автоматическая установка при первом запуске недоступна на", + "install.descEnd": "пока. Откройте терминал и выполните команду ниже, затем перезапустите приложение. При последующих запусках этот шаг пропускается.", + "install.installCommand": "Команда установки", + "install.copyCommand": "Копировать команду", + "install.viewDocs": "Документация по установке", + "install.willInstallTo": "Будет установлено в", + "install.iRanIt": "Я выполнил — повторить", + "install.failed": "Установка не удалась", + "install.settingUp": "Настройка Hermes Agent", + "install.finishingUp": "Завершение", + "install.failedDesc": "Один из шагов установки не удался. В Windows это может произойти, если запущен другой экземпляр Hermes CLI или десктопа. Остановите все запущенные экземпляры Hermes, затем повторите. Подробности ниже или в журнале десктопа.", + "install.setupDesc": "Это однократная настройка. Установщик Hermes загружает зависимости и настраивает машину. При последующих запусках этот шаг пропускается.", + "install.fetchingManifest": "Получение манифеста установщика...", + "install.error": "Ошибка", + "install.showOutput": "Показать вывод установщика", + "install.hideOutput": "Скрыть вывод установщика", + "install.noOutput": "Вывода пока нет.", + "install.cancelInstall": "Отменить установку", + "install.cancelling": "Отмена...", + "install.copyOutput": "Копировать вывод", + "install.copied": "Скопировано!", + "install.reloadRetry": "Перезагрузить и повторить", + "install.saveLogs": "Полный журнал сохранён в", + "install.stepsComplete": "шагов выполнено", + "install.nowLabel": "сейчас", + "chat.composerTip": "Совет: введите @ для ссылки на файлы.", + "composer.addContext": "Добавить контекст", + "sessions.loadStep": "Загрузить", + "sessions.moreLabel": "ещё", + "chat.reconnecting": "Переподключение к Hermes…", + "appearance.toolCallDisplay": "Отображение вызовов инструментов", + "appearance.toolCallDisplayDesc": "Продуктовый скрывает сырые данные; Технический показывает полный ввод/вывод.", + "appearance.toolViewProduct": "Продуктовый", + "appearance.toolViewTechnical": "Технический", + "appearance.toolViewProductDesc": "Дружелюбная активность инструментов с краткими сводками.", + "appearance.toolViewTechnicalDesc": "Включать сырые аргументы/результаты и низкоуровневые детали.", + "messaging.recommended": "Рекомендовано", + "messaging.recommendedTelegram": "Рекомендовано. Числовые ID через запятую из @userinfobot. Без этого любой может написать боту.", + "messaging.recommendedDiscord": "Рекомендовано. ID пользователей Discord через запятую.", + "messaging.recommendedSlack": "Рекомендовано. ID пользователей Slack через запятую.", + "messaging.recommendedMattermost": "Рекомендовано. ID пользователей Mattermost через запятую.", + "messaging.recommendedMatrix": "Рекомендовано. ID пользователей через запятую в формате @user:server.", + "messaging.recommendedSignal": "Рекомендовано. Идентификаторы Signal через запятую.", + "messaging.recommendedWhatsApp": "Рекомендовано. Номера телефонов или ID WhatsApp через запятую.", + "previewConsole.resizeLabel": "Изменить размер консоли предпросмотра", + "boot.ipcUnavailable": "Мост IPC десктопа недоступен.", + "boot.backendExited": "Фоновый процесс Hermes завершился во время запуска.", + "boot.backendStoppedTitle": "Бэкенд остановлен", + "boot.backendStoppedMessage": "Фоновый процесс Hermes завершился.", + "boot.startingConnection": "Запуск подключения десктопа", + "boot.connectingGateway": "Подключение живого шлюза десктопа", + "boot.loadingConfig": "Загрузка настроек Hermes", + "boot.loadingSessions": "Загрузка последних сессий", + "boot.desktopBootFailed": "Загрузка десктопа не удалась", + "updates.stageGettingReady": "Подготовка…", + "updates.stageDownloading": "Загрузка…", + "updates.stageAlmostThere": "Почти готово…", + "updates.stageFinishingUp": "Завершение…", + "updates.stageRestarting": "Перезапуск Hermes…", + "updates.stageManual": "Обновление из терминала", + "updates.stageError": "Обновление приостановлено", + "updates.updatingHermes": "Обновление Hermes…", + "updates.lookingForUpdates": "Поиск обновлений…", + "updates.couldntCheck": "Не удалось проверить обновления", + "updates.updateNotAvailable": "Обновление недоступно", + "updates.checkConnection": "Проверьте подключение и попробуйте снова.", + "updates.onLatest": "У вас последняя версия.", + "updates.allSet": "Всё готово", + "updates.newUpdateAvailable": "Доступно новое обновление", + "updates.readyToInstall": "Новая версия Hermes готова к установке.", + "updates.updateNow": "Обновить сейчас", + "updates.maybeLater": "Возможно позже", + "updates.moreChanges": "+ ещё {count} изменение.", + "updates.moreChanges_plural": "+ ещё {count} изменений.", + "updates.updateFromTerminal": "Обновление из терминала", + "updates.terminalDesc": "Вы установили Hermes из командной строки, поэтому обновления выполняются там же. Вставьте это в терминал:", + "updates.copied": "Скопировано", + "updates.copy": "Копировать", + "updates.pickupNewVersion": "Hermes подхватит новую версию при следующем запуске.", + "updates.done": "Готово", + "updates.updaterDesc": "Установщик Hermes продолжит в собственном окне и перезапустит Hermes по завершении.", + "updates.closeToApply": "Hermes закроется для применения обновления.", + "updates.updateDidntFinish": "Обновление не завершилось", + "updates.nothingLost": "Не беспокойтесь — ничего не потеряно. Можете попробовать снова сейчас.", + "updates.notNow": "Не сейчас", + "commandCenter.sessionsPanel": "Панель сессий", + "commandCenter.systemPanel": "Системная панель", + "commandCenter.usagePanel": "Панель использования", + "commandCenter.navigate": "Навигация", + "commandCenter.noMatchingResults": "Совпадений не найдено.", + "commandCenter.noSessionsYet": "Сессий пока нет.", + "commandCenter.unpinSession": "Открепить сессию", + "commandCenter.pinSession": "Закрепить сессию", + "commandCenter.exportSession": "Экспортировать сессию", + "commandCenter.deleteSession": "Удалить сессию", + "commandCenter.gatewayRunning": "Шлюз мессенджеров работает", + "commandCenter.gatewayStopped": "Шлюз мессенджеров остановлен", + "commandCenter.restartMsg": "Перезапустить мессенджеры", + "commandCenter.updateHermes": "Обновить Hermes", + "commandCenter.noLogsLoaded": "Логи ещё не загружены.", + "commandCenter.closeLabel": "Закрыть командный центр", + "commandCenter.searchPlaceholder": "Поиск сессий, представлений и действий", + "commandCenter.statSessions": "Сессии", + "commandCenter.statApiCalls": "Вызовы API", + "commandCenter.statTokens": "Токены вх/исх", + "commandCenter.statEstCost": "Примерная стоимость", + "commandCenter.actualCost": "факт. {cost}", + "commandCenter.loadingUsage": "Загрузка использования...", + "commandCenter.noUsageDesc": "Нет использования за последние {count} дн.", + "commandCenter.retry": "Повторить", + "commandCenter.tokenInput": "вход", + "commandCenter.tokenOutput": "выход", + "commandCenter.noDailyActivity": "Нет активности за день.", + "commandCenter.topModels": "Топ моделей", + "commandCenter.topSkills": "Топ навыков", + "commandCenter.actionsLabel": "действия", + "commandCenter.systemRunning": "работает", + "commandCenter.systemDone": "завершено", + "commandCenter.systemFailed": "ошибка", + "mcp.nameRequired": "Требуется имя", + "mcp.nameRequiredDesc": "Укажите конфигурационный ключ для сервера MCP.", + "mcp.invalidJson": "Конфигурация сервера должна быть JSON-объектом", + "mcp.invalidJsonDesc": "Некорректный JSON MCP", + "mcp.saved": "Сервер MCP сохранён", + "mcp.savedDesc": "{name} применится после перезагрузки MCP.", + "mcp.saveFailed": "Не удалось сохранить", + "mcp.removeFailed": "Не удалось удалить", + "mcp.gatewayUnavailable": "Шлюз недоступен", + "mcp.gatewayUnavailableDesc": "Подключите шлюз перед перезагрузкой MCP.", + "mcp.reloadedTitle": "Инструменты MCP перезагружены", + "mcp.reloadedDesc": "Новые схемы инструментов применяются к новым запросам.", + "mcp.reloadFailed": "Перезагрузка MCP не удалась", + "urlDialog.title": "Прикрепить URL", + "urlDialog.description": "Hermes загрузит страницу и включит её как контекст для этого запроса.", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "Укажите полный URL, например", + "urlDialog.attach": "Прикрепить", + "model.options": "Параметры", + "model.thinking": "Размышление", + "model.fast": "Быстрый", + "model.effort": "Усилие", + "model.noOptions": "Нет параметров для этой модели", + "model.optionUpdateFailed": "Не удалось обновить параметр модели", + "model.fastModeUpdateFailed": "Не удалось обновить быстрый режим", + "model.effortMinimal": "Минимальное", + "model.effortLow": "Низкое", + "model.effortMedium": "Среднее", + "model.effortHigh": "Высокое", + "model.effortMax": "Максимальное", + "gateway.connected": "Подключено", + "gateway.connecting": "Подключение", + "gateway.disconnected": "Отключено", + "gateway.inferenceReady": "Инференс готов", + "gateway.inferenceNotReady": "Инференс не готов", + "gateway.checkingInference": "Проверка инференса", + "gateway.openSystemPanel": "Открыть системную панель", + "gateway.connectionLabel": "Подключение:", + "gateway.recentActivity": "Недавняя активность", + "gateway.viewAllLogs": "Все логи →", + "gateway.messagingPlatforms": "Платформы мессенджеров", + "titlebar.hideSidebar": "Скрыть боковую панель", + "titlebar.showSidebar": "Показать боковую панель", + "titlebar.search": "Поиск", + "titlebar.searchTitle": "Поиск сессий, представлений и действий", + "titlebar.hideRightSidebar": "Скрыть правую панель", + "titlebar.showRightSidebar": "Показать правую панель", + "titlebar.unmuteHaptics": "Включить тактильный отклик", + "titlebar.muteHaptics": "Отключить тактильный отклик", + "titlebar.openSettings": "Открыть настройки", + "titlebar.profiles": "Профили", + "titlebar.profilesDesc": "Продвинутые окружения Hermes для отдельных персон, конфигураций, навыков и SOUL.md.", + "titlebar.manageProfiles": "Управление профилями", + "pagination.ariaLabel": "пагинация", + "pagination.prevAria": "На предыдущую страницу", + "pagination.prev": "Назад", + "pagination.nextAria": "На следующую страницу", + "pagination.next": "Вперёд", + "boot.couldNotStart": "Hermes не удалось запустить", + "boot.recoveryDesc": "Фоновый шлюз не запустился. Попробуйте один из шагов восстановления ниже — ничего здесь не удаляет ваши чаты или настройки.", + "boot.retry": "Повторить", + "boot.repairInstall": "Восстановить установку", + "boot.useLocalGateway": "Использовать локальный шлюз", + "boot.openLogs": "Открыть логи", + "boot.repairHint": "Восстановление перезапускает установщик и может занять несколько минут на новой машине.", + "boot.showLogs": "Показать последние логи", + "boot.hideLogs": "Скрыть последние логи", + "bootstrap.pending": "Ожидание", + "bootstrap.running": "Установка", + "bootstrap.done": "Готово", + "bootstrap.skipped": "Пропущено", + "bootstrap.failed": "Ошибка", + "model.switch": "Сменить модель", + "model.unknown": "(неизвестно)", + "model.filterPlaceholder": "Фильтр провайдеров и моделей...", + "model.persistGlobal": "Сохранить глобально", + "model.persistGlobalSession": "Сохранить глобально (иначе только для этой сессии)", + "model.couldNotLoad": "Не удалось загрузить модели", + "model.proLockedDesc": "Pro-модели требуют платной подписки Nous.", + "model.priceTooltip": "Цена ввода / вывода за миллион токенов", + "model.freePrice": "Бесплатно", + "model.currentLabel": "текущая:", + "model.addProviderBtn": "Добавить провайдера", + "sidebar.sheetTitle": "Боковая панель", + "sidebar.sheetDesc": "Отображает мобильную боковую панель.", + "sidebar.toggle": "Переключить боковую панель", + "clarify.hermesIsAsking": "Hermes спрашивает", + "clarify.loadingQuestion": "Загрузка вопроса…", + "clarify.otherTypeAnswer": "Другое (введите ответ)", + "clarify.placeholderAnswer": "Введите ответ…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter для отправки", + "clarify.back": "Назад", + "clarify.skip": "Пропустить", + "clarify.couldNotSend": "Не удалось отправить уточняющий ответ", + "clarify.pickLabel": "1–{n} для выбора", + "tool.recoveredAfter": "Восстановлено после 1 неудачного шага", + "tool.recoveredAfterN": "Восстановлено после {count} неудачных шагов", + "tool.oneStepFailed": "1 шаг не удался", + "tool.nStepsFailed": "{count} шагов не удалось", + "intro.fallback1h": "Что двигаем сегодня?", + "intro.fallback1b": "Отправьте баг, ветку, план или черновую идею. Я осмотрю репозиторий и превращу в следующий конкретный шаг.", + "intro.fallback2h": "Что у вас на уме?", + "intro.fallback2b": "Принесите код, вопрос или застрявшую часть. Я ознакомлюсь перед тем, как вносить изменения.", + "intro.fallback3h": "На что Hermes должен посмотреть?", + "intro.fallback3b": "Отправьте задачу, падающий путь или полуготовый план. Я помогу превратить в действие.", + "intro.fallback4h": "С чего начнём?", + "intro.fallback4b": "Принесите проблему, цель или файл. Я сперва осмотрюсь и сделаю следующий шаг конкретным.", + "intro.fallback5h": "Что требует внимания?", + "intro.fallback5b": "Отправьте имеющийся контекст. Я помогу превратить его в план или исправление.", + "intro.personality.heading1": "Режим {label} включён. Над чем будем работать?", + "intro.personality.body1": "Отправьте задачу, файл или черновую идею. Я буду использовать настроенный голос и привяжу работу к этому репозиторию.", + "intro.personality.heading2": "Что {label} Hermes нужно увидеть?", + "intro.personality.body2": "Принесите контекст или застрявшую часть. Я адаптируюсь к настроенной личности.", + "intro.personality.heading3": "Режим {label} готов.", + "intro.personality.body3": "Отправьте проблему, файл или идею. Я последую настроенной личности.", + "intro.personality.heading4": "За что {label} Hermes возьмётся?", + "intro.personality.body4": "Оставьте задачу здесь. Я привяжу работу к репозиторию.", + "intro.personality.heading5": "С чего начнём?", + "intro.personality.body5": "Дайте мне контекст, и я отвечу в режиме {label}.", + "intro.brand": "HERMES AGENT", + "install.line": "строка", + "install.lines": "строк", + "artifacts.noArtifactsFound": "Артефакты не найдены", + "previewConsole.noMessages": "Сообщений консоли пока нет.", + "agents.spawnTree": "Дерево порождения", + "agents.liveSubagentActivity": "Активность субагентов в реальном времени для текущего хода.", + "agents.noLiveSubagents": "Нет активных субагентов", + "agents.files": "Файлы", + "profiles.noProfilesYet": "Профилей пока нет.", + "profiles.selectProfile": "Выберите профиль для просмотра деталей.", + "profiles.deleteProfile": "Удалить профиль?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "Несохранённые изменения", + "profiles.newProfile": "Новый профиль", + "profiles.cloneFromDefault": "Клонировать из стандартного", + "profiles.renameProfile": "Переименовать профиль", + "messaging.gatewayStopped": "Шлюз мессенджеров остановлен", + "messaging.getCredentials": "Получить учётные данные", + "messaging.required": "Обязательно", + "messaging.unsavedChanges": "Несохранённые изменения", + "messaging.saved": "Сохранено", + "cron.deleteCronJob": "Удалить задачу cron?", + "cron.optional": "Необязательно", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "Шлюз", + "gateway.inferenceStatus": "Статус инференса шлюза", + "agents.label": "Агенты", + "agents.open": "Открыть агентов", + "agents.close": "Закрыть агентов", + "agents.subagent": "субагент", + "agents.subagents": "субагентов", + "agents.failed": "ошибка", + "agents.running": "выполняется", + "cron.label": "Cron", + "cron.open": "Открыть задачи cron", + "commandCenter.open": "Открыть командный центр", + "commandCenter.close": "Закрыть командный центр", + "mcp.giveConfigKey": "Укажите конфигурационный ключ для сервера MCP.", + "mcp.reconnectGateway": "Подключите шлюз перед перезагрузкой MCP.", + "mcp.newSchemas": "Новые схемы инструментов применяются к новым запросам.", + "mcp.loadingServers": "Загрузка серверов MCP...", + "mcp.serverName": "Имя", + "mcp.serversTitle": "Серверы MCP", + "mcp.noServersTitle": "Нет серверов MCP", + "sessions.nothingArchivedTitle": "Ничего не архивировано", + "sessions.deletePermanentlyTitle": "Удалить навсегда", + "sessions.defaultProjectDirTitle": "Папка проектов по умолчанию", + "sessions.loadingArchived": "Загрузка архивных сессий…", + "sessions.restored": "Восстановлено", + "sessions.projectDirUpdated": "Папка проектов по умолчанию обновлена", + "gateway.enterUrlFirst": "Введите удалённый URL и токен сессии перед переключением", + "gateway.enterUrlFirstTest": "Введите удалённый URL и токен сессии перед проверкой", + "config.saving": "Сохранение…", + "keys.openProviderDocs": "Открыть документацию провайдера", + "config.label.defaultModel": "Модель по умолчанию", + "config.label.contextWindow": "Контекстное окно", + "config.label.fallbackModels": "Резервные модели", + "config.label.enabledToolsets": "Включённые наборы инструментов", + "config.label.timezone": "Часовой пояс", + "config.label.personality": "Личность", + "config.label.reasoningBlocks": "Блоки рассуждений", + "config.label.maxAgentSteps": "Макс. шагов агента", + "config.label.imageAttachments": "Вложения изображений", + "config.label.workingDirectory": "Рабочая директория", + "config.label.executionBackend": "Бэкенд выполнения", + "config.label.commandTimeout": "Таймаут команд", + "config.label.persistentShell": "Постоянная оболочка", + "config.label.envPassthrough": "Проброс переменных окружения", + "config.label.fileReadLimit": "Лимит чтения файлов", + "config.label.terminalOutputLimit": "Лимит вывода терминала", + "config.label.filePageLimit": "Лимит страниц файла", + "config.label.lineLengthLimit": "Лимит длины строки", + "config.label.codeExecutionMode": "Режим выполнения кода", + "config.label.approvalMode": "Режим одобрения", + "config.label.approvalTimeout": "Таймаут одобрения", + "config.label.confirmMcpReloads": "Подтверждать перезагрузку MCP", + "config.label.commandAllowlist": "Белый список команд", + "config.label.redactSecrets": "Скрывать секреты", + "config.label.allowPrivateUrls": "Разрешить приватные URL", + "config.label.browserPrivateUrls": "Браузер для приватных URL", + "config.label.localBrowserForPrivateUrls": "Локальный браузер для приватных URL", + "config.label.fileCheckpoints": "Контрольные точки файлов", + "config.label.checkpointLimit": "Лимит контрольных точек", + "config.label.voiceShortcut": "Голосовая комбинация", + "config.label.maxRecordingLength": "Макс. длина записи", + "config.label.readResponsesAloud": "Читать ответы вслух", + "config.label.speechToText": "Распознавание речи", + "config.label.speechToTextProvider": "Провайдер распознавания речи", + "config.label.localTranscriptionModel": "Локальная модель транскрипции", + "config.label.transcriptionLanguage": "Язык транскрипции", + "config.label.elevenlabsSttModel": "Модель STT ElevenLabs", + "config.label.elevenlabsLanguage": "Язык ElevenLabs", + "config.label.tagAudioEvents": "Метки аудиособытий", + "config.label.speakerDiarization": "Диаризация спикеров", + "config.label.textToSpeechProvider": "Провайдер синтеза речи", + "config.label.edgeVoice": "Голос Edge", + "config.label.openaiTtsModel": "Модель TTS OpenAI", + "config.label.openaiVoice": "Голос OpenAI", + "config.label.elevenlabsVoice": "Голос ElevenLabs", + "config.label.elevenlabsModel": "Модель ElevenLabs", + "config.label.persistentMemory": "Постоянная память", + "config.label.userProfile": "Профиль пользователя", + "config.label.memoryBudget": "Бюджет памяти", + "config.label.profileBudget": "Бюджет профиля", + "config.label.memoryProvider": "Провайдер памяти", + "config.label.contextEngine": "Движок контекста", + "config.label.autoCompression": "Автосжатие", + "config.label.compressionThreshold": "Порог сжатия", + "config.label.compressionTarget": "Цель сжатия", + "config.label.protectedRecentMessages": "Защищённые последние сообщения", + "config.label.apiRetries": "Повторы API", + "config.label.serviceTier": "Уровень обслуживания", + "config.label.toolUseEnforcement": "Принуждение использования инструментов", + "config.label.subagentModel": "Модель субагента", + "config.label.subagentProvider": "Провайдер субагента", + "config.label.subagentTurnLimit": "Лимит ходов субагента", + "config.label.parallelSubagents": "Параллельные субагенты", + "config.label.subagentTimeout": "Таймаут субагента", + "config.label.subagentReasoningEffort": "Усилие рассуждения субагента", + "config.desc.defaultModel": "Используется для новых чатов, если не выбрана другая модель в композере.", + "config.desc.contextWindow": "Оставьте 0 для использования контекстного окна выбранной модели.", + "config.desc.fallbackModels": "Резервные записи провайдер:модель на случай сбоя основной модели.", + "config.desc.personality": "Стиль ассистента по умолчанию для новых сессий.", + "config.desc.timezone": "Используется, когда Hermes нужен контекст местного времени. Пустое значение — системный пояс.", + "config.desc.reasoningBlocks": "Показывать разделы рассуждений, когда бэкенд их предоставляет.", + "config.desc.imageAttachments": "Управляет отправкой вложений изображений модели.", + "config.desc.workingDirectory": "Папка проекта по умолчанию для работы инструментов и терминала.", + "config.desc.codeExecutionMode": "Насколько строго выполнение кода ограничено текущим проектом.", + "config.desc.persistentShell": "Сохранять состояние оболочки между командами, если бэкенд поддерживает.", + "config.desc.envPassthrough": "Переменные окружения для передачи в выполнение инструментов.", + "config.desc.fileReadLimit": "Максимальное количество символов, которое Hermes может прочитать из одного файла.", + "config.desc.approvalMode": "Как Hermes обрабатывает команды, требующие явного одобрения.", + "config.desc.approvalTimeout": "Как долго запросы одобрения ждут перед таймаутом.", + "config.desc.redactSecrets": "Скрывать обнаруженные секреты от видимого модели контента, когда возможно.", + "config.desc.fileCheckpoints": "Создавать снимки отката перед редактированием файлов.", + "config.desc.persistentMemory": "Сохранять долговременные воспоминания, помогающие будущим сессиям.", + "config.desc.userProfile": "Поддерживать компактный профиль пользовательских предпочтений.", + "config.desc.contextEngine": "Стратегия управления длинными разговорами вблизи лимита контекста.", + "config.desc.autoCompression": "Суммаризировать старый контекст при разрастании разговоров.", + "config.desc.readResponsesAloud": "Автоматически озвучивать ответы ассистента.", + "config.desc.speechToText": "Включить локальную или провайдерскую транскрипцию речи.", + "config.desc.elevenlabsLanguage": "Необязательный код языка ISO-639-3. Пустое значение — автоопределение ElevenLabs.", + "config.desc.maxAgentSteps": "Верхняя граница ходов вызова инструментов до остановки Hermes.", + "mcp.failedToLoad": "Не удалось загрузить конфигурацию MCP", + "mcp.invalidJsonShort": "Некорректный JSON MCP", + "mcp.serverSaved": "Сервер MCP сохранён", + "mcp.toolsReloaded": "Инструменты MCP перезагружены", + "mcp.emptyDesc": "Добавьте сервер stdio или HTTP для предоставления инструментов MCP.", + "sessions.loadFailed": "Не удалось загрузить архивные сессии", + "sessions.unarchiveFailed": "Не удалось разархивировать", + "sessions.deleteFailed": "Не удалось удалить", + "sessions.archiveHint": "Архивируйте чат, чтобы скрыть его здесь.", + "sessions.updateDirFailed": "Не удалось обновить директорию по умолчанию", + "sessions.clearDirFailed": "Не удалось очистить директорию по умолчанию", + "keys.showAdvanced": "Показать дополнительные", + "keys.loadFailed": "Не удалось загрузить ключи API", + "keys.credentialSaved": "Учётные данные сохранены", + "keys.credentialRemoved": "Учётные данные удалены", + "provider.desc.nousPortal": "Переопределение базового URL портала Nous", + "provider.desc.openRouter": "Ключ API OpenRouter (для зрения, помощников веб-скрапинга и MoA)", + "provider.desc.google": "Ключ API Google AI Studio (также распознаётся как GEMINI_API_KEY)", + "provider.desc.gemini": "ID проекта GCP для платных тарифов Gemini (бесплатный тариф настраивается автоматически)", + "provider.desc.anthropic": "Ключ API Anthropic", + "provider.desc.deepseek": "Пользовательский базовый URL DeepSeek API (дополнительно)", + "provider.desc.xai": "Переопределение базового URL xAI", + "provider.desc.huggingface": "Переопределение базового URL Hugging Face Inference Providers", + "provider.desc.kimi": "Ключ API Kimi / Moonshot China", + "provider.desc.minimax": "Переопределение базового URL MiniMax (Китай)", + "provider.desc.minimaxCn": "Ключ API MiniMax China", + "provider.desc.dashscope": "Пользовательский базовый URL DashScope (по умолчанию: coding-intl OpenAI-совместимая точка)", + "provider.desc.glm": "Ключ API GLM (Z.AI)", + "provider.desc.nvidia": "Переопределение базового URL NVIDIA NIM (например, http://localhost:8000/v1 для локального NIM)", + "provider.desc.opencodeGo": "Ключ API OpenCode Go", + "provider.desc.opencodeZen": "Ключ API OpenCode Zen", + "provider.desc.xiaomi": "Переопределение базового URL Xiaomi MiMo (по умолчанию: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Ключ API Kilo Code", + "provider.desc.aiGateway": "Ключ API AI Gateway (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "Ключ API ElevenLabs", + "provider.desc.openai": "Ключ API OpenAI (для обработки голоса через прокси)", + "provider.desc.mistral": "Ключ API Mistral (для STT/TTS)", + "provider.desc.groq": "Ключ API Groq (для STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "URL Firecrawl API для собственных экземпляров (необязательно)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Переопределение базового URL портала Nous", + "provider.desc.openrouter": "Ключ API OpenRouter (для зрения, помощников веб-скрапинга и MoA)", + "provider.desc.lmstudio": "Переопределение базового URL Z.AI / GLM", + "provider.desc.zai": "Базовый URL Azure Foundry (задаётся через 'hermes model' для конфигурации точки)", + "provider.desc.stepfun": "Переопределение базового URL StepFun Step Plan", + "provider.desc.arcee": "Переопределение базового URL Arcee AI", + "provider.desc.gmi": "Переопределение базового URL GMI Cloud", + "provider.desc.qwenportal": "Переопределение базового URL Qwen Portal (по умолчанию: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "Переопределение базового URL OpenCode Go", + "provider.desc.ollamacloud": "Переопределение базового URL Ollama Cloud (по умолчанию: https://ollama.com/v1)", + "provider.desc.awsbedrock": "Именованный профиль AWS для аутентификации Bedrock (из ~/.aws/credentials)", + "provider.desc.exa": "Ключ API Exa для AI-поиска и содержимого", + "provider.desc.parallel": "Ключ API Parallel для AI-поиска и извлечения", + "titlebar.language": "Язык", + "titlebar.languageDesc": "Выберите язык отображения интерфейса." +} diff --git a/apps/desktop/src/locales/th.json b/apps/desktop/src/locales/th.json new file mode 100644 index 000000000000..418717c87282 --- /dev/null +++ b/apps/desktop/src/locales/th.json @@ -0,0 +1,864 @@ +{ + "appearance.title": "ลักษณะที่ปรากฏ", + "appearance.description": "การตั้งค่าการแสดงผลเฉพาะเดสก์ท็อป โหมดควบคุมความสว่าง; ธีมควบคุมพาเลทสีและสไตล์พื้นผิวแชท", + "appearance.colorMode": "โหมดสี", + "appearance.colorModeDesc": "เลือกโหมดคงที่หรือให้ Hermes ตามการตั้งค่าระบบของคุณ", + "appearance.theme": "ธีม", + "appearance.themeDesc": "เลือกพาเลทสีสำหรับพื้นผิวแชทและการเน้นสีอินเทอร์เฟซ", + "appearance.mode.light": "สว่าง", + "appearance.mode.lightDesc": "พื้นผิวเดสก์ท็อปสว่าง", + "appearance.mode.dark": "มืด", + "appearance.mode.darkDesc": "พื้นที่ทำงานลดแสงสะท้อน", + "appearance.mode.system": "ระบบ", + "appearance.mode.systemDesc": "ตามลักษณะระบบปฏิบัติการ", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "โทนกลางแบบกระจกพร้อมการเน้นสีน้ำเงิน Nous", + "appearance.theme.midnight": "เที่ยงคืน", + "appearance.theme.midnightDesc": "น้ำเงิน-ม่วงเข้มพร้อมการเน้นสีโทนเย็น", + "appearance.theme.ember": "ถ่านคุ", + "appearance.theme.emberDesc": "สีแดงเข้มอบอุ่นและสีบรอนซ์ — บรรยากาศโรงตีเหล็ก", + "appearance.theme.mono": "โมโน", + "appearance.theme.monoDesc": "โทนเทาสะอาด — เรียบง่ายและมีสมาธิ", + "appearance.theme.cyberpunk": "ไซเบอร์พังค์", + "appearance.theme.cyberpunkDesc": "เขียวนีออนบนพื้นดำ — เทอร์มินัลเมทริกซ์", + "appearance.theme.slate": "สเลท", + "appearance.theme.slateDesc": "น้ำเงินสเลทโทนเย็น — ธีมสำหรับนักพัฒนาที่มีสมาธิ", + "appearance.language": "ภาษา", + "appearance.languageDesc": "เลือกภาษาของอินเทอร์เฟซหรือให้ Hermes ตามการตั้งค่าระบบของคุณ", + "language.system": "ตามระบบ", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "language.th": "ภาษาไทย", + "settings.title": "การตั้งค่า", + "settings.appearance": "ลักษณะที่ปรากฏ", + "settings.model": "โมเดล", + "settings.gateway": "เกตเวย์", + "settings.sessions": "เซสชัน", + "settings.tools": "เครื่องมือและทักษะ", + "settings.section.chat": "แชท", + "settings.section.workspace": "พื้นที่ทำงาน", + "settings.section.safety": "ความปลอดภัย", + "settings.section.memory": "หน่วยความจำและบริบท", + "settings.section.voice": "เสียง", + "settings.section.advanced": "ขั้นสูง", + "settings.mcp": "เซิร์ฟเวอร์ MCP", + "settings.config": "การกำหนดค่า", + "settings.keys": "คีย์ API", + "settings.about": "เกี่ยวกับ", + "chat.placeholder": "ถามอะไรก็ได้…", + "chat.send": "ส่ง", + "chat.stop": "หยุด", + "chat.thinking": "กำลังคิด…", + "chat.noSession": "ไม่มีเซสชันที่ใช้งานอยู่ เริ่มการสนทนาใหม่", + "commandCenter.title": "ศูนย์บัญชาการ", + "commandCenter.noSessions": "ยังไม่มีเซสชัน", + "commandCenter.loadingStatus": "กำลังโหลดสถานะ…", + "commandCenter.recentLogs": "บันทึกล่าสุด", + "commandCenter.dailyTokens": "โทเค็นรายวัน", + "commandCenter.noActivity": "ไม่มีกิจกรรมรายวัน", + "commandCenter.noModelUsage": "ยังไม่มีการใช้งานโมเดล", + "commandCenter.noSkillActivity": "ยังไม่มีกิจกรรมทักษะ", + "common.loading": "กำลังโหลด…", + "common.save": "บันทึก", + "common.cancel": "ยกเลิก", + "common.close": "ปิด", + "common.delete": "ลบ", + "common.confirm": "ยืนยัน", + "common.search": "ค้นหา…", + "onboarding.welcome": "ยินดีต้อนรับสู่ Hermes", + "onboarding.getStarted": "เริ่มต้นด้วยการเลือกผู้ให้บริการและโมเดล", + "onboarding.skip": "ข้าม", + "onboarding.continue": "ดำเนินการต่อ", + "onboarding.finish": "เสร็จสิ้น", + "file.browser": "เรียกดูไฟล์", + "file.noFiles": "ยังไม่มีไฟล์", + "terminal.title": "เทอร์มินัล", + "terminal.newTab": "แท็บใหม่", + "terminal.closeTab": "ปิดแท็บ", + "skills.title": "ทักษะ", + "skills.search": "ค้นหาทักษะ…", + "skills.noResults": "ไม่พบทักษะ", + "profiles.title": "โปรไฟล์", + "cron.title": "งาน Cron", + "cron.noJobs": "ไม่มีงานที่กำหนดเวลา", + "messaging.title": "การส่งข้อความ", + "about.version": "เวอร์ชัน", + "about.checkUpdates": "ตรวจสอบอัปเดต", + "about.upToDate": "Hermes เป็นเวอร์ชันล่าสุดแล้ว", + "about.updateAvailable": "มีอัปเดตพร้อมใช้งาน", + "about.license": "สัญญาอนุญาต MIT", + "keys.title": "คีย์ API", + "keys.noKeys": "ยังไม่ได้กำหนดค่าคีย์ API", + "keys.addKey": "เพิ่มคีย์", + "config.title": "การกำหนดค่า", + "config.edit": "แก้ไขการกำหนดค่า", + "config.reload": "โหลดการกำหนดค่าใหม่", + "gateway.title": "เกตเวย์", + "gateway.start": "เริ่มเกตเวย์", + "gateway.stop": "หยุดเกตเวย์", + "gateway.restart": "รีสตาร์ทเกตเวย์", + "gateway.running": "กำลังทำงาน", + "gateway.stopped": "หยุดแล้ว", + "sessions.title": "เซสชัน", + "sessions.search": "ค้นหาเซสชัน…", + "sessions.noResults": "ไม่พบเซสชัน", + "sessions.export": "ส่งออก", + "sessions.delete": "ลบเซสชัน", + "mcp.title": "เซิร์ฟเวอร์ MCP", + "mcp.addServer": "เพิ่มเซิร์ฟเวอร์", + "mcp.noServers": "ยังไม่ได้กำหนดค่าเซิร์ฟเวอร์ MCP", + "tools.title": "เครื่องมือและทักษะ", + "tools.noTools": "ไม่มีเครื่องมือที่พร้อมใช้งาน", + "nav.home": "หน้าแรก", + "nav.chat": "แชท", + "nav.settings": "การตั้งค่า", + "nav.files": "ไฟล์", + "nav.terminal": "เทอร์มินัล", + "header.search": "ค้นหาหรือพิมพ์คำสั่ง…", + "settings.closeSettings": "ปิดการตั้งค่า", + "settings.archivedChats": "แชทที่เก็บถาวร", + "settings.exportConfig": "ส่งออกการกำหนดค่า", + "settings.importConfig": "นำเข้าการกำหนดค่า", + "settings.resetDefaults": "รีเซ็ตเป็นค่าเริ่มต้น", + "settings.llmProviders": "ผู้ให้บริการ LLM", + "settings.searchPlaceholder.about": "เกี่ยวกับ Hermes Desktop", + "settings.searchPlaceholder.config": "ค้นหาการตั้งค่า…", + "settings.searchPlaceholder.gateway": "การเชื่อมต่อเกตเวย์…", + "settings.searchPlaceholder.keys": "ค้นหาคีย์ API…", + "settings.searchPlaceholder.mcp": "ค้นหาเซิร์ฟเวอร์ MCP…", + "settings.searchPlaceholder.sessions": "ค้นหาเซสชันที่เก็บถาวร…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "ไม่สามารถแสดงเวอร์ชันได้", + "about.updates": "อัปเดต", + "about.checkNow": "ตรวจสอบตอนนี้", + "about.checking": "กำลังตรวจสอบ…", + "about.seeWhatsNew": "ดูว่ามีอะไรใหม่", + "about.releaseNotes": "บันทึกประจำรุ่น", + "about.autoUpdates": "อัปเดตอัตโนมัติ", + "about.autoUpdatesDesc": "Hermes ตรวจสอบอัปเดตโดยอัตโนมัติในพื้นหลังและแจ้งให้คุณทราบเมื่อพร้อมใช้งาน", + "about.selfUpdateUnsupported": "รุ่นนี้ไม่สามารถอัปเดตตัวเองจากภายในแอปได้", + "about.cannotReachServer": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์อัปเดตได้", + "about.installingUpdate": "กำลังติดตั้งอัปเดต", + "about.updateReady": "มีอัปเดตใหม่พร้อมใช้งาน (รวม {count} การเปลี่ยนแปลง)", + "about.updateReady_plural": "มีอัปเดตใหม่พร้อมใช้งาน (รวม {count} การเปลี่ยนแปลง)", + "about.onLatest": "คุณใช้เวอร์ชันล่าสุดอยู่", + "about.tapCheckNow": "แตะ \"ตรวจสอบตอนนี้\" เพื่อค้นหาอัปเดต", + "about.lastChecked": "ตรวจสอบล่าสุด {time}", + "about.justNow": "เมื่อสักครู่", + "about.never": "ไม่เคย", + "about.minAgo": "{count} นาทีที่แล้ว", + "about.hoursAgo": "{count} ชั่วโมงที่แล้ว", + "about.daysAgo": "{count} วันที่แล้ว", + "about.buildInfo": "สาขา {branch} · คอมมิต {sha}", + "keys.loading": "กำลังโหลดคีย์ API และข้อมูลรับรอง…", + "keys.docs": "เอกสาร", + "keys.openDocs": "เปิดเอกสารผู้ให้บริการ", + "keys.hideValue": "ซ่อนค่า", + "keys.revealValue": "แสดงค่า", + "keys.set": "ตั้งค่าแล้ว", + "keys.notSet": "ยังไม่ได้ตั้งค่า", + "keys.replace": "แทนที่", + "keys.replaceValue": "แทนที่ค่าปัจจุบัน", + "keys.enterValue": "ป้อนค่า", + "keys.saving": "กำลังบันทึก", + "keys.save": "บันทึก", + "keys.cancel": "ยกเลิก", + "keys.clearValue": "ล้างค่า", + "keys.configured": "กำหนดค่าแล้ว {count} จาก {total}", + "keys.setCount": "ตั้งค่าแล้ว {count} จาก {total}", + "keys.countSet": "ตั้งค่าแล้ว {count} รายการ", + "keys.countKeys": "{count} คีย์", + "keys.otherProviders": "ผู้ให้บริการอื่นๆ", + "keys.categoryTools": "เครื่องมือ", + "keys.categoryMessaging": "การส่งข้อความ", + "keys.categorySettings": "การตั้งค่า", + "config.notSet": "ยังไม่ได้ตั้งค่า", + "config.commaSeparated": "ค่าที่คั่นด้วยจุลภาค", + "config.on": "เปิด", + "config.off": "ปิด", + "config.none": "ไม่มี", + "config.emptyOption": "(ไม่มี)", + "config.loading": "กำลังโหลดการกำหนดค่า Hermes…", + "config.noMatching": "ไม่พบการตั้งค่าที่ตรงกัน", + "config.noMatchingDesc": "ลองใช้คำค้นหาอื่นหรือเลือกส่วนอื่น", + "config.results": "{count} ผลลัพธ์", + "config.results_plural": "{count} ผลลัพธ์", + "gateway.loading": "กำลังโหลดการตั้งค่าเกตเวย์…", + "gateway.unavailable": "ไม่สามารถเข้าถึงการตั้งค่าเกตเวย์", + "gateway.unavailableDesc": "บริดจ์ IPC ของเดสก์ท็อปไม่เปิดเผยการตั้งค่าเกตเวย์", + "gateway.connection": "การเชื่อมต่อเกตเวย์", + "gateway.envOverride": "การแทนที่ด้วยตัวแปรสภาพแวดล้อม", + "gateway.desc": "Hermes Desktop เริ่มเกตเวย์ท้องถิ่นของตัวเองตามค่าเริ่มต้น ใช้เกตเวย์ระยะไกลเมื่อคุณต้องการให้แอปนี้ควบคุมแบ็กเอนด์ Hermes ที่ทำงานอยู่แล้วบนเครื่องอื่นหรือหลังพร็อกซีที่เชื่อถือได้", + "gateway.envOverrideTitle": "ตัวแปรสภาพแวดล้อมกำลังควบคุมเซสชันเดสก์ท็อปนี้", + "gateway.envOverrideDesc": "ยกเลิกการตั้งค่า {urlVar} และ {tokenVar} เพื่อใช้การตั้งค่าที่บันทึกไว้ด้านล่าง", + "gateway.localTitle": "เกตเวย์ท้องถิ่น", + "gateway.localDesc": "เริ่มแบ็กเอนด์ Hermes ส่วนตัวบน localhost นี่คือค่าเริ่มต้นและทำงานแบบออฟไลน์ได้", + "gateway.remoteTitle": "เกตเวย์ระยะไกล", + "gateway.remoteDesc": "เชื่อมต่อเชลล์เดสก์ท็อปนี้กับแบ็กเอนด์ Hermes ระยะไกลโดยใช้โทเค็นเซสชัน", + "gateway.remoteUrl": "URL ระยะไกล", + "gateway.remoteUrlDesc": "URL ฐานสำหรับแบ็กเอนด์แดชบอร์ดระยะไกล รองรับคำนำหน้าเส้นทาง เช่น /hermes", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "โทเค็นเซสชัน", + "gateway.sessionTokenDesc": "โทเค็นเซสชันแดชบอร์ดที่ใช้สำหรับการเข้าถึง REST และ WebSocket เว้นว่างไว้เพื่อเก็บโทเค็นที่บันทึกไว้", + "gateway.sessionTokenPlaceholder": "วางโทเค็นเซสชัน", + "gateway.existingToken": "โทเค็นที่มีอยู่ {preview}", + "gateway.tokenSaved": "บันทึกแล้ว", + "gateway.testRemote": "ทดสอบระยะไกล", + "gateway.saveRestart": "บันทึกสำหรับการรีสตาร์ทครั้งถัดไป", + "gateway.saveReconnect": "บันทึกและเชื่อมต่อใหม่", + "gateway.diagnostics": "การวินิจฉัย", + "gateway.diagnosticsDesc": "แสดง desktop.log ในตัวจัดการไฟล์ของคุณ — มีประโยชน์เมื่อเกตเวย์ไม่สามารถเริ่มทำงานได้", + "gateway.openLogs": "เปิดบันทึก", + "sessions.loading": "กำลังโหลด…", + "sessions.defaultProjectDir": "ไดเรกทอรีโปรเจกต์เริ่มต้น", + "sessions.defaultProjectDirDesc": "เซสชันใหม่จะเริ่มในโฟลเดอร์นี้เว้นแต่คุณจะเลือกอื่น ปล่อยว่างไว้เพื่อใช้ไดเรกทอรีบ้านของคุณ", + "sessions.defaultDir": "ค่าเริ่มต้นคือ {fallback}", + "sessions.notSet": "ยังไม่ได้ตั้งค่า", + "sessions.change": "เปลี่ยน", + "sessions.choose": "เลือก", + "sessions.clear": "ล้าง", + "sessions.archivedTitle": "เซสชันที่เก็บถาวร", + "sessions.archivedDesc": "แชทที่เก็บถาวรถูกซ่อนจากแถบด้านข้างแต่เก็บข้อความทั้งหมดไว้ Ctrl/⌘-คลิกแชทในแถบด้านข้างเพื่อเก็บถาวร", + "sessions.nothingArchived": "ไม่มีรายการที่เก็บถาวร", + "sessions.noSearchMatch": "ไม่มีแชทที่เก็บถาวรตรงกับการค้นหาของคุณ", + "sessions.archiveToHide": "เก็บถาวรแชทเพื่อซ่อนไว้ที่นี่", + "sessions.unarchive": "ยกเลิกการเก็บถาวร", + "sessions.deletePermanently": "ลบถาวร", + "sessions.messages": "{count} ข้อความ", + "mcp.loading": "กำลังโหลดเซิร์ฟเวอร์ MCP…", + "mcp.servers": "เซิร์ฟเวอร์ MCP", + "mcp.configured": "กำหนดค่าแล้ว {count} รายการ", + "mcp.newServer": "เซิร์ฟเวอร์ใหม่", + "mcp.reloadMCP": "โหลด MCP ใหม่", + "mcp.reloading": "กำลังโหลดใหม่...", + "mcp.noServersDesc": "เพิ่มเซิร์ฟเวอร์ stdio หรือ HTTP เพื่อแสดงเครื่องมือ MCP", + "mcp.name": "ชื่อ", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "JSON ของเซิร์ฟเวอร์", + "mcp.editServer": "แก้ไขเซิร์ฟเวอร์", + "mcp.saveServer": "บันทึกเซิร์ฟเวอร์", + "mcp.saving": "กำลังบันทึก...", + "mcp.remove": "ลบออก", + "mcp.disabled": "ปิดใช้งาน", + "model.auxTask.vision": "การมองเห็น", + "model.auxTask.visionHint": "การวิเคราะห์ภาพ", + "model.auxTask.web_extract": "สกัดเว็บ", + "model.auxTask.web_extractHint": "การสรุปหน้าเว็บ", + "model.auxTask.compression": "การบีบอัด", + "model.auxTask.compressionHint": "การกระชับบริบท", + "model.auxTask.session_search": "ค้นหาเซสชัน", + "model.auxTask.session_searchHint": "คำค้นหาการเรียกคืน", + "model.auxTask.skills_hub": "ศูนย์รวมทักษะ", + "model.auxTask.skills_hubHint": "ค้นหาทักษะ", + "model.auxTask.approval": "การอนุมัติ", + "model.auxTask.approvalHint": "อนุมัติอัตโนมัติอัจฉริยะ", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "การจัดเส้นทางเครื่องมือ MCP", + "model.auxTask.title_generation": "สร้างชื่อเรื่อง", + "model.auxTask.title_generationHint": "ชื่อเซสชัน", + "model.auxTask.curator": "ผู้คัดสรร", + "model.auxTask.curatorHint": "การตรวจสอบการใช้ทักษะ", + "model.mainModel": "โมเดลหลัก", + "model.mainDesc": "ใช้กับเซสชันใหม่ ใช้ตัวเลือกโมเดลในตัวเขียนเพื่อสลับแชทที่ใช้งานอยู่", + "model.providerPlaceholder": "ผู้ให้บริการ", + "model.modelPlaceholder": "โมเดล", + "model.apply": "ใช้", + "model.applying": "กำลังใช้…", + "model.auxiliaryModels": "โมเดลเสริม", + "model.auxiliaryDesc": "งานผู้ช่วยทำงานบนโมเดลหลักตามค่าเริ่มต้น กำหนดโมเดลเฉพาะให้กับงานใดๆ เพื่อแทนที่", + "model.resetAllToMain": "รีเซ็ตทั้งหมดเป็นหลัก", + "model.setToMain": "ตั้งเป็นหลัก", + "model.change": "เปลี่ยน", + "model.cancel": "ยกเลิก", + "model.autoUseMain": "อัตโนมัติ · ใช้โมเดลหลัก", + "model.providerDefault": "(ค่าเริ่มต้นของผู้ให้บริการ)", + "model.loading": "กำลังโหลดการกำหนดค่าโมเดล…", + "updates.checking": "กำลังตรวจสอบอัปเดต…", + "updates.available": "มีอัปเดตพร้อมใช้งาน", + "updates.downloading": "กำลังดาวน์โหลด…", + "updates.installing": "กำลังติดตั้ง…", + "updates.restart": "รีสตาร์ทเพื่ออัปเดต", + "errors.generic": "เกิดข้อผิดพลาดบางอย่าง", + "errors.notFound": "ไม่พบหน้า", + "errors.noPermission": "คุณไม่มีสิทธิ์เข้าถึงรายการนี้", + "tool.toolCall": "การเรียกใช้เครื่องมือ", + "tool.result": "ผลลัพธ์", + "tool.error": "ข้อผิดพลาด", + "tool.timeout": "หมดเวลา", + "tool.cancelled": "ยกเลิกแล้ว", + "tool.running": "กำลังทำงาน", + "tool.recovered": "กู้คืนแล้ว", + "tool.done": "เสร็จสิ้น", + "tool.output": "ผลลัพธ์ของเครื่องมือ", + "tool.searchResults": "ผลการค้นหา", + "tool.rawResponse": "การตอบกลับดิบ", + "tool.stdout": "stdout", + "tool.stderr": "stderr", + "tool.copyActivity": "คัดลอกกิจกรรม", + "composer.startingHermes": "กำลังเริ่ม Hermes...", + "composer.sendFollowUp": "ส่งข้อความติดตาม", + "composer.message": "ข้อความ", + "composer.editingQueued": "กำลังแก้ไขเทิร์นที่เข้าคิวในตัวเขียน", + "composer.attach": "แนบ", + "composer.files": "ไฟล์…", + "composer.folder": "โฟลเดอร์…", + "composer.images": "รูปภาพ…", + "composer.pasteImage": "วางรูปภาพ", + "composer.url": "URL…", + "composer.promptSnippets": "ตัวอย่างพรอมต์", + "composer.promptSnippetsDesc": "เลือกพรอมต์เริ่มต้นเพื่อวางในตัวเขียน", + "composer.voiceStart": "เริ่มการสนทนาด้วยเสียง", + "composer.queue": "เข้าคิวข้อความ", + "composer.speaking": "กำลังพูด", + "composer.transcribing": "กำลังถอดความ", + "composer.muted": "ปิดเสียง", + "composer.listening": "กำลังฟัง", + "composer.unmuteMic": "เปิดเสียงไมโครโฟน", + "composer.muteMic": "ปิดเสียงไมโครโฟน", + "composer.stopListening": "หยุดฟังและส่ง", + "composer.endVoice": "สิ้นสุดการสนทนาด้วยเสียง", + "composer.end": "สิ้นสุด", + "composer.stopDictation": "หยุดการเขียนตามคำบอก", + "composer.transcribingDictation": "กำลังถอดความการเขียนตามคำบอก", + "composer.voiceDictation": "การเขียนตามคำบอกด้วยเสียง", + "sessions.new": "เซสชันใหม่", + "sessions.running": "เซสชันกำลังทำงาน", + "sessions.actions": "การดำเนินการเซสชัน", + "sessions.reorder": "จัดเรียงใหม่", + "sessions.pin": "ปักหมุด", + "sessions.unpin": "ถอนหมุด", + "sessions.copyId": "คัดลอก ID", + "sessions.rename": "เปลี่ยนชื่อ", + "sessions.archive": "เก็บถาวร", + "sessions.renameDialog": "เปลี่ยนชื่อเซสชัน", + "sessions.renameDesc": "ตั้งชื่อแชทนี้ให้น่าจดจำ เว้นว่างไว้เพื่อล้าง", + "sessions.untitled": "เซสชันไม่มีชื่อ", + "sessions.renamed": "เปลี่ยนชื่อแล้ว", + "sessions.renameFailed": "การเปลี่ยนชื่อล้มเหลว", + "sessions.pinned": "ปักหมุดแล้ว", + "sessions.results": "ผลลัพธ์", + "sessions.allPinned": "ทุกรายการที่นี่ถูกปักหมุด ถอนหมุดแชทเพื่อแสดงในรายการล่าสุด", + "sessions.pinHint": "Shift-คลิกแชทเพื่อปักหมุด · ลากเพื่อจัดเรียงใหม่", + "sessions.loadMore": "โหลดเพิ่มเติม", + "sessions.noWorkspace": "ไม่มีพื้นที่ทำงาน", + "sessions.ungroup": "แสดงเซสชันเป็นรายการเดียว", + "sessions.groupByWorkspace": "จัดกลุ่มเซสชันตามพื้นที่ทำงาน", + "skills.tools": "ทักษะและเครื่องมือ", + "artifacts": "สิ่งประดิษฐ์", + "common.clearSearch": "ล้างการค้นหา", + "common.copy": "คัดลอก", + "common.refresh": "รีเฟรช", + "common.moreActions": "การดำเนินการเพิ่มเติม", + "common.tryAgain": "ลองอีกครั้ง", + "chat.loadingSession": "กำลังโหลดเซสชัน", + "chat.loadingResponse": "Hermes กำลังโหลดการตอบกลับ", + "chat.branchInNewChat": "แยกสาขาในแชทใหม่", + "chat.readAloud": "อ่านออกเสียง", + "chat.preparingAudio": "กำลังเตรียมเสียง...", + "chat.stopReading": "หยุดอ่าน", + "chat.editMessage": "แก้ไขข้อความ", + "chat.editableCheckpoint": "จุดตรวจที่แก้ไขได้", + "chat.restoreCheckpoint": "กู้คืนจุดตรวจ", + "chat.goForward": "ไปข้างหน้า", + "chat.restorePrevCheckpoint": "กู้คืนจุดตรวจก่อนหน้า", + "chat.restoreNextCheckpoint": "กู้คืนจุดตรวจถัดไป", + "models.title": "โมเดล", + "models.search": "ค้นหาโมเดล", + "models.addProvider": "เพิ่มผู้ให้บริการ…", + "errors.somethingBroke": "มีบางอย่างเสียหายในอินเทอร์เฟซ", + "errors.viewCrashedDesc": "มุมมองพบข้อผิดพลาดที่ไม่คาดคิด แชทและการตั้งค่าของคุณปลอดภัย - ลองอีกครั้งหรือโหลดหน้าต่างใหม่", + "errors.noProviders": "ไม่มีผู้ให้บริการที่ตรวจสอบสิทธิ์แล้ว", + "onboarding.setupTitle": "มาตั้งค่า Hermes Agent ให้คุณกัน", + "onboarding.setupDesc": "เชื่อมต่อผู้ให้บริการโมเดลเพื่อเริ่มแชท ตัวเลือกส่วนใหญ่ใช้เพียงคลิกเดียว", + "onboarding.preparing": "กำลังเริ่ม Hermes…", + "onboarding.installing": "Hermes กำลังติดตั้งให้เสร็จสิ้น โดยปกติใช้เวลาไม่ถึงหนึ่งนาทีในการรันครั้งแรก", + "onboarding.lookingUp": "กำลังค้นหาผู้ให้บริการ...", + "onboarding.otherProviders": "ผู้ให้บริการอื่นๆ", + "onboarding.collapse": "ย่อ", + "onboarding.iHaveKey": "ฉันมีคีย์ API", + "onboarding.recommended": "แนะนำ", + "onboarding.connected": "เชื่อมต่อแล้ว", + "onboarding.backToSignIn": "กลับไปที่การลงชื่อเข้าใช้", + "onboarding.getKey": "รับคีย์", + "onboarding.pasteKey": "วางคีย์ API", + "onboarding.connect": "เชื่อมต่อ", + "onboarding.connecting": "กำลังเชื่อมต่อ", + "onboarding.copyCode": "คัดลอก", + "onboarding.startSignIn": "กำลังเริ่มการลงชื่อเข้าใช้สำหรับ", + "onboarding.verifyingCode": "กำลังตรวจสอบรหัสของคุณกับ", + "onboarding.pickingModel": "เชื่อมต่อแล้ว กำลังเลือกโมเดลเริ่มต้น...", + "onboarding.signInFailed": "การลงชื่อเข้าใช้ล้มเหลว ลองอีกครั้ง", + "onboarding.pickDifferent": "เลือกผู้ให้บริการอื่น", + "onboarding.signInTitle": "ลงชื่อเข้าใช้ด้วย", + "onboarding.step1": "เราเปิด", + "onboarding.step1End": "ในเบราว์เซอร์ของคุณ", + "onboarding.step2": "อนุญาต Hermes ที่นั่น", + "onboarding.step3": "คัดลอกรหัสการอนุญาตและวางด้านล่าง", + "onboarding.pasteCode": "วางรหัสการอนุญาต", + "onboarding.reopenAuth": "เปิดหน้าการอนุญาตอีกครั้ง", + "onboarding.cancel": "ยกเลิก", + "onboarding.browserDesc": "เราเปิด", + "onboarding.browserDescEnd": "ในเบราว์เซอร์ของคุณ อนุญาต Hermes ที่นั่นแล้วคุณจะเชื่อมต่อโดยอัตโนมัติ — ไม่ต้องคัดลอกหรือวางอะไร", + "onboarding.waitingAuth": "กำลังรอให้คุณอนุญาต...", + "onboarding.reopenSignIn": "เปิดหน้าลงชื่อเข้าใช้อีกครั้ง", + "onboarding.externalDesc": "ลงชื่อเข้าใช้ผ่าน CLI ของตัวเอง รันคำสั่งนี้ในเทอร์มินัล แล้วกลับมาและเลือก \"ฉันลงชื่อเข้าใช้แล้ว\":", + "onboarding.iSignedIn": "ฉันลงชื่อเข้าใช้แล้ว", + "onboarding.enterCode": "เราเปิด", + "onboarding.enterCodeEnd": "ในเบราว์เซอร์ของคุณ ป้อนรหัสนี้ที่นั่น:", + "onboarding.reopenVerification": "เปิดหน้าการยืนยันอีกครั้ง", + "onboarding.defaultModel": "โมเดลเริ่มต้น", + "onboarding.freeTier": "ระดับฟรี", + "onboarding.pro": "Pro", + "onboarding.change": "เปลี่ยน", + "onboarding.startChatting": "เริ่มแชท", + "onboarding.docs": "เอกสาร", + "onboarding.close": "ปิด", + "onboarding.savingError": "ไม่สามารถบันทึกข้อมูลรับรอง", + "install.title": "Hermes ต้องการการติดตั้งครั้งเดียว", + "install.desc": "การติดตั้งอัตโนมัติเมื่อเริ่มครั้งแรกไม่พร้อมใช้งานบน", + "install.descEnd": "ยัง เปิดเทอร์มินัลและรันคำสั่งด้านล่าง แล้วเปิดแอปนี้อีกครั้ง การเปิดครั้งถัดไปจะข้ามขั้นตอนนี้", + "install.installCommand": "คำสั่งติดตั้ง", + "install.copyCommand": "คัดลอกคำสั่ง", + "install.viewDocs": "ดูเอกสารการติดตั้ง", + "install.willInstallTo": "จะติดตั้งไปที่", + "install.iRanIt": "ฉันรันแล้ว -- ลองใหม่", + "install.failed": "การติดตั้งล้มเหลว", + "install.settingUp": "กำลังตั้งค่า Hermes Agent", + "install.finishingUp": "กำลังดำเนินการให้เสร็จ", + "install.failedDesc": "ขั้นตอนการติดตั้งขั้นตอนหนึ่งล้มเหลว บน Windows อาจเกิดขึ้นหากมีอินสแตนซ์ Hermes CLI หรือเดสก์ท็อปอื่นทำงานอยู่ หยุดอินสแตนซ์ Hermes ที่ทำงานอยู่ทั้งหมดแล้วลองใหม่ ตรวจสอบรายละเอียดด้านล่างหรือบันทึกเดสก์ท็อปสำหรับบันทึกฉบับเต็ม", + "install.setupDesc": "นี่คือการตั้งค่าครั้งเดียว ตัวติดตั้ง Hermes กำลังดาวน์โหลดการพึ่งพาและกำหนดค่าเครื่องของคุณ การเปิดครั้งถัดไปจะข้ามขั้นตอนนี้", + "install.fetchingManifest": "กำลังดึงข้อมูล manifest ของตัวติดตั้ง...", + "install.error": "ข้อผิดพลาด", + "install.showOutput": "แสดงผลลัพธ์ของตัวติดตั้ง", + "install.hideOutput": "ซ่อนผลลัพธ์ของตัวติดตั้ง", + "install.noOutput": "ยังไม่มีผลลัพธ์", + "install.cancelInstall": "ยกเลิกการติดตั้ง", + "install.cancelling": "กำลังยกเลิก...", + "install.copyOutput": "คัดลอกผลลัพธ์", + "install.copied": "คัดลอกแล้ว!", + "install.reloadRetry": "โหลดใหม่และลองอีกครั้ง", + "install.saveLogs": "บันทึกฉบับเต็มถูกบันทึกไปที่", + "install.stepsComplete": "ขั้นตอนเสร็จสมบูรณ์", + "install.nowLabel": "ตอนนี้", + "chat.composerTip": "เคล็ดลับ: พิมพ์ @ เพื่ออ้างอิงไฟล์ในบรรทัด", + "composer.addContext": "เพิ่มบริบท", + "sessions.loadStep": "โหลด", + "sessions.moreLabel": "เพิ่มเติม", + "chat.reconnecting": "กำลังเชื่อมต่อกับ Hermes ใหม่…", + "appearance.toolCallDisplay": "การแสดงการเรียกใช้เครื่องมือ", + "appearance.toolCallDisplayDesc": "โหมดผลิตภัณฑ์ซ่อนข้อมูลเครื่องมือดิบ; โหมดเทคนิคแสดงอินพุต/เอาต์พุตเต็มรูปแบบ", + "appearance.toolViewProduct": "ผลิตภัณฑ์", + "appearance.toolViewTechnical": "เทคนิค", + "appearance.toolViewProductDesc": "กิจกรรมเครื่องมือที่เข้าใจง่ายพร้อมสรุปที่กระชับ", + "appearance.toolViewTechnicalDesc": "รวมอาร์กิวเมนต์/ผลลัพธ์เครื่องมือดิบและรายละเอียดระดับต่ำ", + "messaging.recommended": "แนะนำ", + "messaging.recommendedTelegram": "แนะนำ ID ตัวเลขที่คั่นด้วยจุลภาคจาก @userinfobot หากไม่มีสิ่งนี้ ใครก็ตามสามารถส่งข้อความตรงถึงบอทของคุณได้", + "messaging.recommendedDiscord": "แนะนำ ID ผู้ใช้ Discord ที่คั่นด้วยจุลภาค", + "messaging.recommendedSlack": "แนะนำ ID ผู้ใช้ Slack ที่คั่นด้วยจุลภาค", + "messaging.recommendedMattermost": "แนะนำ ID ผู้ใช้ Mattermost ที่คั่นด้วยจุลภาค", + "messaging.recommendedMatrix": "แนะนำ ID ผู้ใช้ที่คั่นด้วยจุลภาคในรูปแบบ @user:server", + "messaging.recommendedSignal": "แนะนำตัวระบุ Signal ที่คั่นด้วยจุลภาค", + "messaging.recommendedWhatsApp": "แนะนำหมายเลขโทรศัพท์หรือ ID WhatsApp ที่คั่นด้วยจุลภาค", + "previewConsole.resizeLabel": "ปรับขนาดคอนโซลตัวอย่าง", + "boot.ipcUnavailable": "บริดจ์ IPC ของเดสก์ท็อปไม่พร้อมใช้งาน", + "boot.backendExited": "กระบวนการพื้นหลัง Hermes ออกระหว่างการเริ่มต้น", + "boot.backendStoppedTitle": "แบ็กเอนด์หยุดทำงาน", + "boot.backendStoppedMessage": "กระบวนการพื้นหลัง Hermes ออก", + "boot.startingConnection": "กำลังเริ่มการเชื่อมต่อเดสก์ท็อป", + "boot.connectingGateway": "กำลังเชื่อมต่อเกตเวย์เดสก์ท็อปสด", + "boot.loadingConfig": "กำลังโหลดการตั้งค่า Hermes", + "boot.loadingSessions": "กำลังโหลดเซสชันล่าสุด", + "boot.desktopBootFailed": "การบูตเดสก์ท็อปล้มเหลว", + "updates.stageGettingReady": "กำลังเตรียมพร้อม…", + "updates.stageDownloading": "กำลังดาวน์โหลด…", + "updates.stageAlmostThere": "เกือบถึงแล้ว…", + "updates.stageFinishingUp": "กำลังดำเนินการให้เสร็จ…", + "updates.stageRestarting": "กำลังรีสตาร์ท Hermes…", + "updates.stageManual": "อัปเดตจากเทอร์มินัลของคุณ", + "updates.stageError": "การอัปเดตหยุดชั่วคราว", + "updates.updatingHermes": "กำลังอัปเดต Hermes…", + "updates.lookingForUpdates": "กำลังค้นหาอัปเดต…", + "updates.couldntCheck": "ไม่สามารถตรวจสอบอัปเดตได้", + "updates.updateNotAvailable": "ไม่มีอัปเดต", + "updates.checkConnection": "ตรวจสอบการเชื่อมต่อของคุณแล้วลองอีกครั้ง", + "updates.onLatest": "คุณใช้เวอร์ชันล่าสุดอยู่", + "updates.allSet": "คุณพร้อมแล้ว", + "updates.newUpdateAvailable": "มีอัปเดตใหม่พร้อมใช้งาน", + "updates.readyToInstall": "Hermes เวอร์ชันใหม่พร้อมติดตั้งแล้ว", + "updates.updateNow": "อัปเดตตอนนี้", + "updates.maybeLater": "ไว้ทีหลัง", + "updates.moreChanges": "รวมการเปลี่ยนแปลงอีก + {count} รายการ", + "updates.moreChanges_plural": "รวมการเปลี่ยนแปลงอีก + {count} รายการ", + "updates.updateFromTerminal": "อัปเดตจากเทอร์มินัลของคุณ", + "updates.terminalDesc": "คุณติดตั้ง Hermes จากบรรทัดคำสั่ง ดังนั้นการอัปเดตก็ทำงานที่นั่นด้วย วางสิ่งนี้ในเทอร์มินัลของคุณ:", + "updates.copied": "คัดลอกแล้ว", + "updates.copy": "คัดลอก", + "updates.pickupNewVersion": "Hermes จะรับเวอร์ชันใหม่ในครั้งถัดไปที่คุณเปิด", + "updates.done": "เสร็จสิ้น", + "updates.updaterDesc": "ตัวอัปเดต Hermes จะ接管ในหน้าต่างของตัวเองและเปิด Hermes อีกครั้งเมื่อเสร็จสิ้น", + "updates.closeToApply": "Hermes จะปิดเพื่อใช้การอัปเดต", + "updates.updateDidntFinish": "การอัปเดตไม่เสร็จสมบูรณ์", + "updates.nothingLost": "ไม่ต้องกังวล — ไม่มีอะไรสูญหาย คุณสามารถลองอีกครั้งตอนนี้", + "updates.notNow": "ไม่ใช่ตอนนี้", + "commandCenter.sessionsPanel": "แผงเซสชัน", + "commandCenter.systemPanel": "แผงระบบ", + "commandCenter.usagePanel": "แผงการใช้งาน", + "commandCenter.navigate": "นำทาง", + "commandCenter.noMatchingResults": "ไม่พบผลลัพธ์ที่ตรงกัน", + "commandCenter.noSessionsYet": "ยังไม่มีเซสชัน", + "commandCenter.unpinSession": "ถอนหมุดเซสชัน", + "commandCenter.pinSession": "ปักหมุดเซสชัน", + "commandCenter.exportSession": "ส่งออกเซสชัน", + "commandCenter.deleteSession": "ลบเซสชัน", + "commandCenter.gatewayRunning": "เกตเวย์การส่งข้อความกำลังทำงาน", + "commandCenter.gatewayStopped": "เกตเวย์การส่งข้อความหยุดทำงาน", + "commandCenter.restartMsg": "รีสตาร์ทการส่งข้อความ", + "commandCenter.updateHermes": "อัปเดต Hermes", + "commandCenter.noLogsLoaded": "ยังไม่ได้โหลดบันทึก", + "commandCenter.closeLabel": "ปิดศูนย์บัญชาการ", + "commandCenter.searchPlaceholder": "ค้นหาเซสชัน มุมมอง และการดำเนินการ", + "commandCenter.statSessions": "เซสชัน", + "commandCenter.statApiCalls": "การเรียก API", + "commandCenter.statTokens": "โทเค็นเข้า/ออก", + "commandCenter.statEstCost": "ค่าใช้จ่ายโดยประมาณ", + "commandCenter.actualCost": "จริง {cost}", + "commandCenter.loadingUsage": "กำลังโหลดการใช้งาน...", + "commandCenter.noUsageDesc": "ไม่มีการใช้งานใน {count} วันที่ผ่านมา", + "commandCenter.retry": "ลองใหม่", + "commandCenter.tokenInput": "เข้า", + "commandCenter.tokenOutput": "ออก", + "commandCenter.noDailyActivity": "ไม่มีกิจกรรมรายวัน", + "commandCenter.topModels": "โมเดลยอดนิยม", + "commandCenter.topSkills": "ทักษะยอดนิยม", + "commandCenter.actionsLabel": "การดำเนินการ", + "commandCenter.systemRunning": "กำลังทำงาน", + "commandCenter.systemDone": "เสร็จสิ้น", + "commandCenter.systemFailed": "ล้มเหลว", + "mcp.nameRequired": "ต้องระบุชื่อ", + "mcp.nameRequiredDesc": "กำหนดคีย์การกำหนดค่าให้กับเซิร์ฟเวอร์ MCP นี้", + "mcp.invalidJson": "การกำหนดค่าเซิร์ฟเวอร์ต้องเป็นออบเจกต์ JSON", + "mcp.invalidJsonDesc": "JSON MCP ไม่ถูกต้อง", + "mcp.saved": "บันทึกเซิร์ฟเวอร์ MCP แล้ว", + "mcp.savedDesc": "{name} มีผลหลังจากการโหลด MCP ใหม่", + "mcp.saveFailed": "การบันทึกล้มเหลว", + "mcp.removeFailed": "การลบล้มเหลว", + "mcp.gatewayUnavailable": "เกตเวย์ไม่พร้อมใช้งาน", + "mcp.gatewayUnavailableDesc": "เชื่อมต่อเกตเวย์ใหม่ก่อนโหลด MCP ใหม่", + "mcp.reloadedTitle": "โหลดเครื่องมือ MCP ใหม่แล้ว", + "mcp.reloadedDesc": "สคีมาเครื่องมือใหม่มีผลกับเทิร์นใหม่", + "mcp.reloadFailed": "การโหลด MCP ใหม่ล้มเหลว", + "urlDialog.title": "แนบ URL", + "urlDialog.description": "Hermes จะดึงหน้าเว็บและรวมเป็นบริบทสำหรับเทิร์นนี้", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "รวม URL เต็ม เช่น", + "urlDialog.attach": "แนบ", + "model.options": "ตัวเลือก", + "model.thinking": "การคิด", + "model.fast": "เร็ว", + "model.effort": "ความพยายาม", + "model.noOptions": "ไม่มีตัวเลือกสำหรับโมเดลนี้", + "model.optionUpdateFailed": "การอัปเดตตัวเลือกโมเดลล้มเหลว", + "model.fastModeUpdateFailed": "การอัปเดตโหมดเร็วล้มเหลว", + "model.effortMinimal": "น้อยที่สุด", + "model.effortLow": "ต่ำ", + "model.effortMedium": "ปานกลาง", + "model.effortHigh": "สูง", + "model.effortMax": "สูงสุด", + "gateway.connected": "เชื่อมต่อแล้ว", + "gateway.connecting": "กำลังเชื่อมต่อ", + "gateway.disconnected": "ตัดการเชื่อมต่อแล้ว", + "gateway.inferenceReady": "การอนุมานพร้อมแล้ว", + "gateway.inferenceNotReady": "การอนุมานยังไม่พร้อม", + "gateway.checkingInference": "กำลังตรวจสอบการอนุมาน", + "gateway.openSystemPanel": "เปิดแผงระบบ", + "gateway.connectionLabel": "การเชื่อมต่อ:", + "gateway.recentActivity": "กิจกรรมล่าสุด", + "gateway.viewAllLogs": "ดูบันทึกทั้งหมด →", + "gateway.messagingPlatforms": "แพลตฟอร์มการส่งข้อความ", + "titlebar.hideSidebar": "ซ่อนแถบด้านข้าง", + "titlebar.showSidebar": "แสดงแถบด้านข้าง", + "titlebar.search": "ค้นหา", + "titlebar.searchTitle": "ค้นหาเซสชัน มุมมอง และการดำเนินการ", + "titlebar.hideRightSidebar": "ซ่อนแถบด้านข้างขวา", + "titlebar.showRightSidebar": "แสดงแถบด้านข้างขวา", + "titlebar.unmuteHaptics": "เปิดเสียงสัมผัส", + "titlebar.muteHaptics": "ปิดเสียงสัมผัส", + "titlebar.openSettings": "เปิดการตั้งค่า", + "titlebar.profiles": "โปรไฟล์", + "titlebar.profilesDesc": "สภาพแวดล้อม Hermes ขั้นสูงสำหรับบุคคล การกำหนดค่า ทักษะ และ SOUL.md แยกต่างหาก", + "titlebar.manageProfiles": "จัดการโปรไฟล์", + "pagination.ariaLabel": "การแบ่งหน้า", + "pagination.prevAria": "ไปที่หน้าก่อนหน้า", + "pagination.prev": "ก่อนหน้า", + "pagination.nextAria": "ไปที่หน้าถัดไป", + "pagination.next": "ถัดไป", + "boot.couldNotStart": "Hermes ไม่สามารถเริ่มทำงานได้", + "boot.recoveryDesc": "เกตเวย์พื้นหลังไม่เริ่มทำงาน ลองขั้นตอนการกู้คืนด้านล่าง — ไม่มีสิ่งใดที่นี่ลบแชทหรือการตั้งค่าของคุณ", + "boot.retry": "ลองใหม่", + "boot.repairInstall": "ซ่อมแซมการติดตั้ง", + "boot.useLocalGateway": "ใช้เกตเวย์ท้องถิ่น", + "boot.openLogs": "เปิดบันทึก", + "boot.repairHint": "การซ่อมแซมทำงานตัวติดตั้งอีกครั้งและอาจใช้เวลาสองสามนาทีบนเครื่องใหม่", + "boot.showLogs": "แสดงบันทึกล่าสุด", + "boot.hideLogs": "ซ่อนบันทึกล่าสุด", + "bootstrap.pending": "รอดำเนินการ", + "bootstrap.running": "กำลังติดตั้ง", + "bootstrap.done": "เสร็จสิ้น", + "bootstrap.skipped": "ข้ามแล้ว", + "bootstrap.failed": "ล้มเหลว", + "model.switch": "สลับโมเดล", + "model.unknown": "(ไม่ทราบ)", + "model.filterPlaceholder": "กรองผู้ให้บริการและโมเดล...", + "model.persistGlobal": "คงอยู่ทั่วโลก", + "model.persistGlobalSession": "คงอยู่ทั่วโลก (มิฉะนั้นเฉพาะเซสชันนี้)", + "model.couldNotLoad": "ไม่สามารถโหลดโมเดล", + "model.proLockedDesc": "โมเดล Pro ต้องการการสมัครสมาชิก Nous แบบชำระเงิน", + "model.priceTooltip": "ราคาอินพุต / เอาต์พุตต่อล้านโทเค็น", + "model.freePrice": "ฟรี", + "model.currentLabel": "ปัจจุบัน:", + "model.addProviderBtn": "เพิ่มผู้ให้บริการ", + "sidebar.sheetTitle": "แถบด้านข้าง", + "sidebar.sheetDesc": "แสดงแถบด้านข้างมือถือ", + "sidebar.toggle": "สลับแถบด้านข้าง", + "clarify.hermesIsAsking": "Hermes กำลังถาม", + "clarify.loadingQuestion": "กำลังโหลดคำถาม…", + "clarify.otherTypeAnswer": "อื่นๆ (พิมพ์คำตอบของคุณ)", + "clarify.placeholderAnswer": "พิมพ์คำตอบของคุณ…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter เพื่อส่ง", + "clarify.back": "กลับ", + "clarify.skip": "ข้าม", + "clarify.couldNotSend": "ไม่สามารถส่งการตอบกลับการชี้แจง", + "clarify.pickLabel": "1–{n} เพื่อเลือก", + "tool.recoveredAfter": "กู้คืนหลังจาก 1 ขั้นตอนที่ล้มเหลว", + "tool.recoveredAfterN": "กู้คืนหลังจาก {count} ขั้นตอนที่ล้มเหลว", + "tool.oneStepFailed": "1 ขั้นตอนล้มเหลว", + "tool.nStepsFailed": "{count} ขั้นตอนล้มเหลว", + "intro.fallback1h": "วันนี้เราจะย้ายอะไร?", + "intro.fallback1b": "ส่งบั๊ก สาขา แผน หรือไอเดียคร่าวๆ ฉันจะตรวจสอบรีโปและเปลี่ยนเป็นขั้นตอนถัดไปที่เป็นรูปธรรม", + "intro.fallback2h": "คุณคิดอะไรอยู่?", + "intro.fallback2b": "นำโค้ด คำถาม หรือส่วนที่ติดขัดมา ฉันจะอ่านสถานการณ์ก่อนทำการเปลี่ยนแปลง", + "intro.fallback3h": "Hermes ควรดูอะไร?", + "intro.fallback3b": "ส่งงาน เส้นทางที่ล้มเหลว หรือแผนที่ยังไม่สมบูรณ์ ฉันจะช่วยเปลี่ยนเป็นการดำเนินการ", + "intro.fallback4h": "เราควรเริ่มที่ไหน?", + "intro.fallback4b": "นำปัญหา เป้าหมาย หรือไฟล์มา ฉันจะตรวจสอบก่อนและทำให้ขั้นตอนถัดไปเป็นรูปธรรม", + "intro.fallback5h": "อะไรต้องการความสนใจ?", + "intro.fallback5b": "ส่งบริบทที่คุณมี ฉันจะช่วยจัดเรียงเป็นแผนหรือการแก้ไข", + "intro.personality.heading1": "โหมด {label} เปิดอยู่ เราควรทำงานอะไร?", + "intro.personality.body1": "ส่งงาน ไฟล์ หรือไอเดียคร่าวๆ ฉันจะใช้เสียงที่คุณกำหนดค่าและทำให้งานยึดกับรีโปนี้", + "intro.personality.heading2": "{label} Hermes ต้องเห็นอะไร?", + "intro.personality.body2": "นำบริบทหรือส่วนที่ติดขัดมา ฉันจะปรับตามบุคลิกที่คุณกำหนดค่า", + "intro.personality.heading3": "โหมด {label} พร้อมแล้ว", + "intro.personality.body3": "ส่งปัญหา ไฟล์ หรือไอเดีย ฉันจะทำตามบุคลิกที่คุณกำหนดค่า", + "intro.personality.heading4": "{label} Hermes ควรจัดการอะไร?", + "intro.personality.body4": "วางงานที่นี่ ฉันจะทำให้งานยึดกับรีโป", + "intro.personality.heading5": "เราควรเริ่มที่ไหน?", + "intro.personality.body5": "ให้บริบทกับฉันแล้วฉันจะตอบในโหมด {label}", + "intro.brand": "HERMES AGENT", + "install.line": "บรรทัด", + "install.lines": "บรรทัด", + "artifacts.noArtifactsFound": "ไม่พบสิ่งประดิษฐ์", + "previewConsole.noMessages": "ยังไม่มีข้อความคอนโซล", + "agents.spawnTree": "ต้นไม้การสร้าง", + "agents.liveSubagentActivity": "กิจกรรมซับเอเจนต์สดสำหรับเทิร์นปัจจุบัน", + "agents.noLiveSubagents": "ไม่มีซับเอเจนต์สด", + "agents.files": "ไฟล์", + "profiles.noProfilesYet": "ยังไม่มีโปรไฟล์", + "profiles.selectProfile": "เลือกโปรไฟล์เพื่อดูรายละเอียด", + "profiles.deleteProfile": "ลบโปรไฟล์?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "การเปลี่ยนแปลงที่ยังไม่ได้บันทึก", + "profiles.newProfile": "โปรไฟล์ใหม่", + "profiles.cloneFromDefault": "โคลนจากค่าเริ่มต้น", + "profiles.renameProfile": "เปลี่ยนชื่อโปรไฟล์", + "messaging.gatewayStopped": "เกตเวย์การส่งข้อความหยุดทำงาน", + "messaging.getCredentials": "รับข้อมูลรับรองของคุณ", + "messaging.required": "จำเป็น", + "messaging.unsavedChanges": "การเปลี่ยนแปลงที่ยังไม่ได้บันทึก", + "messaging.saved": "บันทึกแล้ว", + "cron.deleteCronJob": "ลบงาน cron?", + "cron.optional": "ไม่บังคับ", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "เกตเวย์", + "gateway.inferenceStatus": "สถานะการอนุมานเกตเวย์", + "agents.label": "เอเจนต์", + "agents.open": "เปิดเอเจนต์", + "agents.close": "ปิดเอเจนต์", + "agents.subagent": "ซับเอเจนต์", + "agents.subagents": "ซับเอเจนต์", + "agents.failed": "ล้มเหลว", + "agents.running": "กำลังทำงาน", + "cron.label": "Cron", + "cron.open": "เปิดงาน cron", + "commandCenter.open": "เปิดศูนย์บัญชาการ", + "commandCenter.close": "ปิดศูนย์บัญชาการ", + "mcp.giveConfigKey": "กำหนดคีย์การกำหนดค่าให้กับเซิร์ฟเวอร์ MCP นี้", + "mcp.reconnectGateway": "เชื่อมต่อเกตเวย์ใหม่ก่อนโหลด MCP ใหม่", + "mcp.newSchemas": "สคีมาเครื่องมือใหม่มีผลกับเทิร์นใหม่", + "mcp.loadingServers": "กำลังโหลดเซิร์ฟเวอร์ MCP...", + "mcp.serverName": "ชื่อ", + "mcp.serversTitle": "เซิร์ฟเวอร์ MCP", + "mcp.noServersTitle": "ไม่มีเซิร์ฟเวอร์ MCP", + "sessions.nothingArchivedTitle": "ไม่มีรายการที่เก็บถาวร", + "sessions.deletePermanentlyTitle": "ลบถาวร", + "sessions.defaultProjectDirTitle": "ไดเรกทอรีโปรเจกต์เริ่มต้น", + "sessions.loadingArchived": "กำลังโหลดเซสชันที่เก็บถาวร…", + "sessions.restored": "กู้คืนแล้ว", + "sessions.projectDirUpdated": "อัปเดตไดเรกทอรีโปรเจกต์เริ่มต้นแล้ว", + "gateway.enterUrlFirst": "ป้อน URL ระยะไกลและโทเค็นเซสชันก่อนสลับ", + "gateway.enterUrlFirstTest": "ป้อน URL ระยะไกลและโทเค็นเซสชันก่อนทดสอบ", + "config.saving": "กำลังบันทึก…", + "keys.openProviderDocs": "เปิดเอกสารผู้ให้บริการ", + "config.label.defaultModel": "โมเดลเริ่มต้น", + "config.label.contextWindow": "หน้าต่างบริบท", + "config.label.fallbackModels": "โมเดลสำรอง", + "config.label.enabledToolsets": "ชุดเครื่องมือที่เปิดใช้งาน", + "config.label.timezone": "เขตเวลา", + "config.label.personality": "บุคลิกภาพ", + "config.label.reasoningBlocks": "บล็อกการให้เหตุผล", + "config.label.maxAgentSteps": "ขั้นตอนเอเจนต์สูงสุด", + "config.label.imageAttachments": "การแนบรูปภาพ", + "config.label.workingDirectory": "ไดเรกทอรีทำงาน", + "config.label.executionBackend": "แบ็กเอนด์การดำเนินการ", + "config.label.commandTimeout": "หมดเวลาคำสั่ง", + "config.label.persistentShell": "เชลล์ถาวร", + "config.label.envPassthrough": "การส่งผ่านสภาพแวดล้อม", + "config.label.fileReadLimit": "ขีดจำกัดการอ่านไฟล์", + "config.label.terminalOutputLimit": "ขีดจำกัดผลลัพธ์เทอร์มินัล", + "config.label.filePageLimit": "ขีดจำกัดหน้าไฟล์", + "config.label.lineLengthLimit": "ขีดจำกัดความยาวบรรทัด", + "config.label.codeExecutionMode": "โหมดการดำเนินการโค้ด", + "config.label.approvalMode": "โหมดการอนุมัติ", + "config.label.approvalTimeout": "หมดเวลาการอนุมัติ", + "config.label.confirmMcpReloads": "ยืนยันการโหลด MCP ใหม่", + "config.label.commandAllowlist": "รายการอนุญาตคำสั่ง", + "config.label.redactSecrets": "ปกปิดความลับ", + "config.label.allowPrivateUrls": "อนุญาต URL ส่วนตัว", + "config.label.browserPrivateUrls": "URL ส่วนตัวของเบราว์เซอร์", + "config.label.localBrowserForPrivateUrls": "เบราว์เซอร์ท้องถิ่นสำหรับ URL ส่วนตัว", + "config.label.fileCheckpoints": "จุดตรวจไฟล์", + "config.label.checkpointLimit": "ขีดจำกัดจุดตรวจ", + "config.label.voiceShortcut": "ทางลัดเสียง", + "config.label.maxRecordingLength": "ความยาวการบันทึกสูงสุด", + "config.label.readResponsesAloud": "อ่านการตอบกลับออกเสียง", + "config.label.speechToText": "เสียงเป็นข้อความ", + "config.label.speechToTextProvider": "ผู้ให้บริการเสียงเป็นข้อความ", + "config.label.localTranscriptionModel": "โมเดลการถอดความท้องถิ่น", + "config.label.transcriptionLanguage": "ภาษาการถอดความ", + "config.label.elevenlabsSttModel": "โมเดล STT ของ ElevenLabs", + "config.label.elevenlabsLanguage": "ภาษา ElevenLabs", + "config.label.tagAudioEvents": "แท็กเหตุการณ์เสียง", + "config.label.speakerDiarization": "การแยกผู้พูด", + "config.label.textToSpeechProvider": "ผู้ให้บริการข้อความเป็นเสียง", + "config.label.edgeVoice": "เสียง Edge", + "config.label.openaiTtsModel": "โมเดล TTS ของ OpenAI", + "config.label.openaiVoice": "เสียง OpenAI", + "config.label.elevenlabsVoice": "เสียง ElevenLabs", + "config.label.elevenlabsModel": "โมเดล ElevenLabs", + "config.label.persistentMemory": "หน่วยความจำถาวร", + "config.label.userProfile": "โปรไฟล์ผู้ใช้", + "config.label.memoryBudget": "งบประมาณหน่วยความจำ", + "config.label.profileBudget": "งบประมาณโปรไฟล์", + "config.label.memoryProvider": "ผู้ให้บริการหน่วยความจำ", + "config.label.contextEngine": "เอ็นจินบริบท", + "config.label.autoCompression": "การบีบอัดอัตโนมัติ", + "config.label.compressionThreshold": "เกณฑ์การบีบอัด", + "config.label.compressionTarget": "เป้าหมายการบีบอัด", + "config.label.protectedRecentMessages": "ข้อความล่าสุดที่ได้รับการป้องกัน", + "config.label.apiRetries": "การลอง API ใหม่", + "config.label.serviceTier": "ระดับบริการ", + "config.label.toolUseEnforcement": "การบังคับใช้เครื่องมือ", + "config.label.subagentModel": "โมเดลซับเอเจนต์", + "config.label.subagentProvider": "ผู้ให้บริการซับเอเจนต์", + "config.label.subagentTurnLimit": "ขีดจำกัดเทิร์นซับเอเจนต์", + "config.label.parallelSubagents": "ซับเอเจนต์คู่ขนาน", + "config.label.subagentTimeout": "หมดเวลาซับเอเจนต์", + "config.label.subagentReasoningEffort": "ความพยายามในการให้เหตุผลของซับเอเจนต์", + "config.desc.defaultModel": "ใช้สำหรับแชทใหม่เว้นแต่คุณเลือกโมเดลอื่นในตัวเขียน", + "config.desc.contextWindow": "ปล่อยเป็น 0 เพื่อใช้หน้าต่างบริบทที่ตรวจพบของโมเดลที่เลือก", + "config.desc.fallbackModels": "รายการผู้ให้บริการสำรอง:โมเดลที่จะลองหากโมเดลเริ่มต้นล้มเหลว", + "config.desc.personality": "สไตล์ผู้ช่วยเริ่มต้นสำหรับเซสชันใหม่", + "config.desc.timezone": "ใช้เมื่อ Hermes ต้องการบริบทเวลาท้องถิ่น เว้นว่างไว้เพื่อใช้เขตเวลาของระบบ", + "config.desc.reasoningBlocks": "แสดงส่วนการให้เหตุผลเมื่อแบ็กเอนด์ให้มา", + "config.desc.imageAttachments": "ควบคุมวิธีการส่งการแนบรูปภาพไปยังโมเดล", + "config.desc.workingDirectory": "โฟลเดอร์โปรเจกต์เริ่มต้นสำหรับงานเครื่องมือและเทอร์มินัล", + "config.desc.codeExecutionMode": "ความเข้มงวดในการกำหนดขอบเขตการดำเนินการโค้ดกับโปรเจกต์ปัจจุบัน", + "config.desc.persistentShell": "เก็บสถานะเชลล์ระหว่างคำสั่งเมื่อแบ็กเอนด์รองรับ", + "config.desc.envPassthrough": "ตัวแปรสภาพแวดล้อมที่จะส่งผ่านไปยังการดำเนินการเครื่องมือ", + "config.desc.fileReadLimit": "จำนวนอักขระสูงสุดที่ Hermes สามารถอ่านจากคำขอไฟล์หนึ่งครั้ง", + "config.desc.approvalMode": "วิธีที่ Hermes จัดการคำสั่งที่ต้องการการอนุมัติอย่างชัดแจ้ง", + "config.desc.approvalTimeout": "ระยะเวลาที่พร้อมต์การอนุมัติรอก่อนหมดเวลา", + "config.desc.redactSecrets": "ซ่อนความลับที่ตรวจพบจากเนื้อหาที่โมเดลมองเห็นเมื่อเป็นไปได้", + "config.desc.fileCheckpoints": "สร้างสแนปชอตย้อนกลับก่อนการแก้ไขไฟล์", + "config.desc.persistentMemory": "บันทึกหน่วยความจำที่คงทนซึ่งสามารถช่วยเซสชันในอนาคต", + "config.desc.userProfile": "รักษาโปรไฟล์ขนาดกะทัดรัดของการตั้งค่าผู้ใช้", + "config.desc.contextEngine": "กลยุทธ์สำหรับจัดการการสนทนาที่ยาวใกล้ขีดจำกัดบริบท", + "config.desc.autoCompression": "สรุปบริบทเก่าเมื่อการสนทนามีขนาดใหญ่", + "config.desc.readResponsesAloud": "พูดการตอบกลับของผู้ช่วยโดยอัตโนมัติ", + "config.desc.speechToText": "เปิดใช้งานการถอดเสียงแบบท้องถิ่นหรือผ่านผู้ให้บริการ", + "config.desc.elevenlabsLanguage": "รหัสภาษา ISO-639-3 ที่เป็นทางเลือก เว้นว่างไว้เพื่อให้ ElevenLabs ตรวจจับอัตโนมัติ", + "config.desc.maxAgentSteps": "ขอบเขตสูงสุดสำหรับเทิร์นการเรียกใช้เครื่องมือก่อนที่ Hermes จะหยุดการรัน", + "mcp.failedToLoad": "การโหลดการกำหนดค่า MCP ล้มเหลว", + "mcp.invalidJsonShort": "JSON MCP ไม่ถูกต้อง", + "mcp.serverSaved": "บันทึกเซิร์ฟเวอร์ MCP แล้ว", + "mcp.toolsReloaded": "โหลดเครื่องมือ MCP ใหม่แล้ว", + "mcp.emptyDesc": "เพิ่มเซิร์ฟเวอร์ stdio หรือ HTTP เพื่อแสดงเครื่องมือ MCP", + "sessions.loadFailed": "ไม่สามารถโหลดเซสชันที่เก็บถาวร", + "sessions.unarchiveFailed": "การยกเลิกการเก็บถาวรล้มเหลว", + "sessions.deleteFailed": "การลบล้มเหลว", + "sessions.archiveHint": "เก็บถาวรแชทเพื่อซ่อนไว้ที่นี่", + "sessions.updateDirFailed": "ไม่สามารถอัปเดตไดเรกทอรีเริ่มต้น", + "sessions.clearDirFailed": "ไม่สามารถล้างไดเรกทอรีเริ่มต้น", + "keys.showAdvanced": "แสดงขั้นสูง", + "keys.loadFailed": "การโหลดคีย์ API ล้มเหลว", + "keys.credentialSaved": "บันทึกข้อมูลรับรองแล้ว", + "keys.credentialRemoved": "ลบข้อมูลรับรองแล้ว", + "provider.desc.nousPortal": "การแทนที่ URL ฐาน Nous Portal", + "provider.desc.openRouter": "คีย์ API OpenRouter (สำหรับการมองเห็น ตัวช่วยการขูดเว็บ และ MoA)", + "provider.desc.google": "คีย์ API Google AI Studio (รู้จักในชื่อ GEMINI_API_KEY ด้วย)", + "provider.desc.gemini": "ID โปรเจกต์ GCP สำหรับระดับ Gemini แบบชำระเงิน (ระดับฟรีจัดเตรียมให้อัตโนมัติ)", + "provider.desc.anthropic": "คีย์ API Anthropic", + "provider.desc.deepseek": "URL ฐาน DeepSeek API แบบกำหนดเอง (ขั้นสูง)", + "provider.desc.xai": "การแทนที่ URL ฐาน xAI", + "provider.desc.huggingface": "การแทนที่ URL ฐาน Hugging Face Inference Providers", + "provider.desc.kimi": "คีย์ API Kimi / Moonshot China", + "provider.desc.minimax": "การแทนที่ URL ฐาน MiniMax (จีน)", + "provider.desc.minimaxCn": "คีย์ API MiniMax China", + "provider.desc.dashscope": "URL ฐาน DashScope แบบกำหนดเอง (ค่าเริ่มต้น: ปลายทาง coding-intl ที่เข้ากันได้กับ OpenAI)", + "provider.desc.glm": "คีย์ API GLM (Z.AI)", + "provider.desc.nvidia": "การแทนที่ URL ฐาน NVIDIA NIM (เช่น http://localhost:8000/v1 สำหรับ NIM ท้องถิ่น)", + "provider.desc.opencodeGo": "คีย์ API OpenCode Go", + "provider.desc.opencodeZen": "คีย์ API OpenCode Zen", + "provider.desc.xiaomi": "การแทนที่ URL ฐาน Xiaomi MiMo (ค่าเริ่มต้น: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "คีย์ API Kilo Code", + "provider.desc.aiGateway": "คีย์ API AI Gateway (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "คีย์ API ElevenLabs", + "provider.desc.openai": "คีย์ API OpenAI (สำหรับการประมวลผลเสียงผ่านพร็อกซี)", + "provider.desc.mistral": "คีย์ API Mistral (สำหรับ STT/TTS)", + "provider.desc.groq": "คีย์ API Groq (สำหรับ STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "URL Firecrawl API สำหรับอินสแตนซ์ที่โฮสต์เอง (ไม่บังคับ)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "การแทนที่ URL ฐาน Nous Portal", + "provider.desc.openrouter": "คีย์ API OpenRouter (สำหรับการมองเห็น ตัวช่วยการขูดเว็บ และ MoA)", + "provider.desc.lmstudio": "การแทนที่ URL ฐาน Z.AI / GLM", + "provider.desc.zai": "URL ฐาน Azure Foundry (ตั้งค่าผ่าน 'hermes model' สำหรับการกำหนดค่าเฉพาะปลายทาง)", + "provider.desc.stepfun": "การแทนที่ URL ฐาน StepFun Step Plan", + "provider.desc.arcee": "การแทนที่ URL ฐาน Arcee AI", + "provider.desc.gmi": "การแทนที่ URL ฐาน GMI Cloud", + "provider.desc.qwenportal": "การแทนที่ URL ฐาน Qwen Portal (ค่าเริ่มต้น: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "การแทนที่ URL ฐาน OpenCode Go", + "provider.desc.ollamacloud": "การแทนที่ URL ฐาน Ollama Cloud (ค่าเริ่มต้น: https://ollama.com/v1)", + "provider.desc.awsbedrock": "โปรไฟล์ที่มีชื่อ AWS สำหรับการตรวจสอบสิทธิ์ Bedrock (จาก ~/.aws/credentials)", + "provider.desc.exa": "คีย์ API Exa สำหรับการค้นหาเว็บและเนื้อหาที่เน้น AI", + "provider.desc.parallel": "คีย์ API Parallel สำหรับการค้นหาเว็บและสกัดที่เน้น AI", + "titlebar.language": "ภาษา", + "titlebar.languageDesc": "เลือกภาษาแสดงผลสำหรับอินเทอร์เฟซ", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} diff --git a/apps/desktop/src/locales/vi.json b/apps/desktop/src/locales/vi.json new file mode 100644 index 000000000000..f0052904a991 --- /dev/null +++ b/apps/desktop/src/locales/vi.json @@ -0,0 +1,864 @@ +{ + "appearance.title": "Giao diện", + "appearance.description": "Đây là các tùy chọn hiển thị chỉ dành cho desktop. Chế độ màu điều khiển độ sáng; chủ đề điều khiển bảng màu nhấn và kiểu dáng bề mặt trò chuyện.", + "appearance.colorMode": "Chế độ màu", + "appearance.colorModeDesc": "Chọn chế độ cố định hoặc để Hermes theo cài đặt hệ thống của bạn.", + "appearance.theme": "Chủ đề", + "appearance.themeDesc": "Chọn bảng màu cho bề mặt trò chuyện và màu nhấn giao diện.", + "appearance.mode.light": "Sáng", + "appearance.mode.lightDesc": "Bề mặt desktop sáng", + "appearance.mode.dark": "Tối", + "appearance.mode.darkDesc": "Không gian làm việc giảm chói", + "appearance.mode.system": "Hệ thống", + "appearance.mode.systemDesc": "Theo giao diện hệ điều hành", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "Tông trung tính kính với điểm nhấn xanh Nous", + "appearance.theme.midnight": "Nửa đêm", + "appearance.theme.midnightDesc": "Xanh tím đậm với điểm nhấn lạnh", + "appearance.theme.ember": "Than hồng", + "appearance.theme.emberDesc": "Đỏ thẫm và đồng ấm áp — phong cách lò rèn", + "appearance.theme.mono": "Đơn sắc", + "appearance.theme.monoDesc": "Thang xám sạch sẽ — tối giản và tập trung", + "appearance.theme.cyberpunk": "Cyberpunk", + "appearance.theme.cyberpunkDesc": "Xanh neon trên nền đen — terminal ma trận", + "appearance.theme.slate": "Đá phiến", + "appearance.theme.slateDesc": "Xanh đá phiến mát — chủ đề lập trình tập trung", + "appearance.language": "Ngôn ngữ", + "appearance.languageDesc": "Chọn ngôn ngữ giao diện hoặc để Hermes theo cài đặt hệ thống của bạn.", + "language.system": "Theo hệ thống", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "Cài đặt", + "settings.appearance": "Giao diện", + "settings.model": "Mô hình", + "settings.gateway": "Cổng kết nối", + "settings.sessions": "Phiên", + "settings.tools": "Công cụ & Kỹ năng", + "settings.section.chat": "Trò chuyện", + "settings.section.workspace": "Không gian làm việc", + "settings.section.safety": "An toàn", + "settings.section.memory": "Bộ nhớ & Ngữ cảnh", + "settings.section.voice": "Giọng nói", + "settings.section.advanced": "Nâng cao", + "settings.mcp": "Máy chủ MCP", + "settings.config": "Cấu hình", + "settings.keys": "Khóa API", + "settings.about": "Giới thiệu", + "chat.placeholder": "Hỏi tôi bất cứ điều gì…", + "chat.send": "Gửi", + "chat.stop": "Dừng", + "chat.thinking": "Đang suy nghĩ…", + "chat.noSession": "Không có phiên hoạt động. Bắt đầu cuộc trò chuyện mới.", + "commandCenter.title": "Trung tâm điều khiển", + "commandCenter.noSessions": "Chưa có phiên nào.", + "commandCenter.loadingStatus": "Đang tải trạng thái…", + "commandCenter.recentLogs": "Nhật ký gần đây", + "commandCenter.dailyTokens": "Token hôm nay", + "commandCenter.noActivity": "Không có hoạt động hôm nay.", + "commandCenter.noModelUsage": "Chưa có sử dụng mô hình nào.", + "commandCenter.noSkillActivity": "Chưa có hoạt động kỹ năng nào.", + "common.loading": "Đang tải…", + "common.save": "Lưu", + "common.cancel": "Hủy", + "common.close": "Đóng", + "common.delete": "Xóa", + "common.confirm": "Xác nhận", + "common.search": "Tìm kiếm…", + "onboarding.welcome": "Chào mừng đến với Hermes", + "onboarding.getStarted": "Bắt đầu bằng cách chọn nhà cung cấp và mô hình.", + "onboarding.skip": "Bỏ qua", + "onboarding.continue": "Tiếp tục", + "onboarding.finish": "Hoàn tất", + "file.browser": "Trình duyệt tệp", + "file.noFiles": "Chưa có tệp nào.", + "terminal.title": "Terminal", + "terminal.newTab": "Tab mới", + "terminal.closeTab": "Đóng tab", + "skills.title": "Kỹ năng", + "skills.search": "Tìm kỹ năng…", + "skills.noResults": "Không tìm thấy kỹ năng nào.", + "profiles.title": "Hồ sơ", + "cron.title": "Công việc định kỳ", + "cron.noJobs": "Không có công việc định kỳ nào.", + "messaging.title": "Nhắn tin", + "about.version": "Phiên bản", + "about.checkUpdates": "Kiểm tra cập nhật", + "about.upToDate": "Hermes đã là phiên bản mới nhất.", + "about.updateAvailable": "Có bản cập nhật mới.", + "about.license": "Giấy phép MIT", + "keys.title": "Khóa API", + "keys.noKeys": "Chưa cấu hình khóa API nào.", + "keys.addKey": "Thêm khóa", + "config.title": "Cấu hình", + "config.edit": "Chỉnh sửa cấu hình", + "config.reload": "Tải lại cấu hình", + "gateway.title": "Cổng kết nối", + "gateway.start": "Khởi động cổng", + "gateway.stop": "Dừng cổng", + "gateway.restart": "Khởi động lại cổng", + "gateway.running": "Đang chạy", + "gateway.stopped": "Đã dừng", + "sessions.title": "Phiên", + "sessions.search": "Tìm phiên…", + "sessions.noResults": "Không tìm thấy phiên nào.", + "sessions.export": "Xuất", + "sessions.delete": "Xóa phiên", + "mcp.title": "Máy chủ MCP", + "mcp.addServer": "Thêm máy chủ", + "mcp.noServers": "Chưa cấu hình máy chủ MCP nào.", + "tools.title": "Công cụ & Kỹ năng", + "tools.noTools": "Không có công cụ nào khả dụng.", + "nav.home": "Trang chủ", + "nav.chat": "Trò chuyện", + "nav.settings": "Cài đặt", + "nav.files": "Tệp", + "nav.terminal": "Terminal", + "header.search": "Tìm kiếm hoặc nhập lệnh…", + "settings.closeSettings": "Đóng cài đặt", + "settings.archivedChats": "Trò chuyện đã lưu trữ", + "settings.exportConfig": "Xuất cấu hình", + "settings.importConfig": "Nhập cấu hình", + "settings.resetDefaults": "Đặt lại mặc định", + "settings.llmProviders": "Nhà cung cấp LLM", + "settings.searchPlaceholder.about": "Giới thiệu về Hermes Desktop", + "settings.searchPlaceholder.config": "Tìm cài đặt…", + "settings.searchPlaceholder.gateway": "Kết nối cổng…", + "settings.searchPlaceholder.keys": "Tìm khóa API…", + "settings.searchPlaceholder.mcp": "Tìm máy chủ MCP…", + "settings.searchPlaceholder.sessions": "Tìm phiên đã lưu trữ…", + "about.hermesDesktop": "Hermes Desktop", + "about.versionUnavailable": "Không có thông tin phiên bản", + "about.updates": "Cập nhật", + "about.checkNow": "Kiểm tra ngay", + "about.checking": "Đang kiểm tra…", + "about.seeWhatsNew": "Xem có gì mới", + "about.releaseNotes": "Ghi chú phát hành", + "about.autoUpdates": "Cập nhật tự động", + "about.autoUpdatesDesc": "Hermes tự động kiểm tra cập nhật trong nền và thông báo khi có bản mới sẵn sàng.", + "about.selfUpdateUnsupported": "Bản dựng này không thể tự cập nhật từ bên trong ứng dụng.", + "about.cannotReachServer": "Không thể kết nối đến máy chủ cập nhật.", + "about.installingUpdate": "Đang cài đặt bản cập nhật.", + "about.updateReady": "Đã có bản cập nhật mới (bao gồm {count} thay đổi).", + "about.updateReady_plural": "Đã có bản cập nhật mới (bao gồm {count} thay đổi).", + "about.onLatest": "Bạn đang dùng phiên bản mới nhất.", + "about.tapCheckNow": "Nhấn \"Kiểm tra ngay\" để tìm bản cập nhật.", + "about.lastChecked": "Kiểm tra lần cuối {time}", + "about.justNow": "vừa xong", + "about.never": "chưa bao giờ", + "about.minAgo": "{count} phút trước", + "about.hoursAgo": "{count} giờ trước", + "about.daysAgo": "{count} ngày trước", + "about.buildInfo": "Nhánh {branch} · Commit {sha}", + "keys.loading": "Đang tải khóa API và thông tin xác thực…", + "keys.docs": "Tài liệu", + "keys.openDocs": "Mở tài liệu nhà cung cấp", + "keys.hideValue": "Ẩn giá trị", + "keys.revealValue": "Hiện giá trị", + "keys.set": "Đã đặt", + "keys.notSet": "Chưa đặt", + "keys.replace": "Thay thế", + "keys.replaceValue": "Thay thế giá trị hiện tại", + "keys.enterValue": "Nhập giá trị", + "keys.saving": "Đang lưu", + "keys.save": "Lưu", + "keys.cancel": "Hủy", + "keys.clearValue": "Xóa giá trị", + "keys.configured": "Đã cấu hình {count}/{total}", + "keys.setCount": "Đã đặt {count}/{total}", + "keys.countSet": "Đã đặt {count}", + "keys.countKeys": "{count} khóa", + "keys.otherProviders": "Nhà cung cấp khác", + "keys.categoryTools": "Công cụ", + "keys.categoryMessaging": "Nhắn tin", + "keys.categorySettings": "Cài đặt", + "config.notSet": "Chưa đặt", + "config.commaSeparated": "giá trị phân cách bằng dấu phẩy", + "config.on": "Bật", + "config.off": "Tắt", + "config.none": "Không có", + "config.emptyOption": "(không có)", + "config.loading": "Đang tải cấu hình Hermes…", + "config.noMatching": "Không có cài đặt phù hợp", + "config.noMatchingDesc": "Thử từ khóa tìm kiếm khác hoặc chọn mục khác.", + "config.results": "{count} kết quả", + "config.results_plural": "{count} kết quả", + "gateway.loading": "Đang tải cài đặt cổng…", + "gateway.unavailable": "Không có cài đặt cổng", + "gateway.unavailableDesc": "Cầu nối IPC desktop không hiển thị cài đặt cổng.", + "gateway.connection": "Kết nối cổng", + "gateway.envOverride": "ghi đè biến môi trường", + "gateway.desc": "Hermes Desktop tự khởi động cổng cục bộ riêng theo mặc định. Dùng cổng từ xa khi bạn muốn ứng dụng này điều khiển một backend Hermes đang chạy trên máy khác hoặc sau proxy tin cậy.", + "gateway.envOverrideTitle": "Biến môi trường đang điều khiển phiên desktop này.", + "gateway.envOverrideDesc": "Bỏ đặt {urlVar} và {tokenVar} để dùng cài đặt đã lưu bên dưới.", + "gateway.localTitle": "Cổng cục bộ", + "gateway.localDesc": "Khởi động backend Hermes riêng trên localhost. Đây là mặc định và hoạt động ngoại tuyến.", + "gateway.remoteTitle": "Cổng từ xa", + "gateway.remoteDesc": "Kết nối shell desktop này đến backend Hermes từ xa bằng token phiên của nó.", + "gateway.remoteUrl": "URL từ xa", + "gateway.remoteUrlDesc": "URL cơ sở cho backend bảng điều khiển từ xa. Hỗ trợ tiền tố đường dẫn, ví dụ /hermes.", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "Token phiên", + "gateway.sessionTokenDesc": "Token phiên bảng điều khiển dùng cho truy cập REST và WebSocket. Để trống để giữ token đã lưu.", + "gateway.sessionTokenPlaceholder": "Dán token phiên", + "gateway.existingToken": "Token hiện tại {preview}", + "gateway.tokenSaved": "đã lưu", + "gateway.testRemote": "Kiểm tra từ xa", + "gateway.saveRestart": "Lưu cho lần khởi động lại sau", + "gateway.saveReconnect": "Lưu và kết nối lại", + "gateway.diagnostics": "Chẩn đoán", + "gateway.diagnosticsDesc": "Hiện desktop.log trong trình quản lý tệp — hữu ích khi cổng không khởi động được.", + "gateway.openLogs": "Mở nhật ký", + "sessions.loading": "Đang tải…", + "sessions.defaultProjectDir": "Thư mục dự án mặc định", + "sessions.defaultProjectDirDesc": "Phiên mới bắt đầu trong thư mục này trừ khi bạn chọn thư mục khác. Để trống để dùng thư mục chính.", + "sessions.defaultDir": "Mặc định là {fallback}.", + "sessions.notSet": "Chưa đặt", + "sessions.change": "Thay đổi", + "sessions.choose": "Chọn", + "sessions.clear": "Xóa", + "sessions.archivedTitle": "Phiên đã lưu trữ", + "sessions.archivedDesc": "Trò chuyện đã lưu trữ bị ẩn khỏi thanh bên nhưng giữ lại tất cả tin nhắn. Ctrl/⌘-nhấp vào trò chuyện trong thanh bên để lưu trữ.", + "sessions.nothingArchived": "Không có gì được lưu trữ", + "sessions.noSearchMatch": "Không có trò chuyện đã lưu trữ nào khớp với tìm kiếm.", + "sessions.archiveToHide": "Lưu trữ trò chuyện để ẩn ở đây.", + "sessions.unarchive": "Bỏ lưu trữ", + "sessions.deletePermanently": "Xóa vĩnh viễn", + "sessions.messages": "{count} tin nhắn", + "mcp.loading": "Đang tải máy chủ MCP…", + "mcp.servers": "Máy chủ MCP", + "mcp.configured": "Đã cấu hình {count}", + "mcp.newServer": "Máy chủ mới", + "mcp.reloadMCP": "Tải lại MCP", + "mcp.reloading": "Đang tải lại...", + "mcp.noServersDesc": "Thêm máy chủ stdio hoặc HTTP để hiển thị công cụ MCP.", + "mcp.name": "Tên", + "mcp.namePlaceholder": "hệ thống tệp", + "mcp.serverJSON": "JSON máy chủ", + "mcp.editServer": "Sửa máy chủ", + "mcp.saveServer": "Lưu máy chủ", + "mcp.saving": "Đang lưu...", + "mcp.remove": "Xóa", + "mcp.disabled": "đã tắt", + "model.auxTask.vision": "Thị giác", + "model.auxTask.visionHint": "Phân tích hình ảnh", + "model.auxTask.web_extract": "Trích xuất web", + "model.auxTask.web_extractHint": "Tóm tắt trang", + "model.auxTask.compression": "Nén", + "model.auxTask.compressionHint": "Thu gọn ngữ cảnh", + "model.auxTask.session_search": "Tìm phiên", + "model.auxTask.session_searchHint": "Truy vấn gợi nhớ", + "model.auxTask.skills_hub": "Trung tâm kỹ năng", + "model.auxTask.skills_hubHint": "Tìm kỹ năng", + "model.auxTask.approval": "Phê duyệt", + "model.auxTask.approvalHint": "Tự động phê duyệt thông minh", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "Định tuyến công cụ MCP", + "model.auxTask.title_generation": "Tạo tiêu đề", + "model.auxTask.title_generationHint": "Tiêu đề phiên", + "model.auxTask.curator": "Giám tuyển", + "model.auxTask.curatorHint": "Đánh giá sử dụng kỹ năng", + "model.mainModel": "Mô hình chính", + "model.mainDesc": "Áp dụng cho phiên mới. Dùng bộ chọn mô hình trong khung soạn để đổi nhanh cho trò chuyện hiện tại.", + "model.providerPlaceholder": "Nhà cung cấp", + "model.modelPlaceholder": "Mô hình", + "model.apply": "Áp dụng", + "model.applying": "Đang áp dụng…", + "model.auxiliaryModels": "Mô hình phụ trợ", + "model.auxiliaryDesc": "Các tác vụ phụ mặc định dùng mô hình chính. Gán mô hình riêng cho bất kỳ tác vụ nào để ghi đè.", + "model.resetAllToMain": "Đặt lại tất cả về chính", + "model.setToMain": "Đặt về chính", + "model.change": "Thay đổi", + "model.cancel": "Hủy", + "model.autoUseMain": "tự động · dùng mô hình chính", + "model.providerDefault": "(mặc định nhà cung cấp)", + "model.loading": "Đang tải cấu hình mô hình…", + "updates.checking": "Đang kiểm tra cập nhật…", + "updates.available": "Có bản cập nhật", + "updates.downloading": "Đang tải xuống…", + "updates.installing": "Đang cài đặt…", + "updates.restart": "Khởi động lại để cập nhật", + "errors.generic": "Đã xảy ra lỗi.", + "errors.notFound": "Không tìm thấy trang.", + "errors.noPermission": "Bạn không có quyền truy cập vào đây.", + "tool.toolCall": "Gọi công cụ", + "tool.result": "Kết quả", + "tool.error": "Lỗi", + "tool.timeout": "Hết thời gian", + "tool.cancelled": "Đã hủy", + "tool.running": "Đang chạy", + "tool.recovered": "Đã khôi phục", + "tool.done": "Xong", + "tool.output": "Đầu ra công cụ", + "tool.searchResults": "Kết quả tìm kiếm", + "tool.rawResponse": "Phản hồi thô", + "tool.stdout": "stdout", + "tool.stderr": "stderr", + "tool.copyActivity": "Sao chép hoạt động", + "composer.startingHermes": "Đang khởi động Hermes...", + "composer.sendFollowUp": "Gửi tiếp", + "composer.message": "Tin nhắn", + "composer.editingQueued": "Đang sửa lượt đã xếp hàng trong khung soạn", + "composer.attach": "Đính kèm", + "composer.files": "Tệp…", + "composer.folder": "Thư mục…", + "composer.images": "Hình ảnh…", + "composer.pasteImage": "Dán hình ảnh", + "composer.url": "URL…", + "composer.promptSnippets": "Đoạn nhắc", + "composer.promptSnippetsDesc": "Chọn một lời nhắc khởi đầu để thả vào khung soạn.", + "composer.voiceStart": "Bắt đầu trò chuyện giọng nói", + "composer.queue": "Xếp hàng tin nhắn", + "composer.speaking": "Đang nói", + "composer.transcribing": "Đang chuyển lời", + "composer.muted": "Đã tắt tiếng", + "composer.listening": "Đang nghe", + "composer.unmuteMic": "Bật mic", + "composer.muteMic": "Tắt mic", + "composer.stopListening": "Dừng nghe và gửi", + "composer.endVoice": "Kết thúc trò chuyện giọng nói", + "composer.end": "Kết thúc", + "composer.stopDictation": "Dừng đọc chính tả", + "composer.transcribingDictation": "Đang chuyển lời đọc chính tả", + "composer.voiceDictation": "Đọc chính tả bằng giọng nói", + "sessions.new": "Phiên mới", + "sessions.running": "Phiên đang chạy", + "sessions.actions": "Hành động phiên", + "sessions.reorder": "Sắp xếp lại", + "sessions.pin": "Ghim", + "sessions.unpin": "Bỏ ghim", + "sessions.copyId": "Sao chép ID", + "sessions.rename": "Đổi tên", + "sessions.archive": "Lưu trữ", + "sessions.renameDialog": "Đổi tên phiên", + "sessions.renameDesc": "Đặt tiêu đề dễ nhớ cho trò chuyện này. Để trống để xóa.", + "sessions.untitled": "Phiên không tên", + "sessions.renamed": "Đã đổi tên", + "sessions.renameFailed": "Đổi tên thất bại", + "sessions.pinned": "Đã ghim", + "sessions.results": "Kết quả", + "sessions.allPinned": "Mọi thứ ở đây đều được ghim. Bỏ ghim trò chuyện để hiện trong mục gần đây.", + "sessions.pinHint": "Shift-nhấp để ghim · kéo để sắp xếp lại", + "sessions.loadMore": "Tải thêm", + "sessions.noWorkspace": "Không có không gian làm việc", + "sessions.ungroup": "Hiện phiên dưới dạng danh sách đơn", + "sessions.groupByWorkspace": "Nhóm phiên theo không gian làm việc", + "skills.tools": "Kỹ năng & Công cụ", + "artifacts": "Tạo phẩm", + "common.clearSearch": "Xóa tìm kiếm", + "common.copy": "Sao chép", + "common.refresh": "Làm mới", + "common.moreActions": "Thêm hành động", + "common.tryAgain": "Thử lại", + "chat.loadingSession": "Đang tải phiên", + "chat.loadingResponse": "Hermes đang tải phản hồi", + "chat.branchInNewChat": "Phân nhánh trong trò chuyện mới", + "chat.readAloud": "Đọc to", + "chat.preparingAudio": "Đang chuẩn bị âm thanh...", + "chat.stopReading": "Dừng đọc", + "chat.editMessage": "Sửa tin nhắn", + "chat.editableCheckpoint": "Điểm kiểm tra có thể sửa", + "chat.restoreCheckpoint": "Khôi phục điểm kiểm tra", + "chat.goForward": "Tiến tới", + "chat.restorePrevCheckpoint": "Khôi phục điểm kiểm tra trước", + "chat.restoreNextCheckpoint": "Khôi phục điểm kiểm tra sau", + "models.title": "Mô hình", + "models.search": "Tìm mô hình", + "models.addProvider": "Thêm nhà cung cấp…", + "errors.somethingBroke": "Có lỗi trong giao diện", + "errors.viewCrashedDesc": "Giao diện gặp lỗi không mong đợi. Trò chuyện và cài đặt của bạn vẫn an toàn - thử lại, hoặc tải lại cửa sổ.", + "errors.noProviders": "Không có nhà cung cấp nào được xác thực.", + "onboarding.setupTitle": "Hãy thiết lập Hermes Agent cho bạn", + "onboarding.setupDesc": "Kết nối nhà cung cấp mô hình để bắt đầu trò chuyện. Hầu hết chỉ cần một lần nhấp.", + "onboarding.preparing": "Đang khởi động Hermes…", + "onboarding.installing": "Hermes đang hoàn tất cài đặt. Lần đầu thường mất dưới một phút.", + "onboarding.lookingUp": "Đang tra cứu nhà cung cấp...", + "onboarding.otherProviders": "Nhà cung cấp khác", + "onboarding.collapse": "Thu gọn", + "onboarding.iHaveKey": "Tôi có khóa API", + "onboarding.recommended": "Được đề xuất", + "onboarding.connected": "Đã kết nối", + "onboarding.backToSignIn": "Quay lại đăng nhập", + "onboarding.getKey": "Lấy khóa", + "onboarding.pasteKey": "Dán khóa API", + "onboarding.connect": "Kết nối", + "onboarding.connecting": "Đang kết nối", + "onboarding.copyCode": "Sao chép", + "onboarding.startSignIn": "Đang bắt đầu đăng nhập cho", + "onboarding.verifyingCode": "Đang xác minh mã của bạn với", + "onboarding.pickingModel": "đã kết nối. Đang chọn mô hình mặc định...", + "onboarding.signInFailed": "Đăng nhập thất bại. Thử lại.", + "onboarding.pickDifferent": "Chọn nhà cung cấp khác", + "onboarding.signInTitle": "Đăng nhập với", + "onboarding.step1": "Chúng tôi đã mở", + "onboarding.step1End": "trong trình duyệt của bạn.", + "onboarding.step2": "Ủy quyền cho Hermes tại đó.", + "onboarding.step3": "Sao chép mã ủy quyền và dán vào bên dưới.", + "onboarding.pasteCode": "Dán mã ủy quyền", + "onboarding.reopenAuth": "Mở lại trang ủy quyền", + "onboarding.cancel": "Hủy", + "onboarding.browserDesc": "Chúng tôi đã mở", + "onboarding.browserDescEnd": "trong trình duyệt của bạn. Ủy quyền cho Hermes tại đó và bạn sẽ được kết nối tự động — không cần sao chép hay dán gì cả.", + "onboarding.waitingAuth": "Đang chờ bạn ủy quyền...", + "onboarding.reopenSignIn": "Mở lại trang đăng nhập", + "onboarding.externalDesc": "đăng nhập qua CLI riêng. Chạy lệnh này trong terminal, sau đó quay lại và chọn \"Tôi đã đăng nhập\":", + "onboarding.iSignedIn": "Tôi đã đăng nhập", + "onboarding.enterCode": "Chúng tôi đã mở", + "onboarding.enterCodeEnd": "trong trình duyệt của bạn. Nhập mã này tại đó:", + "onboarding.reopenVerification": "Mở lại trang xác minh", + "onboarding.defaultModel": "Mô hình mặc định", + "onboarding.freeTier": "Gói miễn phí", + "onboarding.pro": "Pro", + "onboarding.change": "Thay đổi", + "onboarding.startChatting": "Bắt đầu trò chuyện", + "onboarding.docs": "tài liệu", + "onboarding.close": "Đóng", + "onboarding.savingError": "Không thể lưu thông tin xác thực.", + "install.title": "Hermes cần cài đặt một lần", + "install.desc": "Cài đặt tự động lần đầu chưa khả dụng trên", + "install.descEnd": ". Mở Terminal và chạy lệnh bên dưới, sau đó khởi chạy lại ứng dụng này. Các lần sau sẽ bỏ qua bước này.", + "install.installCommand": "Lệnh cài đặt", + "install.copyCommand": "Sao chép lệnh", + "install.viewDocs": "Xem tài liệu cài đặt", + "install.willInstallTo": "Sẽ cài đặt vào", + "install.iRanIt": "Tôi đã chạy -- thử lại", + "install.failed": "Cài đặt thất bại", + "install.settingUp": "Đang thiết lập Hermes Agent", + "install.finishingUp": "Đang hoàn tất", + "install.failedDesc": "Một trong các bước cài đặt thất bại. Trên Windows, điều này có thể xảy ra nếu một phiên bản Hermes CLI hoặc desktop khác đang chạy. Dừng tất cả phiên bản Hermes đang chạy, sau đó thử lại. Kiểm tra chi tiết bên dưới hoặc nhật ký desktop để xem bản ghi đầy đủ.", + "install.setupDesc": "Đây là thiết lập một lần. Trình cài đặt Hermes đang tải các phụ thuộc và cấu hình máy của bạn. Các lần khởi chạy sau sẽ bỏ qua bước này.", + "install.fetchingManifest": "Đang tải tệp kê khai cài đặt...", + "install.error": "Lỗi", + "install.showOutput": "Hiện đầu ra cài đặt", + "install.hideOutput": "Ẩn đầu ra cài đặt", + "install.noOutput": "Chưa có đầu ra.", + "install.cancelInstall": "Hủy cài đặt", + "install.cancelling": "Đang hủy...", + "install.copyOutput": "Sao chép đầu ra", + "install.copied": "Đã sao chép!", + "install.reloadRetry": "Tải lại và thử lại", + "install.saveLogs": "Bản ghi đầy đủ đã lưu vào", + "install.stepsComplete": "bước đã hoàn thành", + "install.nowLabel": "bây giờ", + "chat.composerTip": "Mẹo: gõ @ để tham chiếu tệp trực tiếp.", + "composer.addContext": "Thêm ngữ cảnh", + "sessions.loadStep": "Tải", + "sessions.moreLabel": "thêm", + "chat.reconnecting": "Đang kết nối lại với Hermes…", + "appearance.toolCallDisplay": "Hiển thị gọi công cụ", + "appearance.toolCallDisplayDesc": "Chế độ Sản phẩm ẩn tải trọng công cụ thô; Kỹ thuật hiển thị đầy đủ đầu vào/đầu ra.", + "appearance.toolViewProduct": "Sản phẩm", + "appearance.toolViewTechnical": "Kỹ thuật", + "appearance.toolViewProductDesc": "Hoạt động công cụ thân thiện với người dùng, tóm tắt ngắn gọn.", + "appearance.toolViewTechnicalDesc": "Bao gồm tham số/kết quả công cụ thô và chi tiết cấp thấp.", + "messaging.recommended": "Được đề xuất", + "messaging.recommendedTelegram": "Được đề xuất. ID số phân cách bằng dấu phẩy từ @userinfobot. Nếu không có, bất kỳ ai cũng có thể nhắn tin cho bot của bạn.", + "messaging.recommendedDiscord": "Được đề xuất. ID người dùng Discord phân cách bằng dấu phẩy.", + "messaging.recommendedSlack": "Được đề xuất. ID người dùng Slack phân cách bằng dấu phẩy.", + "messaging.recommendedMattermost": "Được đề xuất. ID người dùng Mattermost phân cách bằng dấu phẩy.", + "messaging.recommendedMatrix": "Được đề xuất. ID người dùng phân cách bằng dấu phẩy theo định dạng @user:server.", + "messaging.recommendedSignal": "Được đề xuất. Định danh Signal phân cách bằng dấu phẩy.", + "messaging.recommendedWhatsApp": "Được đề xuất. Số điện thoại hoặc ID WhatsApp phân cách bằng dấu phẩy.", + "previewConsole.resizeLabel": "Đổi kích thước bảng điều khiển xem trước", + "boot.ipcUnavailable": "Cầu nối IPC desktop không khả dụng.", + "boot.backendExited": "Tiến trình nền Hermes đã thoát trong khi khởi động.", + "boot.backendStoppedTitle": "Backend đã dừng", + "boot.backendStoppedMessage": "Tiến trình nền Hermes đã thoát.", + "boot.startingConnection": "Đang khởi động kết nối desktop", + "boot.connectingGateway": "Đang kết nối cổng desktop trực tiếp", + "boot.loadingConfig": "Đang tải cài đặt Hermes", + "boot.loadingSessions": "Đang tải phiên gần đây", + "boot.desktopBootFailed": "Khởi động desktop thất bại", + "updates.stageGettingReady": "Đang chuẩn bị…", + "updates.stageDownloading": "Đang tải xuống…", + "updates.stageAlmostThere": "Sắp xong…", + "updates.stageFinishingUp": "Đang hoàn tất…", + "updates.stageRestarting": "Đang khởi động lại Hermes…", + "updates.stageManual": "Cập nhật từ terminal của bạn", + "updates.stageError": "Cập nhật bị tạm dừng", + "updates.updatingHermes": "Đang cập nhật Hermes…", + "updates.lookingForUpdates": "Đang tìm bản cập nhật…", + "updates.couldntCheck": "Không thể kiểm tra cập nhật", + "updates.updateNotAvailable": "Không có bản cập nhật", + "updates.checkConnection": "Kiểm tra kết nối và thử lại.", + "updates.onLatest": "Bạn đang chạy phiên bản mới nhất.", + "updates.allSet": "Bạn đã sẵn sàng", + "updates.newUpdateAvailable": "Có bản cập nhật mới", + "updates.readyToInstall": "Phiên bản Hermes mới đã sẵn sàng để cài đặt.", + "updates.updateNow": "Cập nhật ngay", + "updates.maybeLater": "Để sau", + "updates.moreChanges": "+ {count} thay đổi nữa được bao gồm.", + "updates.moreChanges_plural": "+ {count} thay đổi nữa được bao gồm.", + "updates.updateFromTerminal": "Cập nhật từ terminal của bạn", + "updates.terminalDesc": "Bạn đã cài đặt Hermes từ dòng lệnh, nên cập nhật cũng chạy ở đó. Dán lệnh này vào terminal của bạn:", + "updates.copied": "Đã sao chép", + "updates.copy": "Sao chép", + "updates.pickupNewVersion": "Hermes sẽ nhận phiên bản mới vào lần khởi chạy tiếp theo.", + "updates.done": "Xong", + "updates.updaterDesc": "Trình cập nhật Hermes sẽ tiếp quản trong cửa sổ riêng và mở lại Hermes khi hoàn tất.", + "updates.closeToApply": "Hermes sẽ đóng để áp dụng bản cập nhật.", + "updates.updateDidntFinish": "Cập nhật chưa hoàn tất", + "updates.nothingLost": "Đừng lo — không mất gì cả. Bạn có thể thử lại ngay bây giờ.", + "updates.notNow": "Không phải bây giờ", + "commandCenter.sessionsPanel": "Bảng phiên", + "commandCenter.systemPanel": "Bảng hệ thống", + "commandCenter.usagePanel": "Bảng sử dụng", + "commandCenter.navigate": "Điều hướng", + "commandCenter.noMatchingResults": "Không tìm thấy kết quả phù hợp.", + "commandCenter.noSessionsYet": "Chưa có phiên nào.", + "commandCenter.unpinSession": "Bỏ ghim phiên", + "commandCenter.pinSession": "Ghim phiên", + "commandCenter.exportSession": "Xuất phiên", + "commandCenter.deleteSession": "Xóa phiên", + "commandCenter.gatewayRunning": "Cổng nhắn tin đang chạy", + "commandCenter.gatewayStopped": "Cổng nhắn tin đã dừng", + "commandCenter.restartMsg": "Khởi động lại nhắn tin", + "commandCenter.updateHermes": "Cập nhật Hermes", + "commandCenter.noLogsLoaded": "Chưa tải nhật ký nào.", + "commandCenter.closeLabel": "Đóng trung tâm điều khiển", + "commandCenter.searchPlaceholder": "Tìm phiên, chế độ xem và hành động", + "commandCenter.statSessions": "Phiên", + "commandCenter.statApiCalls": "Lần gọi API", + "commandCenter.statTokens": "Token vào/ra", + "commandCenter.statEstCost": "Chi phí ước tính", + "commandCenter.actualCost": "thực tế {cost}", + "commandCenter.loadingUsage": "Đang tải dữ liệu sử dụng...", + "commandCenter.noUsageDesc": "Không có sử dụng trong {count} ngày qua.", + "commandCenter.retry": "Thử lại", + "commandCenter.tokenInput": "đầu vào", + "commandCenter.tokenOutput": "đầu ra", + "commandCenter.noDailyActivity": "Không có hoạt động hôm nay.", + "commandCenter.topModels": "Mô hình hàng đầu", + "commandCenter.topSkills": "Kỹ năng hàng đầu", + "commandCenter.actionsLabel": "hành động", + "commandCenter.systemRunning": "đang chạy", + "commandCenter.systemDone": "xong", + "commandCenter.systemFailed": "thất bại", + "mcp.nameRequired": "Cần nhập tên", + "mcp.nameRequiredDesc": "Đặt khóa cấu hình cho máy chủ MCP này.", + "mcp.invalidJson": "Cấu hình máy chủ phải là đối tượng JSON", + "mcp.invalidJsonDesc": "JSON MCP không hợp lệ", + "mcp.saved": "Đã lưu máy chủ MCP", + "mcp.savedDesc": "{name} sẽ có hiệu lực sau khi tải lại MCP.", + "mcp.saveFailed": "Lưu thất bại", + "mcp.removeFailed": "Xóa thất bại", + "mcp.gatewayUnavailable": "Cổng không khả dụng", + "mcp.gatewayUnavailableDesc": "Kết nối lại cổng trước khi tải lại MCP.", + "mcp.reloadedTitle": "Đã tải lại công cụ MCP", + "mcp.reloadedDesc": "Lược đồ công cụ mới sẽ áp dụng cho các lượt mới.", + "mcp.reloadFailed": "Tải lại MCP thất bại", + "urlDialog.title": "Đính kèm URL", + "urlDialog.description": "Hermes sẽ tải trang và đưa vào làm ngữ cảnh cho lượt này.", + "urlDialog.placeholder": "https://example.com/bai-viet", + "urlDialog.hint": "Bao gồm URL đầy đủ, ví dụ:", + "urlDialog.attach": "Đính kèm", + "model.options": "Tùy chọn", + "model.thinking": "Suy nghĩ", + "model.fast": "Nhanh", + "model.effort": "Nỗ lực", + "model.noOptions": "Không có tùy chọn cho mô hình này", + "model.optionUpdateFailed": "Cập nhật tùy chọn mô hình thất bại", + "model.fastModeUpdateFailed": "Cập nhật chế độ nhanh thất bại", + "model.effortMinimal": "Tối thiểu", + "model.effortLow": "Thấp", + "model.effortMedium": "Trung bình", + "model.effortHigh": "Cao", + "model.effortMax": "Tối đa", + "gateway.connected": "Đã kết nối", + "gateway.connecting": "Đang kết nối", + "gateway.disconnected": "Đã ngắt kết nối", + "gateway.inferenceReady": "Suy luận sẵn sàng", + "gateway.inferenceNotReady": "Suy luận chưa sẵn sàng", + "gateway.checkingInference": "Đang kiểm tra suy luận", + "gateway.openSystemPanel": "Mở bảng hệ thống", + "gateway.connectionLabel": "Kết nối:", + "gateway.recentActivity": "Hoạt động gần đây", + "gateway.viewAllLogs": "Xem tất cả nhật ký →", + "gateway.messagingPlatforms": "Nền tảng nhắn tin", + "titlebar.hideSidebar": "Ẩn thanh bên", + "titlebar.showSidebar": "Hiện thanh bên", + "titlebar.search": "Tìm kiếm", + "titlebar.searchTitle": "Tìm phiên, chế độ xem và hành động", + "titlebar.hideRightSidebar": "Ẩn thanh bên phải", + "titlebar.showRightSidebar": "Hiện thanh bên phải", + "titlebar.unmuteHaptics": "Bật phản hồi rung", + "titlebar.muteHaptics": "Tắt phản hồi rung", + "titlebar.openSettings": "Mở cài đặt", + "titlebar.profiles": "Hồ sơ", + "titlebar.profilesDesc": "Môi trường Hermes nâng cao cho các nhân vật, cấu hình, kỹ năng và SOUL.md riêng biệt.", + "titlebar.manageProfiles": "Quản lý hồ sơ", + "pagination.ariaLabel": "phân trang", + "pagination.prevAria": "Đi đến trang trước", + "pagination.prev": "Trước", + "pagination.nextAria": "Đi đến trang sau", + "pagination.next": "Sau", + "boot.couldNotStart": "Hermes không thể khởi động", + "boot.recoveryDesc": "Cổng nền không khởi động được. Thử một trong các bước khôi phục bên dưới — không có gì ở đây xóa trò chuyện hoặc cài đặt của bạn.", + "boot.retry": "Thử lại", + "boot.repairInstall": "Sửa cài đặt", + "boot.useLocalGateway": "Dùng cổng cục bộ", + "boot.openLogs": "Mở nhật ký", + "boot.repairHint": "Sửa chạy lại trình cài đặt và có thể mất vài phút trên máy mới.", + "boot.showLogs": "Hiện nhật ký gần đây", + "boot.hideLogs": "Ẩn nhật ký gần đây", + "bootstrap.pending": "Đang chờ", + "bootstrap.running": "Đang cài đặt", + "bootstrap.done": "Xong", + "bootstrap.skipped": "Đã bỏ qua", + "bootstrap.failed": "Thất bại", + "model.switch": "Đổi mô hình", + "model.unknown": "(không xác định)", + "model.filterPlaceholder": "Lọc nhà cung cấp và mô hình...", + "model.persistGlobal": "Lưu toàn cục", + "model.persistGlobalSession": "Lưu toàn cục (nếu không chỉ cho phiên này)", + "model.couldNotLoad": "Không thể tải mô hình", + "model.proLockedDesc": "Mô hình Pro cần đăng ký Nous trả phí.", + "model.priceTooltip": "Giá đầu vào / đầu ra trên một triệu token", + "model.freePrice": "Miễn phí", + "model.currentLabel": "hiện tại:", + "model.addProviderBtn": "Thêm nhà cung cấp", + "sidebar.sheetTitle": "Thanh bên", + "sidebar.sheetDesc": "Hiển thị thanh bên trên di động.", + "sidebar.toggle": "Chuyển đổi thanh bên", + "clarify.hermesIsAsking": "Hermes đang hỏi", + "clarify.loadingQuestion": "Đang tải câu hỏi…", + "clarify.otherTypeAnswer": "Khác (nhập câu trả lời của bạn)", + "clarify.placeholderAnswer": "Nhập câu trả lời của bạn…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter để gửi", + "clarify.back": "Quay lại", + "clarify.skip": "Bỏ qua", + "clarify.couldNotSend": "Không thể gửi phản hồi làm rõ", + "clarify.pickLabel": "1–{n} để chọn", + "tool.recoveredAfter": "Đã khôi phục sau 1 bước thất bại", + "tool.recoveredAfterN": "Đã khôi phục sau {count} bước thất bại", + "tool.oneStepFailed": "1 bước thất bại", + "tool.nStepsFailed": "{count} bước thất bại", + "intro.fallback1h": "Hôm nay chúng ta làm gì?", + "intro.fallback1b": "Gửi lỗi, nhánh, kế hoạch hoặc ý tưởng thô. Tôi sẽ kiểm tra repo và biến nó thành bước cụ thể tiếp theo.", + "intro.fallback2h": "Bạn đang nghĩ gì?", + "intro.fallback2b": "Mang mã, câu hỏi hoặc phần bế tắc đến đây. Tôi sẽ đọc tình hình trước khi thực hiện thay đổi.", + "intro.fallback3h": "Hermes nên xem gì?", + "intro.fallback3b": "Gửi tác vụ, đường dẫn thất bại hoặc kế hoạch dang dở. Tôi sẽ giúp biến nó thành hành động.", + "intro.fallback4h": "Chúng ta bắt đầu từ đâu?", + "intro.fallback4b": "Mang vấn đề, mục tiêu hoặc tệp đến đây. Tôi sẽ kiểm tra trước và giữ bước tiếp theo cụ thể.", + "intro.fallback5h": "Điều gì cần chú ý?", + "intro.fallback5b": "Gửi ngữ cảnh bạn có. Tôi sẽ giúp sắp xếp thành kế hoạch hoặc bản sửa.", + "intro.personality.heading1": "Chế độ {label} đang bật. Chúng ta nên làm gì?", + "intro.personality.body1": "Gửi tác vụ, tệp hoặc ý tưởng thô. Tôi sẽ dùng giọng điệu đã cấu hình và giữ công việc gắn với repo này.", + "intro.personality.heading2": "{label} Hermes cần xem gì?", + "intro.personality.body2": "Mang ngữ cảnh hoặc phần bế tắc đến đây. Tôi sẽ thích ứng với tính cách đã cấu hình của bạn.", + "intro.personality.heading3": "Chế độ {label} đã sẵn sàng.", + "intro.personality.body3": "Gửi vấn đề, tệp hoặc ý tưởng. Tôi sẽ theo tính cách bạn đã cấu hình.", + "intro.personality.heading4": "{label} Hermes nên giải quyết gì?", + "intro.personality.body4": "Thả tác vụ vào đây. Tôi sẽ giữ công việc gắn với repo.", + "intro.personality.heading5": "Chúng ta bắt đầu từ đâu?", + "intro.personality.body5": "Đưa tôi ngữ cảnh và tôi sẽ trả lời ở chế độ {label}.", + "intro.brand": "HERMES AGENT", + "install.line": "dòng", + "install.lines": "dòng", + "artifacts.noArtifactsFound": "Không tìm thấy tạo phẩm nào", + "previewConsole.noMessages": "Chưa có tin nhắn bảng điều khiển nào.", + "agents.spawnTree": "Cây phân nhánh", + "agents.liveSubagentActivity": "Hoạt động subagent trực tiếp cho lượt hiện tại.", + "agents.noLiveSubagents": "Không có subagent trực tiếp", + "agents.files": "Tệp", + "profiles.noProfilesYet": "Chưa có hồ sơ nào.", + "profiles.selectProfile": "Chọn hồ sơ để xem chi tiết.", + "profiles.deleteProfile": "Xóa hồ sơ?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "Thay đổi chưa lưu", + "profiles.newProfile": "Hồ sơ mới", + "profiles.cloneFromDefault": "Sao chép từ mặc định", + "profiles.renameProfile": "Đổi tên hồ sơ", + "messaging.gatewayStopped": "Cổng nhắn tin đã dừng", + "messaging.getCredentials": "Lấy thông tin xác thực của bạn", + "messaging.required": "Bắt buộc", + "messaging.unsavedChanges": "Thay đổi chưa lưu", + "messaging.saved": "Đã lưu", + "cron.deleteCronJob": "Xóa công việc định kỳ?", + "cron.optional": "Tùy chọn", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "Cổng kết nối", + "gateway.inferenceStatus": "Trạng thái suy luận cổng", + "agents.label": "Tác tử", + "agents.open": "Mở tác tử", + "agents.close": "Đóng tác tử", + "agents.subagent": "tác tử phụ", + "agents.subagents": "tác tử phụ", + "agents.failed": "thất bại", + "agents.running": "đang chạy", + "cron.label": "Định kỳ", + "cron.open": "Mở công việc định kỳ", + "commandCenter.open": "Mở Trung tâm điều khiển", + "commandCenter.close": "Đóng Trung tâm điều khiển", + "mcp.giveConfigKey": "Đặt khóa cấu hình cho máy chủ MCP này.", + "mcp.reconnectGateway": "Kết nối lại cổng trước khi tải lại MCP.", + "mcp.newSchemas": "Lược đồ công cụ mới sẽ áp dụng cho các lượt mới.", + "mcp.loadingServers": "Đang tải máy chủ MCP...", + "mcp.serverName": "Tên", + "mcp.serversTitle": "Máy chủ MCP", + "mcp.noServersTitle": "Không có máy chủ MCP", + "sessions.nothingArchivedTitle": "Không có gì được lưu trữ", + "sessions.deletePermanentlyTitle": "Xóa vĩnh viễn", + "sessions.defaultProjectDirTitle": "Thư mục dự án mặc định", + "sessions.loadingArchived": "Đang tải phiên đã lưu trữ…", + "sessions.restored": "Đã khôi phục", + "sessions.projectDirUpdated": "Đã cập nhật thư mục dự án mặc định", + "gateway.enterUrlFirst": "Nhập URL từ xa và token phiên trước khi chuyển đổi", + "gateway.enterUrlFirstTest": "Nhập URL từ xa và token phiên trước khi kiểm tra", + "config.saving": "Đang lưu…", + "keys.openProviderDocs": "Mở tài liệu nhà cung cấp", + "config.label.defaultModel": "Mô hình mặc định", + "config.label.contextWindow": "Cửa sổ ngữ cảnh", + "config.label.fallbackModels": "Mô hình dự phòng", + "config.label.enabledToolsets": "Bộ công cụ đã bật", + "config.label.timezone": "Múi giờ", + "config.label.personality": "Tính cách", + "config.label.reasoningBlocks": "Khối suy luận", + "config.label.maxAgentSteps": "Số bước tác tử tối đa", + "config.label.imageAttachments": "Đính kèm hình ảnh", + "config.label.workingDirectory": "Thư mục làm việc", + "config.label.executionBackend": "Backend thực thi", + "config.label.commandTimeout": "Thời gian chờ lệnh", + "config.label.persistentShell": "Shell duy trì", + "config.label.envPassthrough": "Chuyển tiếp biến môi trường", + "config.label.fileReadLimit": "Giới hạn đọc tệp", + "config.label.terminalOutputLimit": "Giới hạn đầu ra terminal", + "config.label.filePageLimit": "Giới hạn trang tệp", + "config.label.lineLengthLimit": "Giới hạn độ dài dòng", + "config.label.codeExecutionMode": "Chế độ thực thi mã", + "config.label.approvalMode": "Chế độ phê duyệt", + "config.label.approvalTimeout": "Thời gian chờ phê duyệt", + "config.label.confirmMcpReloads": "Xác nhận tải lại MCP", + "config.label.commandAllowlist": "Danh sách lệnh cho phép", + "config.label.redactSecrets": "Ẩn bí mật", + "config.label.allowPrivateUrls": "Cho phép URL riêng tư", + "config.label.browserPrivateUrls": "URL riêng tư trình duyệt", + "config.label.localBrowserForPrivateUrls": "Trình duyệt cục bộ cho URL riêng tư", + "config.label.fileCheckpoints": "Điểm kiểm tra tệp", + "config.label.checkpointLimit": "Giới hạn điểm kiểm tra", + "config.label.voiceShortcut": "Phím tắt giọng nói", + "config.label.maxRecordingLength": "Độ dài ghi âm tối đa", + "config.label.readResponsesAloud": "Đọc to phản hồi", + "config.label.speechToText": "Chuyển lời nói thành văn bản", + "config.label.speechToTextProvider": "Nhà cung cấp chuyển lời nói", + "config.label.localTranscriptionModel": "Mô hình chuyển lời cục bộ", + "config.label.transcriptionLanguage": "Ngôn ngữ chuyển lời", + "config.label.elevenlabsSttModel": "Mô hình STT ElevenLabs", + "config.label.elevenlabsLanguage": "Ngôn ngữ ElevenLabs", + "config.label.tagAudioEvents": "Gắn thẻ sự kiện âm thanh", + "config.label.speakerDiarization": "Phân biệt người nói", + "config.label.textToSpeechProvider": "Nhà cung cấp văn bản thành giọng nói", + "config.label.edgeVoice": "Giọng Edge", + "config.label.openaiTtsModel": "Mô hình TTS OpenAI", + "config.label.openaiVoice": "Giọng OpenAI", + "config.label.elevenlabsVoice": "Giọng ElevenLabs", + "config.label.elevenlabsModel": "Mô hình ElevenLabs", + "config.label.persistentMemory": "Bộ nhớ duy trì", + "config.label.userProfile": "Hồ sơ người dùng", + "config.label.memoryBudget": "Ngân sách bộ nhớ", + "config.label.profileBudget": "Ngân sách hồ sơ", + "config.label.memoryProvider": "Nhà cung cấp bộ nhớ", + "config.label.contextEngine": "Cơ chế ngữ cảnh", + "config.label.autoCompression": "Tự động nén", + "config.label.compressionThreshold": "Ngưỡng nén", + "config.label.compressionTarget": "Mục tiêu nén", + "config.label.protectedRecentMessages": "Tin nhắn gần đây được bảo vệ", + "config.label.apiRetries": "Số lần thử lại API", + "config.label.serviceTier": "Cấp dịch vụ", + "config.label.toolUseEnforcement": "Thực thi sử dụng công cụ", + "config.label.subagentModel": "Mô hình tác tử phụ", + "config.label.subagentProvider": "Nhà cung cấp tác tử phụ", + "config.label.subagentTurnLimit": "Giới hạn lượt tác tử phụ", + "config.label.parallelSubagents": "Tác tử phụ song song", + "config.label.subagentTimeout": "Thời gian chờ tác tử phụ", + "config.label.subagentReasoningEffort": "Nỗ lực suy luận tác tử phụ", + "config.desc.defaultModel": "Dùng cho trò chuyện mới trừ khi bạn chọn mô hình khác trong khung soạn.", + "config.desc.contextWindow": "Để 0 để dùng cửa sổ ngữ cảnh được phát hiện của mô hình đã chọn.", + "config.desc.fallbackModels": "Các mục nhà cung cấp:mô hình dự phòng để thử nếu mô hình mặc định thất bại.", + "config.desc.personality": "Phong cách trợ lý mặc định cho phiên mới.", + "config.desc.timezone": "Dùng khi Hermes cần ngữ cảnh thời gian địa phương. Để trống dùng múi giờ hệ thống.", + "config.desc.reasoningBlocks": "Hiện các phần suy luận khi backend cung cấp.", + "config.desc.imageAttachments": "Kiểm soát cách đính kèm hình ảnh được gửi đến mô hình.", + "config.desc.workingDirectory": "Thư mục dự án mặc định cho công việc công cụ và terminal.", + "config.desc.codeExecutionMode": "Mức độ giới hạn phạm vi thực thi mã trong dự án hiện tại.", + "config.desc.persistentShell": "Giữ trạng thái shell giữa các lệnh khi backend hỗ trợ.", + "config.desc.envPassthrough": "Biến môi trường cần chuyển tiếp vào quá trình thực thi công cụ.", + "config.desc.fileReadLimit": "Số ký tự tối đa Hermes có thể đọc từ một yêu cầu tệp.", + "config.desc.approvalMode": "Cách Hermes xử lý các lệnh cần phê duyệt rõ ràng.", + "config.desc.approvalTimeout": "Thời gian chờ lời nhắc phê duyệt trước khi hết hạn.", + "config.desc.redactSecrets": "Ẩn bí mật bị phát hiện khỏi nội dung hiển thị cho mô hình khi có thể.", + "config.desc.fileCheckpoints": "Tạo ảnh chụp khôi phục trước khi chỉnh sửa tệp.", + "config.desc.persistentMemory": "Lưu ký ức bền vững có thể giúp ích cho các phiên sau.", + "config.desc.userProfile": "Duy trì hồ sơ gọn nhẹ về tùy chọn người dùng.", + "config.desc.contextEngine": "Chiến lược quản lý hội thoại dài gần giới hạn ngữ cảnh.", + "config.desc.autoCompression": "Tóm tắt ngữ cảnh cũ khi hội thoại trở nên lớn.", + "config.desc.readResponsesAloud": "Tự động đọc to phản hồi của trợ lý.", + "config.desc.speechToText": "Bật chuyển lời nói cục bộ hoặc qua nhà cung cấp.", + "config.desc.elevenlabsLanguage": "Mã ngôn ngữ ISO-639-3 tùy chọn. Để trống để ElevenLabs tự động phát hiện.", + "config.desc.maxAgentSteps": "Giới hạn trên cho số lượt gọi công cụ trước khi Hermes dừng một lần chạy.", + "mcp.failedToLoad": "Không thể tải cấu hình MCP", + "mcp.invalidJsonShort": "JSON MCP không hợp lệ", + "mcp.serverSaved": "Đã lưu máy chủ MCP", + "mcp.toolsReloaded": "Đã tải lại công cụ MCP", + "mcp.emptyDesc": "Thêm máy chủ stdio hoặc HTTP để hiển thị công cụ MCP.", + "sessions.loadFailed": "Không thể tải phiên đã lưu trữ", + "sessions.unarchiveFailed": "Bỏ lưu trữ thất bại", + "sessions.deleteFailed": "Xóa thất bại", + "sessions.archiveHint": "Lưu trữ trò chuyện để ẩn ở đây.", + "sessions.updateDirFailed": "Không thể cập nhật thư mục mặc định", + "sessions.clearDirFailed": "Không thể xóa thư mục mặc định", + "keys.showAdvanced": "Hiện nâng cao", + "keys.loadFailed": "Không thể tải khóa API", + "keys.credentialSaved": "Đã lưu thông tin xác thực", + "keys.credentialRemoved": "Đã xóa thông tin xác thực", + "provider.desc.nousPortal": "Ghi đè URL cơ sở Cổng Nous", + "provider.desc.openRouter": "Khóa API OpenRouter (cho thị giác, trợ lý trích xuất web và MoA)", + "provider.desc.google": "Khóa API Google AI Studio (cũng được nhận dạng là GEMINI_API_KEY)", + "provider.desc.gemini": "ID dự án GCP cho các gói Gemini trả phí (gói miễn phí tự động cấp)", + "provider.desc.anthropic": "Khóa API Anthropic", + "provider.desc.deepseek": "URL cơ sở API DeepSeek tùy chỉnh (nâng cao)", + "provider.desc.xai": "Ghi đè URL cơ sở xAI", + "provider.desc.huggingface": "Ghi đè URL cơ sở Nhà cung cấp suy luận Hugging Face", + "provider.desc.kimi": "Khóa API Kimi / Moonshot Trung Quốc", + "provider.desc.minimax": "Ghi đè URL cơ sở MiniMax (Trung Quốc)", + "provider.desc.minimaxCn": "Khóa API MiniMax Trung Quốc", + "provider.desc.dashscope": "URL cơ sở DashScope tùy chỉnh (mặc định: điểm cuối tương thích OpenAI coding-intl)", + "provider.desc.glm": "Khóa API GLM (Z.AI)", + "provider.desc.nvidia": "Ghi đè URL cơ sở NVIDIA NIM (vd: http://localhost:8000/v1 cho NIM cục bộ)", + "provider.desc.opencodeGo": "Khóa API OpenCode Go", + "provider.desc.opencodeZen": "Khóa API OpenCode Zen", + "provider.desc.xiaomi": "Ghi đè URL cơ sở Xiaomi MiMo (mặc định: https://api.xiaomimimo.com/v1)", + "provider.desc.kiloCode": "Khóa API Kilo Code", + "provider.desc.aiGateway": "Khóa API AI Gateway (Vercel AI Gateway)", + "provider.desc.browserbase": "BROWSERBASE_API_KEY", + "provider.desc.elevenLabs": "Khóa API ElevenLabs", + "provider.desc.openai": "Khóa API OpenAI (cho xử lý giọng nói qua proxy)", + "provider.desc.mistral": "Khóa API Mistral (cho STT/TTS)", + "provider.desc.groq": "Khóa API Groq (cho STT)", + "provider.desc.tavily": "TAVILY_API_KEY", + "provider.desc.firecrawl": "URL API Firecrawl cho phiên bản tự lưu trữ (tùy chọn)", + "provider.desc.fal": "FAL_KEY", + "provider.desc.nous": "Ghi đè URL cơ sở Cổng Nous", + "provider.desc.openrouter": "Khóa API OpenRouter (cho thị giác, trợ lý trích xuất web và MoA)", + "provider.desc.lmstudio": "Ghi đè URL cơ sở Z.AI / GLM", + "provider.desc.zai": "URL cơ sở Azure Foundry (đặt qua 'hermes model' cho cấu hình điểm cuối cụ thể)", + "provider.desc.stepfun": "Ghi đè URL cơ sở StepFun Step Plan", + "provider.desc.arcee": "Ghi đè URL cơ sở Arcee AI", + "provider.desc.gmi": "Ghi đè URL cơ sở GMI Cloud", + "provider.desc.qwenportal": "Ghi đè URL cơ sở Cổng Qwen (mặc định: https://portal.qwen.ai/v1)", + "provider.desc.opencodego": "Ghi đè URL cơ sở OpenCode Go", + "provider.desc.ollamacloud": "Ghi đè URL cơ sở Ollama Cloud (mặc định: https://ollama.com/v1)", + "provider.desc.awsbedrock": "Hồ sơ AWS được đặt tên cho xác thực Bedrock (từ ~/.aws/credentials)", + "provider.desc.exa": "Khóa API Exa cho tìm kiếm web và nội dung AI", + "provider.desc.parallel": "Khóa API Parallel cho tìm kiếm và trích xuất web AI", + "titlebar.language": "Ngôn ngữ", + "titlebar.languageDesc": "Chọn ngôn ngữ hiển thị cho giao diện.", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)", + "language.vi": "Tiếng Việt" +} diff --git a/apps/desktop/src/locales/zh-CN.json b/apps/desktop/src/locales/zh-CN.json new file mode 100644 index 000000000000..c9339e0b36cd --- /dev/null +++ b/apps/desktop/src/locales/zh-CN.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "外观", + "appearance.description": "这些是桌面端专属显示偏好。配色模式决定界面亮暗;主题控制色调强调色和聊天气泡样式。", + "appearance.colorMode": "配色模式", + "appearance.colorModeDesc": "选择固定模式或让 Hermes 跟随系统设置。", + "appearance.theme": "主题", + "appearance.themeDesc": "选择聊天界面和交互元素的配色方案。", + "appearance.mode.light": "浅色", + "appearance.mode.lightDesc": "明亮的桌面界面", + "appearance.mode.dark": "深色", + "appearance.mode.darkDesc": "柔光护眼界面", + "appearance.mode.system": "跟随系统", + "appearance.mode.systemDesc": "跟随操作系统外观", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "玻璃中性色 × Nous 蓝点缀", + "appearance.theme.midnight": "午夜", + "appearance.theme.midnightDesc": "深蓝紫色搭配冷色调点缀", + "appearance.theme.ember": "余烬", + "appearance.theme.emberDesc": "暖红铜色调——熔炉氛围", + "appearance.theme.mono": "单色", + "appearance.theme.monoDesc": "简洁灰度——极简专注", + "appearance.theme.cyberpunk": "赛博朋克", + "appearance.theme.cyberpunkDesc": "黑底霓虹绿——黑客帝国风格", + "appearance.theme.slate": "石板", + "appearance.theme.slateDesc": "冷调石板蓝——专注开发者主题", + "appearance.language": "语言", + "appearance.languageDesc": "选择界面语言或让 Hermes 跟随系统设置。", + "language.system": "跟随系统", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "设置", + "settings.appearance": "外观", + "settings.model": "模型", + "settings.gateway": "网关", + "settings.sessions": "会话", + "settings.tools": "工具与技能", + "settings.section.chat": "对话", + "settings.section.workspace": "工作区", + "settings.section.safety": "安全", + "settings.section.memory": "记忆与上下文", + "settings.section.voice": "语音", + "settings.section.advanced": "高级", + "settings.mcp": "MCP 服务", + "settings.config": "配置", + "settings.keys": "API 密钥", + "settings.about": "关于", + "chat.placeholder": "有什么尽管问吧…", + "chat.send": "发送", + "chat.stop": "停止", + "chat.thinking": "思考中…", + "chat.noSession": "没有活跃会话。开始一个新对话。", + "commandCenter.title": "控制中心", + "commandCenter.noSessions": "暂无会话。", + "commandCenter.loadingStatus": "正在加载状态…", + "commandCenter.recentLogs": "最近日志", + "commandCenter.dailyTokens": "每日 Token", + "commandCenter.noActivity": "暂无日常活动。", + "commandCenter.noModelUsage": "暂无模型使用记录。", + "commandCenter.noSkillActivity": "暂无技能活动。", + "common.loading": "加载中…", + "common.save": "保存", + "common.cancel": "取消", + "common.close": "关闭", + "common.delete": "删除", + "common.confirm": "确认", + "common.search": "搜索…", + "onboarding.welcome": "欢迎使用 Hermes", + "onboarding.getStarted": "选择提供方和模型开始使用。", + "onboarding.skip": "跳过", + "onboarding.continue": "继续", + "onboarding.finish": "完成", + "file.browser": "文件浏览器", + "file.noFiles": "暂无文件。", + "terminal.title": "终端", + "terminal.newTab": "新建标签页", + "terminal.closeTab": "关闭标签页", + "skills.title": "技能", + "skills.search": "搜索技能…", + "skills.noResults": "未找到技能。", + "profiles.title": "配置文件", + "cron.title": "定时任务", + "cron.noJobs": "暂无定时任务。", + "messaging.title": "消息", + "about.version": "版本", + "about.checkUpdates": "检查更新", + "about.upToDate": "Hermes 已是最新版本。", + "about.updateAvailable": "有新版本可用。", + "about.license": "MIT 许可证", + "keys.title": "API 密钥", + "keys.noKeys": "未配置 API 密钥。", + "keys.addKey": "添加密钥", + "config.title": "配置", + "config.edit": "编辑配置", + "config.reload": "重新加载配置", + "gateway.title": "网关", + "gateway.start": "启动网关", + "gateway.stop": "停止网关", + "gateway.restart": "重启网关", + "gateway.running": "运行中", + "gateway.stopped": "已停止", + "sessions.title": "会话", + "sessions.search": "搜索会话…", + "sessions.noResults": "未找到会话。", + "sessions.export": "导出", + "sessions.delete": "删除会话", + "mcp.title": "MCP 服务", + "mcp.addServer": "添加服务", + "mcp.noServers": "未配置 MCP 服务。", + "tools.title": "工具与技能", + "tools.noTools": "暂无可用工具。", + "nav.home": "首页", + "nav.chat": "对话", + "nav.settings": "设置", + "nav.files": "文件", + "nav.terminal": "终端", + "header.search": "搜索或输入命令…", + "updates.checking": "正在检查更新…", + "updates.available": "有可用更新", + "updates.downloading": "正在下载…", + "updates.installing": "正在安装…", + "updates.restart": "重启以更新", + "errors.generic": "出了点问题。", + "errors.notFound": "页面未找到。", + "errors.noPermission": "您没有访问权限。", + "tool.toolCall": "工具调用", + "tool.result": "结果", + "tool.error": "错误", + "tool.timeout": "超时", + "tool.cancelled": "已取消", + "settings.closeSettings": "关闭设置", + "settings.archivedChats": "已归档对话", + "settings.exportConfig": "导出配置", + "settings.importConfig": "导入配置", + "settings.resetDefaults": "恢复默认", + "settings.llmProviders": "LLM 提供方", + "settings.searchPlaceholder.about": "关于 Hermes Desktop", + "settings.searchPlaceholder.config": "搜索设置…", + "settings.searchPlaceholder.gateway": "网关连接…", + "settings.searchPlaceholder.keys": "搜索 API 密钥…", + "settings.searchPlaceholder.mcp": "搜索 MCP 服务…", + "settings.searchPlaceholder.sessions": "搜索已归档会话…", + "about.hermesDesktop": "Hermes 桌面应用", + "about.versionUnavailable": "版本不可用", + "about.updates": "更新", + "about.checkNow": "立即检查", + "about.checking": "检查中…", + "about.seeWhatsNew": "查看新内容", + "about.releaseNotes": "发布说明", + "about.autoUpdates": "自动更新", + "about.autoUpdatesDesc": "Hermes 会在后台自动检查更新,并在有可用更新时通知你。", + "about.selfUpdateUnsupported": "此版本无法在应用内部自行更新。", + "about.cannotReachServer": "无法连接更新服务器。", + "about.installingUpdate": "更新正在安装中。", + "about.updateReady": "新版本已就绪(包含 {count} 项变更)。", + "about.updateReady_plural": "新版本已就绪(包含 {count} 项变更)。", + "about.onLatest": "你已使用最新版本。", + "about.tapCheckNow": "点击「立即检查」以查找更新。", + "about.lastChecked": "上次检查于 {time}", + "about.justNow": "刚刚", + "about.never": "从未", + "about.minAgo": "{count} 分钟前", + "about.hoursAgo": "{count} 小时前", + "about.daysAgo": "{count} 天前", + "about.buildInfo": "分支 {branch} · 提交 {sha}", + "keys.loading": "正在加载 API 密钥和凭据…", + "keys.docs": "文档", + "keys.openDocs": "打开提供方文档", + "keys.hideValue": "隐藏值", + "keys.revealValue": "显示值", + "keys.set": "设置", + "keys.notSet": "未设置", + "keys.replace": "替换", + "keys.replaceValue": "替换当前值", + "keys.enterValue": "输入值", + "keys.saving": "保存中", + "keys.save": "保存", + "keys.cancel": "取消", + "keys.clearValue": "清除值", + "keys.configured": "已配置 {count}/{total}", + "keys.setCount": "已设置 {count}/{total}", + "keys.countSet": "已设置 {count} 个", + "keys.countKeys": "{count} 个密钥", + "keys.otherProviders": "其他提供方", + "keys.categoryTools": "工具", + "keys.categoryMessaging": "消息", + "keys.categorySettings": "设置", + "config.notSet": "未设置", + "config.commaSeparated": "逗号分隔的值", + "config.on": "开启", + "config.off": "关闭", + "config.none": "无", + "config.emptyOption": "(无)", + "config.loading": "正在加载 Hermes 配置…", + "config.noMatching": "无匹配设置", + "config.noMatchingDesc": "请尝试其他搜索词或选择其他分类。", + "config.results": "{count} 个结果", + "config.results_plural": "{count} 个结果", + "gateway.loading": "正在加载网关设置…", + "gateway.unavailable": "网关设置不可用", + "gateway.unavailableDesc": "桌面 IPC 桥接未暴露网关设置。", + "gateway.connection": "网关连接", + "gateway.envOverride": "环境变量覆盖", + "gateway.desc": "Hermes Desktop 默认启动自己的本地网关。当你希望此应用控制另一台机器上或受信任代理后已在运行的 Hermes 后端时,请使用远程网关。", + "gateway.envOverrideTitle": "环境变量正在控制此桌面会话。", + "gateway.envOverrideDesc": "取消设置 {urlVar} 和 {tokenVar} 以使用下方保存的设置。", + "gateway.localTitle": "本地网关", + "gateway.localDesc": "在 localhost 上启动私有的 Hermes 后端。这是默认选项,支持离线使用。", + "gateway.remoteTitle": "远程网关", + "gateway.remoteDesc": "使用会话令牌将此桌面 shell 连接到远程 Hermes 后端。", + "gateway.remoteUrl": "远程 URL", + "gateway.remoteUrlDesc": "远程仪表板后端的 Base URL。支持路径前缀,例如 /hermes。", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "会话令牌", + "gateway.sessionTokenDesc": "用于 REST 和 WebSocket 访问的仪表板会话令牌。留空以保留已保存的令牌。", + "gateway.sessionTokenPlaceholder": "粘贴会话令牌", + "gateway.existingToken": "现有令牌 {preview}", + "gateway.tokenSaved": "已保存", + "gateway.testRemote": "测试远程连接", + "gateway.saveRestart": "保存并下次重启时生效", + "gateway.saveReconnect": "保存并重新连接", + "gateway.diagnostics": "诊断", + "gateway.diagnosticsDesc": "在文件管理器中显示 desktop.log——在网关启动失败时非常有用。", + "gateway.openLogs": "打开日志", + "sessions.loading": "加载中…", + "sessions.defaultProjectDir": "默认项目目录", + "sessions.defaultProjectDirDesc": "新会话默认在此文件夹中启动,除非另行选择。留空则使用您的 home 目录。", + "sessions.defaultDir": "默认为 {fallback}。", + "sessions.notSet": "未设置", + "sessions.change": "更改", + "sessions.choose": "选择", + "sessions.clear": "清除", + "sessions.archivedTitle": "已归档的会话", + "sessions.archivedDesc": "已归档的聊天会从侧边栏隐藏,但保留所有消息。按住 Ctrl/⌘ 点击侧边栏中的聊天即可归档。", + "sessions.nothingArchived": "暂无归档", + "sessions.noSearchMatch": "没有匹配搜索条件的已归档对话。", + "sessions.archiveToHide": "归档一个聊天来将其隐藏于此。", + "sessions.unarchive": "取消归档", + "sessions.deletePermanently": "永久删除", + "sessions.messages": "{count} 条消息", + "mcp.loading": "正在加载 MCP 服务…", + "mcp.servers": "MCP 服务", + "mcp.configured": "已配置 {count} 个", + "mcp.newServer": "新建服务", + "mcp.reloadMCP": "重新加载 MCP", + "mcp.reloading": "重新加载中...", + "mcp.noServersDesc": "添加 stdio 或 HTTP 服务以启用 MCP 工具。", + "mcp.name": "名称", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "服务 JSON", + "mcp.editServer": "编辑服务", + "mcp.saveServer": "保存服务", + "mcp.saving": "保存中...", + "mcp.remove": "移除", + "mcp.disabled": "已禁用", + "model.auxTask.vision": "视觉", + "model.auxTask.visionHint": "图像分析", + "model.auxTask.web_extract": "网页提取", + "model.auxTask.web_extractHint": "页面摘要", + "model.auxTask.compression": "压缩", + "model.auxTask.compressionHint": "上下文压缩", + "model.auxTask.session_search": "会话搜索", + "model.auxTask.session_searchHint": "回忆查询", + "model.auxTask.skills_hub": "技能中心", + "model.auxTask.skills_hubHint": "技能搜索", + "model.auxTask.approval": "审批", + "model.auxTask.approvalHint": "智能自动审批", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "MCP 工具路由", + "model.auxTask.title_generation": "标题生成", + "model.auxTask.title_generationHint": "会话标题", + "model.auxTask.curator": "策划", + "model.auxTask.curatorHint": "技能使用回顾", + "model.mainModel": "主模型", + "model.mainDesc": "适用于新会话。使用编辑器中的模型选择器可即时切换当前对话的模型。", + "model.providerPlaceholder": "提供方", + "model.modelPlaceholder": "模型", + "model.apply": "应用", + "model.applying": "正在应用…", + "model.auxiliaryModels": "辅助模型", + "model.auxiliaryDesc": "辅助任务默认在主模型上运行。为特定任务分配专用模型以覆盖默认设置。", + "model.resetAllToMain": "全部重置为主模型", + "model.setToMain": "设为主模型", + "model.change": "更改", + "model.cancel": "取消", + "model.autoUseMain": "自动 · 使用主模型", + "model.providerDefault": "(提供方默认)", + "model.loading": "正在加载模型配置…", + "tool.running": "运行中", + "tool.recovered": "已恢复", + "tool.done": "已完成", + "tool.output": "工具输出", + "tool.searchResults": "搜索结果", + "tool.rawResponse": "原始响应", + "tool.stdout": "标准输出", + "tool.stderr": "标准错误", + "tool.copyActivity": "复制活动", + "composer.startingHermes": "正在启动 Hermes…", + "composer.sendFollowUp": "发送追问", + "composer.message": "消息", + "composer.editingQueued": "正在编辑编辑器中已排队的轮次", + "composer.attach": "附加", + "composer.files": "文件…", + "composer.folder": "文件夹…", + "composer.images": "图片…", + "composer.pasteImage": "粘贴图片", + "composer.url": "链接…", + "composer.promptSnippets": "提示词片段", + "composer.promptSnippetsDesc": "选择一个起始提示词放入编辑器中。", + "composer.voiceStart": "开始语音对话", + "composer.queue": "排队消息", + "composer.speaking": "正在说话", + "composer.transcribing": "正在转录", + "composer.muted": "已静音", + "composer.listening": "正在聆听", + "composer.unmuteMic": "取消麦克风静音", + "composer.muteMic": "麦克风静音", + "composer.stopListening": "停止聆听并发送", + "composer.endVoice": "结束语音对话", + "composer.end": "结束", + "composer.stopDictation": "停止听写", + "composer.transcribingDictation": "正在转录听写内容", + "composer.voiceDictation": "语音听写", + "sessions.new": "新建会话", + "sessions.running": "会话运行中", + "sessions.actions": "会话操作", + "sessions.reorder": "重新排序", + "sessions.pin": "置顶", + "sessions.unpin": "取消置顶", + "sessions.copyId": "复制 ID", + "sessions.rename": "重命名", + "sessions.archive": "归档", + "sessions.renameDialog": "重命名会话", + "sessions.renameDesc": "给这个聊天起个好记的标题。留空即可清除。", + "sessions.untitled": "未命名会话", + "sessions.renamed": "已重命名", + "sessions.renameFailed": "重命名失败", + "sessions.pinned": "已置顶", + "sessions.results": "结果", + "sessions.allPinned": "这里的所有聊天都已置顶。取消置顶即可在最近聊天中显示。", + "sessions.pinHint": "Shift + 点击聊天可置顶 · 拖拽可重新排序", + "sessions.loadMore": "加载更多", + "sessions.noWorkspace": "无工作区", + "sessions.ungroup": "将会话显示为单个列表", + "sessions.groupByWorkspace": "按工作区分组会话", + "skills.tools": "技能与工具", + "artifacts": "产物", + "common.clearSearch": "清除搜索", + "common.copy": "复制", + "common.refresh": "刷新", + "common.moreActions": "更多操作", + "common.tryAgain": "重试", + "chat.loadingSession": "正在加载会话", + "chat.loadingResponse": "Hermes 正在加载响应", + "chat.branchInNewChat": "在新对话中分支", + "chat.readAloud": "朗读", + "chat.preparingAudio": "正在准备音频…", + "chat.stopReading": "停止朗读", + "chat.editMessage": "编辑消息", + "chat.editableCheckpoint": "可编辑检查点", + "chat.restoreCheckpoint": "恢复检查点", + "chat.goForward": "前进", + "chat.restorePrevCheckpoint": "恢复上一个检查点", + "chat.restoreNextCheckpoint": "恢复下一个检查点", + "models.title": "模型", + "models.search": "搜索模型", + "models.addProvider": "添加提供方…", + "errors.somethingBroke": "界面出了点问题", + "errors.viewCrashedDesc": "面板遇到了意外错误。你的对话和设置是安全的——请重试,或重新加载窗口。", + "errors.noProviders": "没有已验证的提供方。", + "onboarding.setupTitle": "开始使用 Hermes Agent", + "onboarding.setupDesc": "连接模型提供方即可开始聊天。大多数选项只需一键操作。", + "onboarding.preparing": "正在启动 Hermes…", + "onboarding.installing": "Hermes 正在完成安装。首次运行通常只需不到一分钟。", + "onboarding.lookingUp": "正在查找提供方…", + "onboarding.otherProviders": "其他提供方", + "onboarding.collapse": "收起", + "onboarding.iHaveKey": "我有 API 密钥", + "onboarding.recommended": "推荐", + "onboarding.connected": "已连接", + "onboarding.backToSignIn": "返回登录", + "onboarding.getKey": "获取密钥", + "onboarding.pasteKey": "粘贴 API 密钥", + "onboarding.connect": "连接", + "onboarding.connecting": "连接中", + "onboarding.copyCode": "复制", + "onboarding.startSignIn": "正在为以下提供方启动登录", + "onboarding.verifyingCode": "正在验证您的代码,对接", + "onboarding.pickingModel": "已连接。正在选择默认模型…", + "onboarding.signInFailed": "登录失败,请重试。", + "onboarding.pickDifferent": "选择其他提供方", + "onboarding.signInTitle": "使用以下方式登录", + "onboarding.step1": "我们已在浏览器中打开了", + "onboarding.step1End": "。", + "onboarding.step2": "在此页面授权 Hermes。", + "onboarding.step3": "复制授权代码并粘贴到下方。", + "onboarding.pasteCode": "粘贴授权代码", + "onboarding.reopenAuth": "重新打开授权页面", + "onboarding.cancel": "取消", + "onboarding.browserDesc": "我们已在浏览器中打开了", + "onboarding.browserDescEnd": "。在此页面授权 Hermes,系统将自动完成连接——无需复制或粘贴任何内容。", + "onboarding.waitingAuth": "等待您授权…", + "onboarding.reopenSignIn": "重新打开登录页面", + "onboarding.externalDesc": "通过自有 CLI 登录。在终端中运行此命令,然后返回并选择「我已登录」:", + "onboarding.iSignedIn": "我已登录", + "onboarding.enterCode": "我们已在浏览器中打开了", + "onboarding.enterCodeEnd": "。在此页面输入以下代码:", + "onboarding.reopenVerification": "重新打开验证页面", + "onboarding.defaultModel": "默认模型", + "onboarding.freeTier": "免费版", + "onboarding.pro": "专业版", + "onboarding.change": "更改", + "onboarding.startChatting": "开始聊天", + "onboarding.docs": "文档", + "onboarding.close": "关闭", + "onboarding.savingError": "无法保存凭证。", + "install.title": "Hermes 需要一次性安装", + "install.desc": "自动首次启动安装在此平台上尚不可用", + "install.descEnd": "。请打开终端运行以下命令,然后重新启动此应用。后续启动将跳过此步骤。", + "install.installCommand": "安装命令", + "install.copyCommand": "复制命令", + "install.viewDocs": "查看安装文档", + "install.willInstallTo": "将安装到", + "install.iRanIt": "我已运行——重试", + "install.failed": "安装失败", + "install.settingUp": "正在设置 Hermes Agent", + "install.finishingUp": "正在完成", + "install.failedDesc": "某个安装步骤失败。在 Windows 上,如果另一个 Hermes CLI 或桌面实例正在运行,可能会发生这种情况。请停止所有正在运行的 Hermes 实例,然后重试。查看下方详细信息或桌面日志获取完整记录。", + "install.setupDesc": "这是一次性设置。Hermes 安装程序正在下载依赖项并配置您的机器。后续启动将跳过此步骤。", + "install.fetchingManifest": "正在获取安装程序清单…", + "install.error": "错误", + "install.showOutput": "显示安装程序输出", + "install.hideOutput": "隐藏安装程序输出", + "install.noOutput": "暂无输出。", + "install.cancelInstall": "取消安装", + "install.cancelling": "正在取消…", + "install.copyOutput": "复制输出", + "install.copied": "已复制!", + "install.reloadRetry": "重新加载并重试", + "install.saveLogs": "完整记录已保存至", + "install.stepsComplete": "步骤已完成", + "install.nowLabel": "现在", + "chat.composerTip": "提示:输入 @ 可内联引用文件。", + "composer.addContext": "添加上下文", + "sessions.loadStep": "加载", + "sessions.moreLabel": "更多", + "chat.reconnecting": "正在重新连接 Hermes…", + "appearance.toolCallDisplay": "工具调用显示", + "appearance.toolCallDisplayDesc": "产品模式隐藏原始工具参数;技术模式显示完整输入/输出。", + "appearance.toolViewProduct": "产品模式", + "appearance.toolViewTechnical": "技术模式", + "appearance.toolViewProductDesc": "精简摘要,清晰易读。", + "appearance.toolViewTechnicalDesc": "包含原始工具参数/结果和底层细节。", + "messaging.recommended": "推荐", + "messaging.recommendedTelegram": "推荐。来自 @userinfobot 的逗号分隔数字 ID。如未设置,任何人都可以向您的机器人发送私信。", + "messaging.recommendedDiscord": "推荐。逗号分隔的 Discord 用户 ID。", + "messaging.recommendedSlack": "推荐。逗号分隔的 Slack 用户 ID。", + "messaging.recommendedMattermost": "推荐。逗号分隔的 Mattermost 用户 ID。", + "messaging.recommendedMatrix": "推荐。逗号分隔的 @user:server 格式用户 ID。", + "messaging.recommendedSignal": "推荐。逗号分隔的 Signal 标识符。", + "messaging.recommendedWhatsApp": "推荐。逗号分隔的电话号码或 WhatsApp ID。", + "previewConsole.resizeLabel": "调整预览控制台大小", + "boot.ipcUnavailable": "桌面 IPC 桥接不可用。", + "boot.backendExited": "Hermes 后台进程在启动期间退出。", + "boot.backendStoppedTitle": "后端已停止", + "boot.backendStoppedMessage": "Hermes 后台进程已退出。", + "boot.startingConnection": "正在启动桌面连接", + "boot.connectingGateway": "正在连接实时桌面网关", + "boot.loadingConfig": "正在加载 Hermes 设置", + "boot.loadingSessions": "正在加载最近的会话", + "boot.desktopBootFailed": "桌面启动失败", + "updates.stageGettingReady": "准备中…", + "updates.stageDownloading": "下载中…", + "updates.stageAlmostThere": "快完成了…", + "updates.stageFinishingUp": "收尾中…", + "updates.stageRestarting": "正在重启 Hermes…", + "updates.stageManual": "在终端中更新", + "updates.stageError": "更新已暂停", + "updates.updatingHermes": "正在更新 Hermes…", + "updates.lookingForUpdates": "正在检查更新…", + "updates.couldntCheck": "无法检查更新", + "updates.updateNotAvailable": "更新不可用", + "updates.checkConnection": "请检查网络连接后重试。", + "updates.onLatest": "您正在运行最新版本。", + "updates.allSet": "一切就绪", + "updates.newUpdateAvailable": "有新版本可用", + "updates.readyToInstall": "新版本的 Hermes 已准备好安装。", + "updates.updateNow": "立即更新", + "updates.maybeLater": "稍后再说", + "updates.moreChanges": "+ 包含 {count} 项变更。", + "updates.moreChanges_plural": "+ 包含 {count} 项变更。", + "updates.updateFromTerminal": "在终端中更新", + "updates.terminalDesc": "你是通过命令行安装的 Hermes,所以更新也需要在终端中完成。请将以下命令粘贴到终端:", + "updates.copied": "已复制", + "updates.copy": "复制", + "updates.pickupNewVersion": "Hermes 将在下次启动时自动应用新版本。", + "updates.done": "完成", + "updates.updaterDesc": "Hermes 更新程序将在独立窗口中接管,并在完成后重新打开 Hermes。", + "updates.closeToApply": "Hermes 将关闭以应用更新。", + "updates.updateDidntFinish": "更新未完成", + "updates.nothingLost": "别担心——没有丢失任何内容。你可以立即重试。", + "updates.notNow": "暂时不要", + "commandCenter.sessionsPanel": "会话面板", + "commandCenter.systemPanel": "系统面板", + "commandCenter.usagePanel": "用量面板", + "commandCenter.navigate": "导航", + "commandCenter.noMatchingResults": "未找到匹配结果。", + "commandCenter.noSessionsYet": "暂无会话。", + "commandCenter.unpinSession": "取消置顶会话", + "commandCenter.pinSession": "置顶会话", + "commandCenter.exportSession": "导出会话", + "commandCenter.deleteSession": "删除会话", + "commandCenter.gatewayRunning": "消息网关运行中", + "commandCenter.gatewayStopped": "消息网关已停止", + "commandCenter.restartMsg": "重启消息服务", + "commandCenter.updateHermes": "更新 Hermes", + "commandCenter.noLogsLoaded": "尚未加载日志。", + "commandCenter.closeLabel": "关闭控制中心", + "commandCenter.searchPlaceholder": "搜索会话、面板和操作", + "commandCenter.statSessions": "会话数", + "commandCenter.statApiCalls": "API 调用", + "commandCenter.statTokens": "输入/输出 Token", + "commandCenter.statEstCost": "估算费用", + "commandCenter.actualCost": "实际 {cost}", + "commandCenter.loadingUsage": "正在加载用量数据…", + "commandCenter.noUsageDesc": "过去 {count} 天无使用记录。", + "commandCenter.retry": "重试", + "commandCenter.tokenInput": "输入", + "commandCenter.tokenOutput": "输出", + "commandCenter.noDailyActivity": "暂无日常活动。", + "commandCenter.topModels": "热门模型", + "commandCenter.topSkills": "热门技能", + "commandCenter.actionsLabel": "操作", + "commandCenter.systemRunning": "运行中", + "commandCenter.systemDone": "已完成", + "commandCenter.systemFailed": "失败", + "mcp.nameRequired": "名称不能为空", + "mcp.nameRequiredDesc": "请为此 MCP 服务指定一个配置键名。", + "mcp.invalidJson": "服务器配置必须是 JSON 对象", + "mcp.invalidJsonDesc": "无效的 MCP JSON", + "mcp.saved": "MCP 服务已保存", + "mcp.savedDesc": "{name} 在 MCP 重新加载后生效。", + "mcp.saveFailed": "保存失败", + "mcp.removeFailed": "删除失败", + "mcp.gatewayUnavailable": "网关不可用", + "mcp.gatewayUnavailableDesc": "请先重新连接网关,再重新加载 MCP。", + "mcp.reloadedTitle": "MCP 工具已重新加载", + "mcp.reloadedDesc": "新的工具模式将在新一轮对话中生效。", + "mcp.reloadFailed": "MCP 重新加载失败", + "urlDialog.title": "附加链接", + "urlDialog.description": "Hermes 将获取该页面并将其作为本轮对话的上下文。", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "请包含完整链接,例如", + "urlDialog.attach": "附加", + "model.options": "选项", + "model.thinking": "思考", + "model.fast": "快速", + "model.effort": "推理力度", + "model.noOptions": "该模型无可用选项", + "model.optionUpdateFailed": "模型选项更新失败", + "model.fastModeUpdateFailed": "快速模式更新失败", + "model.effortMinimal": "最低", + "model.effortLow": "低", + "model.effortMedium": "中", + "model.effortHigh": "高", + "model.effortMax": "最高", + "gateway.connected": "已连接", + "gateway.connecting": "连接中", + "gateway.disconnected": "已断开", + "gateway.inferenceReady": "推理就绪", + "gateway.inferenceNotReady": "推理未就绪", + "gateway.checkingInference": "正在检查推理状态", + "gateway.openSystemPanel": "打开系统面板", + "gateway.connectionLabel": "连接状态:", + "gateway.recentActivity": "最近活动", + "gateway.viewAllLogs": "查看所有日志 →", + "gateway.messagingPlatforms": "消息平台", + "titlebar.hideSidebar": "隐藏侧边栏", + "titlebar.showSidebar": "显示侧边栏", + "titlebar.search": "搜索", + "titlebar.searchTitle": "搜索会话、面板和操作", + "titlebar.hideRightSidebar": "隐藏右侧栏", + "titlebar.showRightSidebar": "显示右侧栏", + "titlebar.unmuteHaptics": "开启触感反馈", + "titlebar.muteHaptics": "关闭触感反馈", + "titlebar.openSettings": "打开设置", + "titlebar.profiles": "配置文件", + "titlebar.profilesDesc": "高级 Hermes 环境,支持独立角色、配置、技能和 SOUL.md。", + "titlebar.manageProfiles": "管理配置文件", + "pagination.ariaLabel": "分页", + "pagination.prevAria": "转到上一页", + "pagination.prev": "上一页", + "pagination.nextAria": "转到下一页", + "pagination.next": "下一页", + "boot.couldNotStart": "Hermes 无法启动", + "boot.recoveryDesc": "后台网关未能启动。请尝试下方的恢复步骤——这不会删除您的聊天记录或设置。", + "boot.retry": "重试", + "boot.repairInstall": "修复安装", + "boot.useLocalGateway": "使用本地网关", + "boot.openLogs": "打开日志", + "boot.repairHint": "修复会重新运行安装程序,在未安装过的机器上可能需要几分钟。", + "boot.showLogs": "显示最近日志", + "boot.hideLogs": "隐藏最近日志", + "bootstrap.pending": "等待中", + "bootstrap.running": "安装中", + "bootstrap.done": "已完成", + "bootstrap.skipped": "已跳过", + "bootstrap.failed": "失败", + "model.switch": "切换模型", + "model.unknown": "(未知)", + "model.filterPlaceholder": "筛选提供商和模型…", + "model.persistGlobal": "全局保存", + "model.persistGlobalSession": "全局保存(否则仅限此会话)", + "model.couldNotLoad": "无法加载模型", + "model.proLockedDesc": "Pro 模型需要付费的 Nous 订阅。", + "model.priceTooltip": "每百万 token 的输入/输出价格", + "model.freePrice": "免费", + "model.currentLabel": "当前:", + "model.addProviderBtn": "添加提供商", + "sidebar.sheetTitle": "侧边栏", + "sidebar.sheetDesc": "显示移动端侧边栏。", + "sidebar.toggle": "切换侧边栏", + "clarify.hermesIsAsking": "Hermes 有个问题", + "clarify.loadingQuestion": "正在加载问题…", + "clarify.otherTypeAnswer": "其他(手动输入)", + "clarify.placeholderAnswer": "在此输入您的回答…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter 发送", + "clarify.back": "返回", + "clarify.skip": "跳过", + "clarify.couldNotSend": "回复发送失败", + "clarify.pickLabel": "从 1–{n} 中选择", + "tool.recoveredAfter": "在 1 个步骤失败后恢复", + "tool.recoveredAfterN": "在 {count} 个步骤失败后恢复", + "tool.oneStepFailed": "1 个步骤失败", + "tool.nStepsFailed": "{count} 个步骤失败", + "intro.fallback1h": "今天我们要做什么?", + "intro.fallback1b": "发送 bug、分支、计划或粗略想法。我会检查仓库并将其转化为下一步具体操作。", + "intro.fallback2h": "在想什么?", + "intro.fallback2b": "提供代码、问题或卡住的部分。我会先了解情况再做出更改。", + "intro.fallback3h": "有什么要我看的?", + "intro.fallback3b": "发送任务、失败方式或初步思路。我会帮你将其转化为行动。", + "intro.fallback4h": "从哪里开始?", + "intro.fallback4b": "提供问题、目标或文件。我会先检查并确保下一步具体可行。", + "intro.fallback5h": "有什么需要关注的?", + "intro.fallback5b": "发送你所拥有的上下文。我会帮你整理成计划或修复方案。", + "intro.personality.heading1": "{label} 模式已开启。我们应该做什么?", + "intro.personality.body1": "发送任务、文件或粗略想法。我会按你配置的风格,结合仓库内容来推进。", + "intro.personality.heading2": "{label} Hermes 需要看什么?", + "intro.personality.body2": "提供上下文或卡住的部分。我会按你配置的风格处理。", + "intro.personality.heading3": "{label} 模式已就绪。", + "intro.personality.body3": "发送问题、文件或想法。我会按你配置的风格处理。", + "intro.personality.heading4": "{label} Hermes 应该解决什么?", + "intro.personality.body4": "给我一个任务。我会结合仓库内容来推进。", + "intro.personality.heading5": "我们从哪里开始?", + "intro.personality.body5": "告诉我发生了什么,卡在哪了?我会以 {label} 模式回答。", + "intro.brand": "HERMES AGENT", + "install.line": "行", + "install.lines": "行", + "artifacts.noArtifactsFound": "未找到产物", + "previewConsole.noMessages": "暂无控制台消息。", + "agents.spawnTree": "生成树", + "agents.liveSubagentActivity": "当前轮次的实时子代理活动。", + "agents.noLiveSubagents": "无实时子代理", + "agents.files": "文件", + "profiles.noProfilesYet": "暂无配置文件。", + "profiles.selectProfile": "选择一个配置文件以查看其详情。", + "profiles.deleteProfile": "删除配置文件?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "未保存的更改", + "profiles.newProfile": "新建配置文件", + "profiles.cloneFromDefault": "从默认复制", + "profiles.renameProfile": "重命名配置文件", + "messaging.gatewayStopped": "消息网关已停止", + "messaging.getCredentials": "获取凭据", + "messaging.required": "必填", + "messaging.unsavedChanges": "未保存的更改", + "messaging.saved": "已保存", + "cron.deleteCronJob": "删除定时任务?", + "cron.optional": "可选", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "网关", + "gateway.inferenceStatus": "网关推理状态", + "agents.label": "Agent", + "agents.open": "打开 Agent", + "agents.close": "关闭 Agent", + "agents.subagent": "子代理", + "agents.subagents": "子代理", + "agents.failed": "失败", + "agents.running": "运行中", + "cron.label": "定时任务", + "cron.open": "打开定时任务", + "commandCenter.open": "打开控制中心", + "commandCenter.close": "关闭控制中心", + "mcp.giveConfigKey": "为这个 MCP 服务指定一个配置键。", + "mcp.reconnectGateway": "重新加载 MCP 前请重新连接网关。", + "mcp.newSchemas": "新的工具模式将在新对话轮次中生效。", + "mcp.loadingServers": "正在加载 MCP 服务器...", + "mcp.serverName": "名称", + "mcp.serversTitle": "MCP 服务器", + "mcp.noServersTitle": "没有 MCP 服务器", + "sessions.nothingArchivedTitle": "没有归档内容", + "sessions.deletePermanentlyTitle": "永久删除", + "sessions.defaultProjectDirTitle": "默认项目目录", + "sessions.loadingArchived": "正在加载已归档的会话…", + "sessions.restored": "已恢复", + "sessions.projectDirUpdated": "默认项目目录已更新", + "gateway.enterUrlFirst": "切换前请先输入远程 URL 和会话令牌", + "gateway.enterUrlFirstTest": "测试前请先输入远程 URL 和会话令牌", + "config.saving": "保存中…", + "keys.openProviderDocs": "打开提供方文档", + "config.label.defaultModel": "默认模型", + "config.label.contextWindow": "上下文窗口", + "config.label.fallbackModels": "备用模型", + "config.label.enabledToolsets": "已启用的工具集", + "config.label.timezone": "时区", + "config.label.personality": "风格设定", + "config.label.reasoningBlocks": "推理块", + "config.label.maxAgentSteps": "最大 Agent 步数", + "config.label.imageAttachments": "图片附件", + "config.label.workingDirectory": "工作目录", + "config.label.executionBackend": "执行后端", + "config.label.commandTimeout": "命令超时", + "config.label.persistentShell": "持久 Shell", + "config.label.envPassthrough": "环境变量传递", + "config.label.fileReadLimit": "文件读取限制", + "config.label.terminalOutputLimit": "终端输出限制", + "config.label.filePageLimit": "文件分页限制", + "config.label.lineLengthLimit": "行长度限制", + "config.label.codeExecutionMode": "代码执行模式", + "config.label.approvalMode": "审批模式", + "config.label.approvalTimeout": "审批超时", + "config.label.confirmMcpReloads": "确认 MCP 重新加载", + "config.label.commandAllowlist": "命令白名单", + "config.label.redactSecrets": "隐藏密钥", + "config.label.allowPrivateUrls": "允许私有 URL", + "config.label.browserPrivateUrls": "浏览器私有 URL", + "config.label.localBrowserForPrivateUrls": "本地浏览器访问私有 URL", + "config.label.fileCheckpoints": "文件检查点", + "config.label.checkpointLimit": "检查点限制", + "config.label.voiceShortcut": "语音快捷键", + "config.label.maxRecordingLength": "最大录音时长", + "config.label.readResponsesAloud": "朗读回复", + "config.label.speechToText": "语音转文字", + "config.label.speechToTextProvider": "语音转文字提供方", + "config.label.localTranscriptionModel": "本地转录模型", + "config.label.transcriptionLanguage": "转录语言", + "config.label.elevenlabsSttModel": "ElevenLabs STT 模型", + "config.label.elevenlabsLanguage": "ElevenLabs 语言", + "config.label.tagAudioEvents": "标记音频事件", + "config.label.speakerDiarization": "说话人分离", + "config.label.textToSpeechProvider": "文字转语音提供方", + "config.label.edgeVoice": "Edge 语音", + "config.label.openaiTtsModel": "OpenAI TTS 模型", + "config.label.openaiVoice": "OpenAI 语音", + "config.label.elevenlabsVoice": "ElevenLabs 语音", + "config.label.elevenlabsModel": "ElevenLabs 模型", + "config.label.persistentMemory": "持久记忆", + "config.label.userProfile": "用户画像", + "config.label.memoryBudget": "记忆预算", + "config.label.profileBudget": "画像预算", + "config.label.memoryProvider": "记忆提供方", + "config.label.contextEngine": "上下文引擎", + "config.label.autoCompression": "自动压缩", + "config.label.compressionThreshold": "压缩阈值", + "config.label.compressionTarget": "压缩目标", + "config.label.protectedRecentMessages": "保护最近消息", + "config.label.apiRetries": "API 重试", + "config.label.serviceTier": "服务等级", + "config.label.toolUseEnforcement": "工具使用强制", + "config.label.subagentModel": "子代理模型", + "config.label.subagentProvider": "子代理提供方", + "config.label.subagentTurnLimit": "子代理轮次上限", + "config.label.parallelSubagents": "并行子代理", + "config.label.subagentTimeout": "子代理超时", + "config.label.subagentReasoningEffort": "子代理推理强度", + "config.desc.defaultModel": "用于新对话,除非在编辑器中选择了其他模型。", + "config.desc.contextWindow": "设为 0 则使用所选模型检测到的上下文窗口。", + "config.desc.fallbackModels": "默认模型失败时尝试的备用 provider:model 条目。", + "config.desc.personality": "新会话的默认助手风格。", + "config.desc.timezone": "Hermes 需要本地时间上下文时使用。留空则使用系统时区。", + "config.desc.reasoningBlocks": "当后端提供推理内容时显示推理部分。", + "config.desc.imageAttachments": "控制如何将图片附件发送给模型。", + "config.desc.workingDirectory": "工具和终端工作的默认项目文件夹。", + "config.desc.codeExecutionMode": "代码执行对当前项目范围的严格程度。", + "config.desc.persistentShell": "当后端支持时,在命令之间保持 Shell 状态。", + "config.desc.envPassthrough": "传递到工具执行中的环境变量。", + "config.desc.fileReadLimit": "Hermes 单次文件请求可读取的最大字符数。", + "config.desc.approvalMode": "Hermes 如何处理需要明确审批的命令。", + "config.desc.approvalTimeout": "审批提示在超时前的等待时长。", + "config.desc.redactSecrets": "尽可能对模型屏蔽检测到的密钥。", + "config.desc.fileCheckpoints": "在文件编辑前创建回滚快照。", + "config.desc.persistentMemory": "保存持久记忆以帮助未来的会话。", + "config.desc.userProfile": "维护用户偏好的简洁画像。", + "config.desc.contextEngine": "接近上下文限制时长对话的管理策略。", + "config.desc.autoCompression": "对话内容较多时摘要旧上下文。", + "config.desc.readResponsesAloud": "自动朗读助手回复。", + "config.desc.speechToText": "启用本地或提供方支持的语音转文字。", + "config.desc.elevenlabsLanguage": "可选 ISO-639-3 语言代码。留空则让 ElevenLabs 自动检测。", + "config.desc.maxAgentSteps": "Hermes 停止运行前的最大工具调用轮次上限。", + "mcp.failedToLoad": "MCP 配置加载失败", + "mcp.invalidJsonShort": "无效的 MCP JSON", + "mcp.serverSaved": "MCP 服务已保存", + "mcp.toolsReloaded": "MCP 工具已重新加载", + "mcp.emptyDesc": "添加 stdio 或 HTTP 服务以暴露 MCP 工具。", + "sessions.loadFailed": "无法加载已归档会话", + "sessions.unarchiveFailed": "取消归档失败", + "sessions.deleteFailed": "删除失败", + "sessions.archiveHint": "归档一个对话来将其隐藏于此。", + "sessions.updateDirFailed": "无法更新默认目录", + "sessions.clearDirFailed": "无法清除默认目录", + "keys.showAdvanced": "显示高级选项", + "keys.loadFailed": "API 密钥加载失败", + "keys.credentialSaved": "凭据已保存", + "keys.credentialRemoved": "凭据已移除", + "provider.desc.nousPortal": "Nous Portal 基础 URL 覆盖", + "provider.desc.openRouter": "OpenRouter API 密钥(用于视觉、网页抓取辅助和 MoA)", + "provider.desc.google": "Google AI Studio API 密钥(也认可为 GEMINI_API_KEY)", + "provider.desc.gemini": "Google AI Studio API 密钥(GOOGLE_API_KEY 的别名)", + "provider.desc.anthropic": "Anthropic API 密钥", + "provider.desc.deepseek": "DeepSeek API 密钥(直接访问)", + "provider.desc.xai": "xAI API 密钥", + "provider.desc.huggingface": "Hugging Face 令牌(推理服务商)", + "provider.desc.kimi": "Kimi / Moonshot API 密钥", + "provider.desc.minimax": "MiniMax API 密钥(国际端点)", + "provider.desc.minimaxCn": "MiniMax 中国 API 密钥", + "provider.desc.dashscope": "阿里云 DashScope API 密钥(通义千问 + 多模型)", + "provider.desc.glm": "Z.AI / GLM API 密钥", + "provider.desc.nvidia": "NVIDIA NIM API 密钥", + "provider.desc.opencodeGo": "OpenCode Go API 密钥", + "provider.desc.opencodeZen": "OpenCode Zen API 密钥", + "provider.desc.xiaomi": "小米 MiMo API 密钥", + "provider.desc.kiloCode": "Kilo Code API 密钥", + "provider.desc.aiGateway": "AI Gateway API 密钥(Vercel AI Gateway)", + "provider.desc.browserbase": "Browserbase API 密钥", + "provider.desc.elevenLabs": "ElevenLabs API 密钥", + "provider.desc.openai": "OpenAI API 密钥(用于语音处理 Agent)", + "provider.desc.mistral": "Mistral API 密钥(用于 STT/TTS)", + "provider.desc.groq": "Groq API 密钥(用于 STT)", + "provider.desc.tavily": "Tavily API 密钥(网页搜索)", + "provider.desc.firecrawl": "Firecrawl API 密钥(网页搜索和抓取)", + "provider.desc.fal": "FAL 密钥(AI 图像生成)", + "provider.desc.nous": "Nous Portal 基础 URL 覆盖", + "provider.desc.openrouter": "OpenRouter API 密钥(用于视觉、网页抓取辅助和 MoA)", + "provider.desc.lmstudio": "LM Studio 凭据", + "provider.desc.zai": "Z.AI API 密钥(GLM_API_KEY 的别名)", + "provider.desc.stepfun": "StepFun Step Plan API 密钥", + "provider.desc.arcee": "Arcee AI API 密钥", + "provider.desc.gmi": "GMI Cloud API 密钥", + "provider.desc.qwenportal": "Qwen Portal 基础 URL 覆盖", + "provider.desc.opencodego": "OpenCode Go API 密钥($10/月订阅)", + "provider.desc.ollamacloud": "Ollama Cloud API 密钥", + "provider.desc.awsbedrock": "AWS Bedrock 配置", + "provider.desc.exa": "Exa API 密钥(网页搜索和内容)", + "provider.desc.parallel": "Parallel API 密钥(网页搜索和提取)", + "titlebar.language": "语言", + "titlebar.languageDesc": "选择界面的显示语言。", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} \ No newline at end of file diff --git a/apps/desktop/src/locales/zh-Hant.json b/apps/desktop/src/locales/zh-Hant.json new file mode 100644 index 000000000000..0412fb2333a2 --- /dev/null +++ b/apps/desktop/src/locales/zh-Hant.json @@ -0,0 +1,863 @@ +{ + "appearance.title": "外觀", + "appearance.description": "这些是桌面端专属顯示偏好。模式控制亮度;佈景主題控制聊天介面的配色方案。", + "appearance.colorMode": "配色模式", + "appearance.colorModeDesc": "選擇固定模式或让 Hermes 跟隨系統設定。", + "appearance.theme": "佈景主題", + "appearance.themeDesc": "選擇聊天介面和交互元素的配色方案。", + "appearance.mode.light": "淺色", + "appearance.mode.lightDesc": "明亮的桌面介面", + "appearance.mode.dark": "深色", + "appearance.mode.darkDesc": "低眩光工作空间", + "appearance.mode.system": "跟隨系統", + "appearance.mode.systemDesc": "跟随操作系统外觀", + "appearance.theme.nous": "Nous", + "appearance.theme.nousDesc": "玻璃质感中性色搭配 Nous 蓝色点缀", + "appearance.theme.midnight": "午夜", + "appearance.theme.midnightDesc": "深蓝紫色搭配冷色调点缀", + "appearance.theme.ember": "余烬", + "appearance.theme.emberDesc": "温暖的深红与青铜色调——锻造风格", + "appearance.theme.mono": "单色", + "appearance.theme.monoDesc": "简洁灰度——极简专注", + "appearance.theme.cyberpunk": "赛博朋克", + "appearance.theme.cyberpunkDesc": "黑底霓虹绿——矩阵終端", + "appearance.theme.slate": "石板", + "appearance.theme.slateDesc": "冷调石板蓝——专注开发者佈景主題", + "appearance.language": "語言", + "appearance.languageDesc": "選擇介面語言或让 Hermes 跟隨系統設定。", + "language.system": "跟隨系統", + "language.en": "English", + "language.zh-CN": "中文(简体)", + "language.ja": "日本語", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "settings.title": "設定", + "settings.appearance": "外觀", + "settings.model": "模型", + "settings.gateway": "閘道", + "settings.sessions": "會話", + "settings.tools": "工具与技能", + "settings.section.chat": "對話", + "settings.section.workspace": "工作區", + "settings.section.safety": "安全", + "settings.section.memory": "記憶與前後文", + "settings.section.voice": "語音", + "settings.section.advanced": "進階", + "settings.mcp": "MCP 服務", + "settings.config": "組態", + "settings.keys": "API 金鑰", + "settings.about": "關於", + "chat.placeholder": "问我任何问题…", + "chat.send": "傳送", + "chat.stop": "停止", + "chat.thinking": "思考中…", + "chat.noSession": "没有活跃會話。开始一个新對話。", + "commandCenter.title": "指揮中心", + "commandCenter.noSessions": "暂无會話。", + "commandCenter.loadingStatus": "正在加载状态…", + "commandCenter.recentLogs": "最近日志", + "commandCenter.dailyTokens": "每日 Token", + "commandCenter.noActivity": "暂无日常活动。", + "commandCenter.noModelUsage": "暂无模型使用记录。", + "commandCenter.noSkillActivity": "暂无技能活动。", + "common.loading": "載入中…", + "common.save": "儲存", + "common.cancel": "取消", + "common.close": "關閉", + "common.delete": "刪除", + "common.confirm": "確認", + "common.search": "搜尋…", + "onboarding.welcome": "欢迎使用 Hermes", + "onboarding.getStarted": "選擇提供者和模型开始使用。", + "onboarding.skip": "跳过", + "onboarding.continue": "继续", + "onboarding.finish": "完成", + "file.browser": "檔案浏览器", + "file.noFiles": "暂无檔案。", + "terminal.title": "終端", + "terminal.newTab": "新增标签页", + "terminal.closeTab": "關閉标签页", + "skills.title": "技能", + "skills.search": "搜尋技能…", + "skills.noResults": "未找到技能。", + "profiles.title": "組態檔案", + "cron.title": "定時任務", + "cron.noJobs": "暂无定時任務。", + "messaging.title": "訊息", + "about.version": "版本", + "about.checkUpdates": "檢查更新", + "about.upToDate": "Hermes 已是最新版本。", + "about.updateAvailable": "有新版本可用。", + "about.license": "MIT 许可证", + "keys.title": "API 金鑰", + "keys.noKeys": "未組態 API 金鑰。", + "keys.addKey": "新增金鑰", + "config.title": "組態", + "config.edit": "編輯組態", + "config.reload": "重新加载組態", + "gateway.title": "閘道", + "gateway.start": "启动閘道", + "gateway.stop": "停止閘道", + "gateway.restart": "重启閘道", + "gateway.running": "執行中", + "gateway.stopped": "已停止", + "sessions.title": "會話", + "sessions.search": "搜尋會話…", + "sessions.noResults": "未找到會話。", + "sessions.export": "匯出", + "sessions.delete": "刪除會話", + "mcp.title": "MCP 服務", + "mcp.addServer": "新增服務", + "mcp.noServers": "未組態 MCP 服務。", + "tools.title": "工具与技能", + "tools.noTools": "暂无可用工具。", + "nav.home": "首頁", + "nav.chat": "對話", + "nav.settings": "設定", + "nav.files": "檔案", + "nav.terminal": "終端", + "header.search": "搜尋或輸入指令…", + "updates.checking": "正在檢查更新…", + "updates.available": "有可用更新", + "updates.downloading": "正在下載…", + "updates.installing": "正在安裝…", + "updates.restart": "重启以更新", + "errors.generic": "出了点问题。", + "errors.notFound": "页面未找到。", + "errors.noPermission": "您没有访问权限。", + "tool.toolCall": "工具调用", + "tool.result": "结果", + "tool.error": "錯誤", + "tool.timeout": "超时", + "tool.cancelled": "已取消", + "settings.closeSettings": "關閉設定", + "settings.archivedChats": "已封存對話", + "settings.exportConfig": "匯出組態", + "settings.importConfig": "匯入組態", + "settings.resetDefaults": "還原預設", + "settings.llmProviders": "LLM 提供者", + "settings.searchPlaceholder.about": "關於 Hermes Desktop", + "settings.searchPlaceholder.config": "搜尋設定…", + "settings.searchPlaceholder.gateway": "閘道連線…", + "settings.searchPlaceholder.keys": "搜尋 API 金鑰…", + "settings.searchPlaceholder.mcp": "搜尋 MCP 服務…", + "settings.searchPlaceholder.sessions": "搜尋已封存會話…", + "about.hermesDesktop": "Hermes 桌面版", + "about.versionUnavailable": "版本不可用", + "about.updates": "更新", + "about.checkNow": "立即檢查", + "about.checking": "檢查中…", + "about.seeWhatsNew": "查看新内容", + "about.releaseNotes": "發布說明", + "about.autoUpdates": "自動更新", + "about.autoUpdatesDesc": "Hermes 会在后台自动檢查更新,并在有可用更新时通知你。", + "about.selfUpdateUnsupported": "此版本無法在应用内部自行更新。", + "about.cannotReachServer": "無法連線更新服務器。", + "about.installingUpdate": "更新正在安裝中。", + "about.updateReady": "新版本已就绪(包含 {count} 项变更)。", + "about.updateReady_plural": "新版本已就绪(包含 {count} 项变更)。", + "about.onLatest": "你已使用最新版本。", + "about.tapCheckNow": "点击「立即檢查」以查找更新。", + "about.lastChecked": "上次檢查于 {time}", + "about.justNow": "刚刚", + "about.never": "从未", + "about.minAgo": "{count} 分钟前", + "about.hoursAgo": "{count} 小时前", + "about.daysAgo": "{count} 天前", + "about.buildInfo": "分支 {branch} · 提交 {sha}", + "keys.loading": "正在加载 API 金鑰和凭据…", + "keys.docs": "文檔", + "keys.openDocs": "開啟提供者文檔", + "keys.hideValue": "隱藏值", + "keys.revealValue": "顯示值", + "keys.set": "設定", + "keys.notSet": "未設定", + "keys.replace": "替换", + "keys.replaceValue": "替换当前值", + "keys.enterValue": "輸入值", + "keys.saving": "儲存中", + "keys.save": "儲存", + "keys.cancel": "取消", + "keys.clearValue": "清除值", + "keys.configured": "已組態 {count}/{total}", + "keys.setCount": "已設定 {count}/{total}", + "keys.countSet": "已設定 {count} 个", + "keys.countKeys": "{count} 个金鑰", + "keys.otherProviders": "其他提供者", + "keys.categoryTools": "工具", + "keys.categoryMessaging": "訊息", + "keys.categorySettings": "設定", + "config.notSet": "未設定", + "config.commaSeparated": "逗号分隔的值", + "config.on": "开启", + "config.off": "關閉", + "config.none": "无", + "config.emptyOption": "(无)", + "config.loading": "正在加载 Hermes 組態…", + "config.noMatching": "无匹配設定", + "config.noMatchingDesc": "请尝试其他搜尋词或選擇其他分类。", + "config.results": "{count} 个结果", + "config.results_plural": "{count} 个结果", + "gateway.loading": "正在加载閘道設定…", + "gateway.unavailable": "閘道設定不可用", + "gateway.unavailableDesc": "桌面 IPC 桥接未暴露閘道設定。", + "gateway.connection": "閘道連線", + "gateway.envOverride": "環境變數覆寫", + "gateway.desc": "Hermes Desktop 預設启动自己的本機閘道。当你希望此应用控制另一台机器上或受信任代理后已在运行的 Hermes 后端时,请使用遠端閘道。", + "gateway.envOverrideTitle": "環境變數正在控制此桌面會話。", + "gateway.envOverrideDesc": "取消設定 {urlVar} 和 {tokenVar} 以使用下方儲存的設定。", + "gateway.localTitle": "本機閘道", + "gateway.localDesc": "在 localhost 上启动私有的 Hermes 后端。这是預設选项,支持离线使用。", + "gateway.remoteTitle": "遠端閘道", + "gateway.remoteDesc": "使用會話令牌将此桌面 shell 連線到遠端 Hermes 后端。", + "gateway.remoteUrl": "遠端 URL", + "gateway.remoteUrlDesc": "遠端仪表板后端的 Base URL。支持路径前缀,例如 /hermes。", + "gateway.remoteUrlPlaceholder": "https://gateway.example.com/hermes", + "gateway.sessionToken": "會話令牌", + "gateway.sessionTokenDesc": "用于 REST 和 WebSocket 访问的仪表板會話令牌。留空以保留已儲存的令牌。", + "gateway.sessionTokenPlaceholder": "貼上會話令牌", + "gateway.existingToken": "现有令牌 {preview}", + "gateway.tokenSaved": "已儲存", + "gateway.testRemote": "測試遠端連線", + "gateway.saveRestart": "儲存并下次重启时生效", + "gateway.saveReconnect": "儲存并重新連線", + "gateway.diagnostics": "診斷", + "gateway.diagnosticsDesc": "在檔案管理器中顯示 desktop.log——在閘道启动失敗时非常有用。", + "gateway.openLogs": "開啟日志", + "sessions.loading": "載入中…", + "sessions.defaultProjectDir": "預設项目目录", + "sessions.defaultProjectDirDesc": "新會話預設在此檔案夹中启动,除非另行選擇。留空则使用您的 home 目录。", + "sessions.defaultDir": "預設为 {fallback}。", + "sessions.notSet": "未設定", + "sessions.change": "變更", + "sessions.choose": "選擇", + "sessions.clear": "清除", + "sessions.archivedTitle": "已封存的會話", + "sessions.archivedDesc": "已封存的聊天会从侧边栏隱藏,但保留所有訊息。按住 Ctrl/⌘ 点击侧边栏中的聊天即可封存。", + "sessions.nothingArchived": "暂无封存", + "sessions.noSearchMatch": "没有匹配搜尋条件的已封存對話。", + "sessions.archiveToHide": "封存一个聊天来将其隱藏于此。", + "sessions.unarchive": "取消封存", + "sessions.deletePermanently": "永久刪除", + "sessions.messages": "{count} 条訊息", + "mcp.loading": "正在加载 MCP 服務…", + "mcp.servers": "MCP 服務", + "mcp.configured": "已組態 {count} 个", + "mcp.newServer": "新增服務", + "mcp.reloadMCP": "重新加载 MCP", + "mcp.reloading": "重新載入中...", + "mcp.noServersDesc": "新增 stdio 或 HTTP 服務以启用 MCP 工具。", + "mcp.name": "名称", + "mcp.namePlaceholder": "filesystem", + "mcp.serverJSON": "服務 JSON", + "mcp.editServer": "編輯服務", + "mcp.saveServer": "儲存服務", + "mcp.saving": "儲存中...", + "mcp.remove": "移除", + "mcp.disabled": "已禁用", + "model.auxTask.vision": "視覺", + "model.auxTask.visionHint": "圖像分析", + "model.auxTask.web_extract": "網頁提取", + "model.auxTask.web_extractHint": "頁面摘要", + "model.auxTask.compression": "壓縮", + "model.auxTask.compressionHint": "前後文壓縮", + "model.auxTask.session_search": "會話搜尋", + "model.auxTask.session_searchHint": "回憶查詢", + "model.auxTask.skills_hub": "技能中心", + "model.auxTask.skills_hubHint": "技能搜尋", + "model.auxTask.approval": "審批", + "model.auxTask.approvalHint": "智能自动審批", + "model.auxTask.mcp": "MCP", + "model.auxTask.mcpHint": "MCP 工具路由", + "model.auxTask.title_generation": "標題生成", + "model.auxTask.title_generationHint": "會話标题", + "model.auxTask.curator": "策划", + "model.auxTask.curatorHint": "技能使用回顾", + "model.mainModel": "主模型", + "model.mainDesc": "适用于新會話。使用編輯器中的模型選擇器可即时切換当前對話的模型。", + "model.providerPlaceholder": "提供者", + "model.modelPlaceholder": "模型", + "model.apply": "应用", + "model.applying": "正在应用…", + "model.auxiliaryModels": "輔助模型", + "model.auxiliaryDesc": "辅助任务預設在主模型上运行。为任何任务分配专用模型以覆寫預設設定。", + "model.resetAllToMain": "全部重設为主模型", + "model.setToMain": "設為主模型", + "model.change": "變更", + "model.cancel": "取消", + "model.autoUseMain": "自动 · 使用主模型", + "model.providerDefault": "(提供者預設)", + "model.loading": "正在加载模型組態…", + "tool.running": "執行中", + "tool.recovered": "已還原", + "tool.done": "已完成", + "tool.output": "工具輸出", + "tool.searchResults": "搜尋结果", + "tool.rawResponse": "原始响应", + "tool.stdout": "标准輸出", + "tool.stderr": "标准錯誤", + "tool.copyActivity": "複製活动", + "composer.startingHermes": "正在启动 Hermes…", + "composer.sendFollowUp": "傳送追问", + "composer.message": "訊息", + "composer.editingQueued": "正在編輯編輯器中已排队的轮次", + "composer.attach": "附加", + "composer.files": "檔案…", + "composer.folder": "檔案夹…", + "composer.images": "图片…", + "composer.pasteImage": "貼上图片", + "composer.url": "链接…", + "composer.promptSnippets": "提示语片段", + "composer.promptSnippetsDesc": "選擇一个起始提示语放入編輯器中。", + "composer.voiceStart": "开始語音對話", + "composer.queue": "排队訊息", + "composer.speaking": "正在说话", + "composer.transcribing": "正在转录", + "composer.muted": "已静音", + "composer.listening": "正在聆听", + "composer.unmuteMic": "取消麦克风静音", + "composer.muteMic": "麦克风静音", + "composer.stopListening": "停止聆听并傳送", + "composer.endVoice": "结束語音對話", + "composer.end": "结束", + "composer.stopDictation": "停止听写", + "composer.transcribingDictation": "正在转录听写内容", + "composer.voiceDictation": "語音听写", + "sessions.new": "新增會話", + "sessions.running": "會話執行中", + "sessions.actions": "會話操作", + "sessions.reorder": "重新排序", + "sessions.pin": "置頂", + "sessions.unpin": "取消置頂", + "sessions.copyId": "複製 ID", + "sessions.rename": "重新命名", + "sessions.archive": "封存", + "sessions.renameDialog": "重新命名會話", + "sessions.renameDesc": "给这个聊天起个好记的标题。留空即可清除。", + "sessions.untitled": "未命名會話", + "sessions.renamed": "已重新命名", + "sessions.renameFailed": "重新命名失敗", + "sessions.pinned": "已置頂", + "sessions.results": "结果", + "sessions.allPinned": "这里的所有聊天都已置頂。取消置頂即可在最近聊天中顯示。", + "sessions.pinHint": "Shift + 点击聊天可置頂 · 拖拽可重新排序", + "sessions.loadMore": "載入更多", + "sessions.noWorkspace": "无工作區", + "sessions.ungroup": "将會話顯示为单个清單", + "sessions.groupByWorkspace": "按工作區分组會話", + "skills.tools": "技能与工具", + "artifacts": "工件", + "common.clearSearch": "清除搜尋", + "common.copy": "複製", + "common.refresh": "重新整理", + "common.moreActions": "更多操作", + "common.tryAgain": "重試", + "chat.loadingSession": "正在加载會話", + "chat.loadingResponse": "Hermes 正在加载响应", + "chat.branchInNewChat": "在新對話中分支", + "chat.readAloud": "朗读", + "chat.preparingAudio": "正在准备音频…", + "chat.stopReading": "停止朗读", + "chat.editMessage": "編輯訊息", + "chat.editableCheckpoint": "可編輯檢查点", + "chat.restoreCheckpoint": "還原檢查点", + "chat.goForward": "前进", + "chat.restorePrevCheckpoint": "還原上一个檢查点", + "chat.restoreNextCheckpoint": "還原下一个檢查点", + "models.title": "模型", + "models.search": "搜尋模型", + "models.addProvider": "新增提供者…", + "errors.somethingBroke": "介面出了点问题", + "errors.viewCrashedDesc": "视图遇到了意外錯誤。你的對話和設定是安全的——请重試,或重新加载窗口。", + "errors.noProviders": "没有已验证的提供者。", + "onboarding.setupTitle": "开始使用 Hermes Agent", + "onboarding.setupDesc": "連線模型提供者即可开始聊天。大多数选项只需一键操作。", + "onboarding.preparing": "正在启动 Hermes…", + "onboarding.installing": "Hermes 正在完成安裝。首次运行通常只需不到一分钟。", + "onboarding.lookingUp": "正在查找提供者…", + "onboarding.otherProviders": "其他提供者", + "onboarding.collapse": "收起", + "onboarding.iHaveKey": "我有 API 金鑰", + "onboarding.recommended": "推荐", + "onboarding.connected": "已連線", + "onboarding.backToSignIn": "返回登入", + "onboarding.getKey": "获取金鑰", + "onboarding.pasteKey": "貼上 API 金鑰", + "onboarding.connect": "連線", + "onboarding.connecting": "連線中", + "onboarding.copyCode": "複製", + "onboarding.startSignIn": "正在为以下提供者启动登入", + "onboarding.verifyingCode": "正在验证您的代码,对接", + "onboarding.pickingModel": "已連線。正在選擇預設模型…", + "onboarding.signInFailed": "登入失敗,请重試。", + "onboarding.pickDifferent": "選擇其他提供者", + "onboarding.signInTitle": "使用以下方式登入", + "onboarding.step1": "我们已在浏览器中開啟了", + "onboarding.step1End": "。", + "onboarding.step2": "在此页面授权 Hermes。", + "onboarding.step3": "複製授权代码并貼上到下方。", + "onboarding.pasteCode": "貼上授权代码", + "onboarding.reopenAuth": "重新開啟授权页面", + "onboarding.cancel": "取消", + "onboarding.browserDesc": "我们已在浏览器中開啟了", + "onboarding.browserDescEnd": "。在此页面授权 Hermes,系统将自动完成連線——无需複製或貼上任何内容。", + "onboarding.waitingAuth": "等待您授权…", + "onboarding.reopenSignIn": "重新開啟登入页面", + "onboarding.externalDesc": "通过自有 CLI 登入。在終端中运行此指令,然后返回并選擇「我已登入」:", + "onboarding.iSignedIn": "我已登入", + "onboarding.enterCode": "我们已在浏览器中開啟了", + "onboarding.enterCodeEnd": "。在此页面輸入以下代码:", + "onboarding.reopenVerification": "重新開啟验证页面", + "onboarding.defaultModel": "預設模型", + "onboarding.freeTier": "免费版", + "onboarding.pro": "专业版", + "onboarding.change": "變更", + "onboarding.startChatting": "开始聊天", + "onboarding.docs": "文檔", + "onboarding.close": "關閉", + "onboarding.savingError": "無法儲存凭证。", + "install.title": "Hermes 需要一次性安裝", + "install.desc": "自动首次启动安裝在此平台上尚不可用", + "install.descEnd": "。请開啟終端运行以下指令,然后重新启动此应用。后续启动将跳过此步骤。", + "install.installCommand": "安裝指令", + "install.copyCommand": "複製指令", + "install.viewDocs": "查看安裝文檔", + "install.willInstallTo": "将安裝到", + "install.iRanIt": "我已运行——重試", + "install.failed": "安裝失敗", + "install.settingUp": "正在設定 Hermes Agent", + "install.finishingUp": "正在完成", + "install.failedDesc": "某个安裝步骤失敗。在 Windows 上,如果另一个 Hermes CLI 或桌面实例正在运行,可能会发生这种情况。请停止所有正在运行的 Hermes 实例,然后重試。查看下方详细資訊或桌面日志获取完整记录。", + "install.setupDesc": "这是一次性設定。Hermes 安裝程序正在下載依赖项并組態您的机器。后续启动将跳过此步骤。", + "install.fetchingManifest": "正在获取安裝程序清单…", + "install.error": "錯誤", + "install.showOutput": "顯示安裝程序輸出", + "install.hideOutput": "隱藏安裝程序輸出", + "install.noOutput": "暂无輸出。", + "install.cancelInstall": "取消安裝", + "install.cancelling": "正在取消…", + "install.copyOutput": "複製輸出", + "install.copied": "已複製!", + "install.reloadRetry": "重新加载并重試", + "install.saveLogs": "完整记录已儲存至", + "install.stepsComplete": "步骤已完成", + "install.nowLabel": "现在", + "chat.composerTip": "提示:輸入 @ 可内联引用檔案。", + "composer.addContext": "新增前後文", + "sessions.loadStep": "加载", + "sessions.moreLabel": "更多", + "chat.reconnecting": "正在重新連線 Hermes…", + "appearance.toolCallDisplay": "工具调用顯示", + "appearance.toolCallDisplayDesc": "产品模式隱藏原始工具载荷;技术模式顯示完整的輸入/輸出。", + "appearance.toolViewProduct": "产品模式", + "appearance.toolViewTechnical": "技术模式", + "appearance.toolViewProductDesc": "以简洁摘要形式顯示人类友好的工具活动。", + "appearance.toolViewTechnicalDesc": "包含原始工具参数/结果和底层细节。", + "messaging.recommended": "推荐", + "messaging.recommendedTelegram": "推荐。来自 @userinfobot 的逗号分隔数字 ID。如未設定,任何人都可以向您的机器人傳送私信。", + "messaging.recommendedDiscord": "推荐。逗号分隔的 Discord 用户 ID。", + "messaging.recommendedSlack": "推荐。逗号分隔的 Slack 用户 ID。", + "messaging.recommendedMattermost": "推荐。逗号分隔的 Mattermost 用户 ID。", + "messaging.recommendedMatrix": "推荐。逗号分隔的 @user:server 格式用户 ID。", + "messaging.recommendedSignal": "推荐。逗号分隔的 Signal 标识符。", + "messaging.recommendedWhatsApp": "推荐。逗号分隔的电话号码或 WhatsApp ID。", + "previewConsole.resizeLabel": "调整预览控制台大小", + "boot.ipcUnavailable": "桌面 IPC 桥接不可用。", + "boot.backendExited": "Hermes 后台进程在启动期间登出。", + "boot.backendStoppedTitle": "后端已停止", + "boot.backendStoppedMessage": "Hermes 后台进程已登出。", + "boot.startingConnection": "正在启动桌面連線", + "boot.connectingGateway": "正在連線实时桌面閘道", + "boot.loadingConfig": "正在加载 Hermes 設定", + "boot.loadingSessions": "正在加载最近的會話", + "boot.desktopBootFailed": "桌面启动失敗", + "updates.stageGettingReady": "准备中…", + "updates.stageDownloading": "下載中…", + "updates.stageAlmostThere": "快完成了…", + "updates.stageFinishingUp": "收尾中…", + "updates.stageRestarting": "正在重启 Hermes…", + "updates.stageManual": "在終端中更新", + "updates.stageError": "更新已暂停", + "updates.updatingHermes": "正在更新 Hermes…", + "updates.lookingForUpdates": "正在檢查更新…", + "updates.couldntCheck": "無法檢查更新", + "updates.updateNotAvailable": "更新不可用", + "updates.checkConnection": "请檢查網路連線后重試。", + "updates.onLatest": "您正在运行最新版本。", + "updates.allSet": "一切就绪", + "updates.newUpdateAvailable": "有新版本可用", + "updates.readyToInstall": "新版本的 Hermes 已准备好安裝。", + "updates.updateNow": "立即更新", + "updates.maybeLater": "稍后再说", + "updates.moreChanges": "+ 包含 {count} 项变更。", + "updates.moreChanges_plural": "+ 包含 {count} 项变更。", + "updates.updateFromTerminal": "在終端中更新", + "updates.terminalDesc": "你是通过指令行安裝的 Hermes,所以更新也需要在終端中完成。请将以下指令貼上到終端:", + "updates.copied": "已複製", + "updates.copy": "複製", + "updates.pickupNewVersion": "Hermes 将在下次启动时自动应用新版本。", + "updates.done": "完成", + "updates.updaterDesc": "Hermes 更新程序将在独立窗口中接管,并在完成后重新開啟 Hermes。", + "updates.closeToApply": "Hermes 将關閉以应用更新。", + "updates.updateDidntFinish": "更新未完成", + "updates.nothingLost": "别担心——没有遺失任何内容。你可以立即重試。", + "updates.notNow": "暂时不要", + "commandCenter.sessionsPanel": "會話面板", + "commandCenter.systemPanel": "系统面板", + "commandCenter.usagePanel": "用量面板", + "commandCenter.navigate": "导航", + "commandCenter.noMatchingResults": "未找到匹配结果。", + "commandCenter.noSessionsYet": "暂无會話。", + "commandCenter.unpinSession": "取消置頂會話", + "commandCenter.pinSession": "置頂會話", + "commandCenter.exportSession": "匯出會話", + "commandCenter.deleteSession": "刪除會話", + "commandCenter.gatewayRunning": "訊息閘道執行中", + "commandCenter.gatewayStopped": "訊息閘道已停止", + "commandCenter.restartMsg": "重启訊息服務", + "commandCenter.updateHermes": "更新 Hermes", + "commandCenter.noLogsLoaded": "尚未加载日志。", + "commandCenter.closeLabel": "關閉指揮中心", + "commandCenter.searchPlaceholder": "搜尋會話、视图和操作", + "commandCenter.statSessions": "會話数", + "commandCenter.statApiCalls": "API 调用", + "commandCenter.statTokens": "輸入/輸出 Token", + "commandCenter.statEstCost": "估算费用", + "commandCenter.actualCost": "实际 {cost}", + "commandCenter.loadingUsage": "正在加载用量数据…", + "commandCenter.noUsageDesc": "过去 {count} 天无使用记录。", + "commandCenter.retry": "重試", + "commandCenter.tokenInput": "輸入", + "commandCenter.tokenOutput": "輸出", + "commandCenter.noDailyActivity": "暂无日常活动。", + "commandCenter.topModels": "热门模型", + "commandCenter.topSkills": "热门技能", + "commandCenter.actionsLabel": "次操作", + "commandCenter.systemRunning": "執行中", + "commandCenter.systemDone": "已完成", + "commandCenter.systemFailed": "失敗", + "mcp.nameRequired": "名称不能为空", + "mcp.nameRequiredDesc": "请为此 MCP 服務指定一个組態键名。", + "mcp.invalidJson": "服務器組態必须是 JSON 对象", + "mcp.invalidJsonDesc": "无效的 MCP JSON", + "mcp.saved": "MCP 服務已儲存", + "mcp.savedDesc": "{name} 在 MCP 重新加载后生效。", + "mcp.saveFailed": "儲存失敗", + "mcp.removeFailed": "刪除失敗", + "mcp.gatewayUnavailable": "閘道不可用", + "mcp.gatewayUnavailableDesc": "请先重新連線閘道,再重新加载 MCP。", + "mcp.reloadedTitle": "MCP 工具已重新加载", + "mcp.reloadedDesc": "新的工具模式将在新一轮對話中生效。", + "mcp.reloadFailed": "MCP 重新加载失敗", + "urlDialog.title": "附加链接", + "urlDialog.description": "Hermes 将获取该页面并将其作为本轮對話的前後文。", + "urlDialog.placeholder": "https://example.com/post", + "urlDialog.hint": "请包含完整链接,例如", + "urlDialog.attach": "附加", + "model.options": "选项", + "model.thinking": "思考", + "model.fast": "快速", + "model.effort": "推理力度", + "model.noOptions": "该模型无可用选项", + "model.optionUpdateFailed": "模型选项更新失敗", + "model.fastModeUpdateFailed": "快速模式更新失敗", + "model.effortMinimal": "最低", + "model.effortLow": "低", + "model.effortMedium": "中", + "model.effortHigh": "高", + "model.effortMax": "最高", + "gateway.connected": "已連線", + "gateway.connecting": "連線中", + "gateway.disconnected": "已断开", + "gateway.inferenceReady": "推理就绪", + "gateway.inferenceNotReady": "推理未就绪", + "gateway.checkingInference": "正在檢查推理状态", + "gateway.openSystemPanel": "開啟系统面板", + "gateway.connectionLabel": "連線状态:", + "gateway.recentActivity": "最近活动", + "gateway.viewAllLogs": "查看所有日志 →", + "gateway.messagingPlatforms": "訊息平台", + "titlebar.hideSidebar": "隱藏侧边栏", + "titlebar.showSidebar": "顯示侧边栏", + "titlebar.search": "搜尋", + "titlebar.searchTitle": "搜尋會話、视图和操作", + "titlebar.hideRightSidebar": "隱藏右侧栏", + "titlebar.showRightSidebar": "顯示右侧栏", + "titlebar.unmuteHaptics": "开启触感反馈", + "titlebar.muteHaptics": "關閉触感反馈", + "titlebar.openSettings": "開啟設定", + "titlebar.profiles": "組態檔案", + "titlebar.profilesDesc": "進階 Hermes 環境,支持独立角色、組態、技能和 SOUL.md。", + "titlebar.manageProfiles": "管理組態檔案", + "pagination.ariaLabel": "分页", + "pagination.prevAria": "转到上一页", + "pagination.prev": "上一页", + "pagination.nextAria": "转到下一页", + "pagination.next": "下一页", + "boot.couldNotStart": "Hermes 無法启动", + "boot.recoveryDesc": "后台閘道未能启动。请尝试下方的還原步骤——这不会刪除您的聊天记录或設定。", + "boot.retry": "重試", + "boot.repairInstall": "修复安裝", + "boot.useLocalGateway": "使用本機閘道", + "boot.openLogs": "開啟日志", + "boot.repairHint": "修复会重新运行安裝程序,在新机器上可能需要几分钟。", + "boot.showLogs": "顯示最近日志", + "boot.hideLogs": "隱藏最近日志", + "bootstrap.pending": "等待中", + "bootstrap.running": "安裝中", + "bootstrap.done": "已完成", + "bootstrap.skipped": "已跳过", + "bootstrap.failed": "失敗", + "model.switch": "切換模型", + "model.unknown": "(未知)", + "model.filterPlaceholder": "筛选提供商和模型…", + "model.persistGlobal": "全局儲存", + "model.persistGlobalSession": "全局儲存(否则仅限此會話)", + "model.couldNotLoad": "無法加载模型", + "model.proLockedDesc": "Pro 模型需要付费的 Nous 订阅。", + "model.priceTooltip": "每百万 token 的輸入/輸出价格", + "model.freePrice": "免费", + "model.currentLabel": "当前:", + "model.addProviderBtn": "新增提供商", + "sidebar.sheetTitle": "侧边栏", + "sidebar.sheetDesc": "顯示移动端侧边栏。", + "sidebar.toggle": "切換侧边栏", + "clarify.hermesIsAsking": "Hermes 正在询问", + "clarify.loadingQuestion": "正在加载问题…", + "clarify.otherTypeAnswer": "其他(輸入您的答案)", + "clarify.placeholderAnswer": "輸入您的答案…", + "clarify.cmdEnterToSend": "⌘/Ctrl + Enter 傳送", + "clarify.back": "返回", + "clarify.skip": "跳过", + "clarify.couldNotSend": "無法傳送澄清回复", + "clarify.pickLabel": "1–{n} 選擇", + "tool.recoveredAfter": "1 个步骤失敗后還原", + "tool.recoveredAfterN": "{count} 个步骤失敗后還原", + "tool.oneStepFailed": "1 个步骤失敗", + "tool.nStepsFailed": "{count} 个步骤失敗", + "intro.fallback1h": "今天我们要做什么?", + "intro.fallback1b": "傳送錯誤、分支、计划或粗略想法。我会檢查仓库并将其转化为下一步具体行动。", + "intro.fallback2h": "你在想什么?", + "intro.fallback2b": "带来代码、问题或卡住的部分。我会先了解情况再做變更。", + "intro.fallback3h": "Hermes 应该看什么?", + "intro.fallback3b": "傳送任务、失敗的路径或半成型的计划。我会帮你将其转化为行动。", + "intro.fallback4h": "我们应该从哪里开始?", + "intro.fallback4b": "带来问题、目标或檔案。我会先檢查并保持下一步的具体性。", + "intro.fallback5h": "什么需要注意?", + "intro.fallback5b": "傳送你所拥有的前後文。我会帮你整理成计划或修复方案。", + "intro.personality.heading1": "{label} 模式已开启。我们应该做什么?", + "intro.personality.body1": "傳送任务、檔案或粗略想法。我会使用你組態的风格,保持工作扎根于仓库。", + "intro.personality.heading2": "{label} Hermes 需要看什么?", + "intro.personality.body2": "带来前後文或卡住的部分。我会适应你組態的个性。", + "intro.personality.heading3": "{label} 模式已就绪。", + "intro.personality.body3": "傳送问题、檔案或想法。我会遵循你組態的个性。", + "intro.personality.heading4": "{label} Hermes 应该解决什么?", + "intro.personality.body4": "把任务放在这里。我会保持工作扎根于仓库。", + "intro.personality.heading5": "我们从哪里开始?", + "intro.personality.body5": "给我前後文,我会以 {label} 模式回答。", + "intro.brand": "HERMES 智能代理", + "install.line": "行", + "install.lines": "行", + "artifacts.noArtifactsFound": "未找到工件", + "previewConsole.noMessages": "暂无控制台訊息。", + "agents.spawnTree": "生成树", + "agents.liveSubagentActivity": "当前轮次的实时子代理活动。", + "agents.noLiveSubagents": "无实时子代理", + "agents.files": "檔案", + "profiles.noProfilesYet": "暂无組態檔案。", + "profiles.selectProfile": "選擇一个組態檔案以查看其详情。", + "profiles.deleteProfile": "刪除組態檔案?", + "profiles.soulMd": "SOUL.md", + "profiles.unsavedChanges": "未儲存的變更", + "profiles.newProfile": "新增組態檔案", + "profiles.cloneFromDefault": "从預設克隆", + "profiles.renameProfile": "重新命名組態檔案", + "messaging.gatewayStopped": "訊息閘道已停止", + "messaging.getCredentials": "获取凭据", + "messaging.required": "必填", + "messaging.unsavedChanges": "未儲存的變更", + "messaging.saved": "已儲存", + "cron.deleteCronJob": "刪除定時任務?", + "cron.optional": "可选", + "onboarding.openRouter": "OpenRouter", + "gateway.label": "閘道", + "gateway.inferenceStatus": "閘道推理状态", + "agents.label": "代理", + "agents.open": "開啟代理", + "agents.close": "關閉代理", + "agents.subagent": "子代理", + "agents.subagents": "子代理", + "agents.failed": "失敗", + "agents.running": "執行中", + "cron.label": "定時任務", + "cron.open": "開啟定時任務", + "commandCenter.open": "開啟指揮中心", + "commandCenter.close": "關閉指揮中心", + "mcp.giveConfigKey": "为这个 MCP 服務指定一个組態键。", + "mcp.reconnectGateway": "重新加载 MCP 前请重新連線閘道。", + "mcp.newSchemas": "新的工具模式将在新對話轮次中生效。", + "mcp.loadingServers": "正在加载 MCP 服務器...", + "mcp.serverName": "名称", + "mcp.serversTitle": "MCP 服務器", + "mcp.noServersTitle": "没有 MCP 服務器", + "sessions.nothingArchivedTitle": "没有封存内容", + "sessions.deletePermanentlyTitle": "永久刪除", + "sessions.defaultProjectDirTitle": "預設项目目录", + "sessions.loadingArchived": "正在加载已封存的會話…", + "sessions.restored": "已還原", + "sessions.projectDirUpdated": "預設项目目录已更新", + "gateway.enterUrlFirst": "切換前请先輸入遠端 URL 和會話令牌", + "gateway.enterUrlFirstTest": "測試前请先輸入遠端 URL 和會話令牌", + "config.saving": "儲存中…", + "keys.openProviderDocs": "開啟提供者文檔", + "config.label.defaultModel": "預設模型", + "config.label.contextWindow": "前後文窗口", + "config.label.fallbackModels": "备用模型", + "config.label.enabledToolsets": "已启用的工具集", + "config.label.timezone": "时区", + "config.label.personality": "风格设定", + "config.label.reasoningBlocks": "推理块", + "config.label.maxAgentSteps": "最大 Agent 步数", + "config.label.imageAttachments": "图片附件", + "config.label.workingDirectory": "工作目录", + "config.label.executionBackend": "执行后端", + "config.label.commandTimeout": "指令超时", + "config.label.persistentShell": "持久 Shell", + "config.label.envPassthrough": "環境變數传递", + "config.label.fileReadLimit": "檔案读取限制", + "config.label.terminalOutputLimit": "終端輸出限制", + "config.label.filePageLimit": "檔案分页限制", + "config.label.lineLengthLimit": "行长度限制", + "config.label.codeExecutionMode": "代码执行模式", + "config.label.approvalMode": "審批模式", + "config.label.approvalTimeout": "審批超时", + "config.label.confirmMcpReloads": "確認 MCP 重新加载", + "config.label.commandAllowlist": "指令白名单", + "config.label.redactSecrets": "隱藏金鑰", + "config.label.allowPrivateUrls": "允许私有 URL", + "config.label.browserPrivateUrls": "浏览器私有 URL", + "config.label.localBrowserForPrivateUrls": "本機浏览器访问私有 URL", + "config.label.fileCheckpoints": "檔案檢查点", + "config.label.checkpointLimit": "檢查点限制", + "config.label.voiceShortcut": "語音快捷鍵", + "config.label.maxRecordingLength": "最大录音时长", + "config.label.readResponsesAloud": "朗读回复", + "config.label.speechToText": "語音转文字", + "config.label.speechToTextProvider": "語音转文字提供者", + "config.label.localTranscriptionModel": "本機转录模型", + "config.label.transcriptionLanguage": "转录語言", + "config.label.elevenlabsSttModel": "ElevenLabs STT 模型", + "config.label.elevenlabsLanguage": "ElevenLabs 語言", + "config.label.tagAudioEvents": "标记音频事件", + "config.label.speakerDiarization": "说话人分离", + "config.label.textToSpeechProvider": "文字转語音提供者", + "config.label.edgeVoice": "Edge 語音", + "config.label.openaiTtsModel": "OpenAI TTS 模型", + "config.label.openaiVoice": "OpenAI 語音", + "config.label.elevenlabsVoice": "ElevenLabs 語音", + "config.label.elevenlabsModel": "ElevenLabs 模型", + "config.label.persistentMemory": "持久记忆", + "config.label.userProfile": "用户画像", + "config.label.memoryBudget": "记忆预算", + "config.label.profileBudget": "画像预算", + "config.label.memoryProvider": "记忆提供者", + "config.label.contextEngine": "前後文引擎", + "config.label.autoCompression": "自动壓縮", + "config.label.compressionThreshold": "壓縮阈值", + "config.label.compressionTarget": "壓縮目标", + "config.label.protectedRecentMessages": "保护最近訊息", + "config.label.apiRetries": "API 重試", + "config.label.serviceTier": "服務等级", + "config.label.toolUseEnforcement": "工具使用强制", + "config.label.subagentModel": "子代理模型", + "config.label.subagentProvider": "子代理提供者", + "config.label.subagentTurnLimit": "子代理轮次上限", + "config.label.parallelSubagents": "并行子代理", + "config.label.subagentTimeout": "子代理超时", + "config.label.subagentReasoningEffort": "子代理推理强度", + "config.desc.defaultModel": "用于新對話,除非在編輯器中選擇了其他模型。", + "config.desc.contextWindow": "设为 0 则使用所选模型检测到的前後文窗口。", + "config.desc.fallbackModels": "預設模型失敗时尝试的备用 provider:model 条目。", + "config.desc.personality": "新會話的預設助手风格。", + "config.desc.timezone": "Hermes 需要本機时间前後文时使用。留空则使用系统时区。", + "config.desc.reasoningBlocks": "当后端提供推理内容时顯示推理部分。", + "config.desc.imageAttachments": "控制如何将图片附件傳送给模型。", + "config.desc.workingDirectory": "工具和終端工作的預設项目檔案夹。", + "config.desc.codeExecutionMode": "代码执行对当前项目范围的严格程度。", + "config.desc.persistentShell": "当后端支持时,在指令之间保持 Shell 状态。", + "config.desc.envPassthrough": "传递到工具执行中的環境變數。", + "config.desc.fileReadLimit": "Hermes 单次檔案请求可读取的最大字符数。", + "config.desc.approvalMode": "Hermes 如何处理需要明确審批的指令。", + "config.desc.approvalTimeout": "審批提示在超时前的等待时长。", + "config.desc.redactSecrets": "尽可能对模型屏蔽检测到的金鑰。", + "config.desc.fileCheckpoints": "在檔案編輯前创建回滚快照。", + "config.desc.persistentMemory": "儲存持久记忆以帮助未来的會話。", + "config.desc.userProfile": "维护用户偏好的简洁画像。", + "config.desc.contextEngine": "接近前後文限制时长對話的管理策略。", + "config.desc.autoCompression": "對話内容较多时摘要旧前後文。", + "config.desc.readResponsesAloud": "自动朗读助手回复。", + "config.desc.speechToText": "启用本機或提供者支持的語音转文字。", + "config.desc.elevenlabsLanguage": "可选 ISO-639-3 語言代码。留空则让 ElevenLabs 自动检测。", + "config.desc.maxAgentSteps": "Hermes 停止运行前的最大工具调用轮次上限。", + "mcp.failedToLoad": "MCP 組態加载失敗", + "mcp.invalidJsonShort": "无效的 MCP JSON", + "mcp.serverSaved": "MCP 服務已儲存", + "mcp.toolsReloaded": "MCP 工具已重新加载", + "mcp.emptyDesc": "新增 stdio 或 HTTP 服務以暴露 MCP 工具。", + "sessions.loadFailed": "無法加载已封存會話", + "sessions.unarchiveFailed": "取消封存失敗", + "sessions.deleteFailed": "刪除失敗", + "sessions.archiveHint": "封存一个對話来将其隱藏于此。", + "sessions.updateDirFailed": "無法更新預設目录", + "sessions.clearDirFailed": "無法清除預設目录", + "keys.showAdvanced": "顯示進階选项", + "keys.loadFailed": "API 金鑰加载失敗", + "keys.credentialSaved": "凭据已儲存", + "keys.credentialRemoved": "凭据已移除", + "provider.desc.nousPortal": "Nous Portal 基礎 URL 覆寫", + "provider.desc.openRouter": "OpenRouter API 金鑰(用于視覺、网页抓取辅助和 MoA)", + "provider.desc.google": "Google AI Studio API 金鑰(也认可为 GEMINI_API_KEY)", + "provider.desc.gemini": "Google AI Studio API 金鑰(GOOGLE_API_KEY 的别名)", + "provider.desc.anthropic": "Anthropic API 金鑰", + "provider.desc.deepseek": "DeepSeek API 金鑰(直接访问)", + "provider.desc.xai": "xAI API 金鑰", + "provider.desc.huggingface": "Hugging Face 令牌(推理服務商)", + "provider.desc.kimi": "Kimi / Moonshot API 金鑰", + "provider.desc.minimax": "MiniMax API 金鑰(国际端點)", + "provider.desc.minimaxCn": "MiniMax 中国 API 金鑰", + "provider.desc.dashscope": "阿里云 DashScope API 金鑰(通义千问 + 多模型)", + "provider.desc.glm": "Z.AI / GLM API 金鑰", + "provider.desc.nvidia": "NVIDIA NIM API 金鑰", + "provider.desc.opencodeGo": "OpenCode Go API 金鑰", + "provider.desc.opencodeZen": "OpenCode Zen API 金鑰", + "provider.desc.xiaomi": "小米 MiMo API 金鑰", + "provider.desc.kiloCode": "Kilo Code API 金鑰", + "provider.desc.aiGateway": "AI Gateway API 金鑰(Vercel AI Gateway)", + "provider.desc.browserbase": "Browserbase API 金鑰", + "provider.desc.elevenLabs": "ElevenLabs API 金鑰", + "provider.desc.openai": "OpenAI API 金鑰(用于語音处理代理)", + "provider.desc.mistral": "Mistral API 金鑰(用于 STT/TTS)", + "provider.desc.groq": "Groq API 金鑰(用于 STT)", + "provider.desc.tavily": "Tavily API 金鑰(网页搜尋)", + "provider.desc.firecrawl": "Firecrawl API 金鑰(网页搜尋和抓取)", + "provider.desc.fal": "FAL 金鑰(AI 图像生成)", + "provider.desc.nous": "Nous Portal 基礎 URL 覆寫", + "provider.desc.openrouter": "OpenRouter API 金鑰(用于視覺、网页抓取辅助和 MoA)", + "provider.desc.lmstudio": "LM Studio 凭据", + "provider.desc.zai": "Z.AI API 金鑰(GLM_API_KEY 的别名)", + "provider.desc.stepfun": "StepFun Step Plan API 金鑰", + "provider.desc.arcee": "Arcee AI API 金鑰", + "provider.desc.gmi": "GMI Cloud API 金鑰", + "provider.desc.qwenportal": "Qwen Portal 基礎 URL 覆寫", + "provider.desc.opencodego": "OpenCode Go API 金鑰($10/月订阅)", + "provider.desc.ollamacloud": "Ollama Cloud API 金鑰", + "provider.desc.awsbedrock": "AWS Bedrock 組態", + "provider.desc.exa": "Exa API 金鑰(网页搜尋和内容)", + "provider.desc.parallel": "Parallel API 金鑰(网页搜尋和提取)", + "titlebar.language": "语言", + "titlebar.languageDesc": "选择界面的显示语言。", + "language.zh-Hant": "中文(繁體)", + "language.pt-BR": "Português (Brasil)" +} \ No newline at end of file