diff --git a/messages/ar.json b/messages/ar.json new file mode 100644 index 0000000000000000000000000000000000000000..8e198d23ab8b47069392c2f7f505caa99d9ddd71 --- /dev/null +++ b/messages/ar.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "حفظ", + "cancel": "إلغاء", + "loading": "جارٍ التحميل...", + "error": "خطأ", + "search": "بحث", + "confirm": "تأكيد", + "delete": "حذف", + "edit": "تعديل", + "close": "إغلاق", + "back": "رجوع", + "next": "التالي", + "retry": "إعادة المحاولة", + "or": "أو", + "optional": "اختياري", + "language": "اللغة", + "dismiss": "تجاهل", + "continue": "متابعة", + "selected": "محدد", + "detected": "تم الكشف", + "now": "الآن", + "tryAgain": "حاول مرة أخرى", + "skipToMainContent": "تخطي إلى المحتوى الرئيسي", + "builtWithCareBy": "صُنع بعناية بواسطة", + "viewRelease": "عرض الإصدار", + "updateNow": "التحديث الآن", + "showDetails": "إظهار التفاصيل", + "hideDetails": "إخفاء التفاصيل", + "moreIssues": "+ {count, plural, one {مشكلة إضافية واحدة} two {مشكلتان إضافيتان} few {{count} مشاكل إضافية} other {{count} مشكلة إضافية}}" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "سجّل الدخول للمتابعة", + "username": "اسم المستخدم", + "password": "كلمة المرور", + "signIn": "تسجيل الدخول", + "signingIn": "جارٍ تسجيل الدخول...", + "signInWithGoogle": "تسجيل الدخول باستخدام Google", + "loadingGoogleSignIn": "جارٍ تحميل تسجيل الدخول بـ Google...", + "googleSignInFailed": "فشل تسجيل الدخول بـ Google", + "networkError": "خطأ في الشبكة", + "loginFailed": "فشل تسجيل الدخول", + "enterUsername": "أدخل اسم المستخدم", + "enterPassword": "أدخل كلمة المرور", + "orchestrationTagline": "تنسيق وكلاء OpenClaw", + "accessRequestSubmitted": "تم إرسال طلب الوصول", + "accessRequestDescription": "تم إرسال طلبك إلى المسؤول للمراجعة. ستتمكن من تسجيل الدخول بعد الموافقة.", + "tryAgain": "حاول مرة أخرى", + "noAdminAccount": "لم يتم إنشاء حساب مسؤول بعد", + "noAdminDescription": "أنشئ حساب المسؤول للبدء باستخدام Mission Control.", + "createAdminAccount": "إنشاء حساب مسؤول", + "welcomeToMC": "مرحباً بك في Mission Control", + "settingUpMC": "جارٍ إعداد Mission Control", + "createAdminToStart": "أنشئ حساب المسؤول للبدء", + "creatingAdmin": "جارٍ إنشاء حساب المسؤول...", + "displayName": "الاسم المعروض", + "confirmPassword": "تأكيد كلمة المرور", + "atLeast12Chars": "12 حرفاً على الأقل", + "repeatPassword": "أعد إدخال كلمة المرور", + "passwordsDoNotMatch": "كلمتا المرور غير متطابقتين", + "passwordTooShort": "يجب أن تتكون كلمة المرور من 12 حرفاً على الأقل", + "moreCharsNeeded": "{count, plural, one {حرف واحد إضافي مطلوب} two {حرفان إضافيان مطلوبان} few {{count} أحرف إضافية مطلوبة} other {{count} حرف إضافي مطلوب}}", + "firstTimeSetupOnly": "هذه الصفحة متاحة فقط أثناء الإعداد الأولي.", + "checkingSetupStatus": "جارٍ التحقق من حالة الإعداد...", + "setupFailed": "فشل الإعداد", + "failedToCheckSetup": "فشل التحقق من حالة الإعداد", + "validatingCredentials": "جارٍ التحقق من بيانات الاعتماد", + "creatingAdminAccount": "جارٍ إنشاء حساب المسؤول", + "configuringSession": "جارٍ تكوين الجلسة", + "launchingDashboard": "جارٍ تشغيل لوحة التحكم", + "usernameHint": "أحرف صغيرة وأرقام ونقاط وشرطات وشرطات سفلية فقط" + }, + "nav": { + "overview": "نظرة عامة", + "agents": "الوكلاء", + "tasks": "المهام", + "chat": "الدردشة", + "channels": "القنوات", + "skills": "المهارات", + "memory": "الذاكرة", + "activity": "النشاط", + "logs": "السجلات", + "costTracker": "تتبع التكاليف", + "nodes": "العقد", + "approvals": "الموافقات", + "office": "المكتب", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "التنبيهات", + "github": "GitHub", + "security": "الأمان", + "users": "المستخدمون", + "audit": "التدقيق", + "gateway": "البوابة", + "gateways": "البوابات", + "config": "الإعدادات", + "integrations": "التكاملات", + "debug": "تصحيح الأخطاء", + "settings": "الإعدادات", + "group": { + "observe": "المراقبة", + "automate": "الأتمتة", + "admin": "الإدارة" + }, + "collapseSidebar": "طي الشريط الجانبي", + "expandSidebar": "توسيع الشريط الجانبي", + "more": "المزيد" + }, + "settings": { + "language": "اللغة", + "languageDescription": "اختر لغة العرض المفضلة لديك", + "general": "عام", + "security": "الأمان", + "dataRetention": "الاحتفاظ بالبيانات", + "chatSettings": "الدردشة", + "gatewaySettings": "البوابة", + "title": "الإعدادات", + "description": "تهيئة سلوك Mission Control وسياسات الاحتفاظ بالبيانات", + "discard": "تجاهل", + "save": "حفظ", + "saving": "جارٍ الحفظ...", + "saveChanges": "حفظ التغييرات", + "workspaceManagementLabel": "إدارة مساحة العمل:", + "workspaceManagementDesc1": "لإنشاء أو إدارة مساحات العمل (نسخ المستأجرين)، انتقل إلى لوحة", + "superAdmin": "المشرف الأعلى", + "workspaceManagementDesc2": "في Admin > Super Admin في الشريط الجانبي. من هناك يمكنك إنشاء نسخ عملاء جديدة وإدارة المستأجرين ومراقبة مهام التزويد.", + "securityDescription": "فحص وضع الأمان الخاص بمحطتك", + "securityScan": "فحص الأمان", + "hideScan": "إخفاء الفحص", + "backups": "النسخ الاحتياطية", + "backupsDescription": "إنشاء نسخ احتياطية عند الطلب لقاعدة بيانات MC أو حالة البوابة", + "backupMcDatabase": "نسخ احتياطي لقاعدة بيانات MC", + "backupGatewayState": "نسخ احتياطي لحالة البوابة", + "backingUp": "جارٍ النسخ الاحتياطي...", + "onboarding": "الإعداد الأوّلي", + "onboardingDescription": "أعد تشغيل معالج الإعداد وأعد تعيين قائمة تحقق لوحة التحكم", + "replayOnboarding": "إعادة الإعداد الأوّلي", + "resetting": "جارٍ إعادة التعيين..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "تنسيق الوكلاء", + "authenticatingOperator": "جارٍ مصادقة المشغّل", + "detectingStationMode": "جارٍ كشف وضع المحطة", + "loadingControlConfig": "جارٍ تحميل إعدادات التحكم", + "connectingRuntimeLinks": "جارٍ توصيل روابط وقت التشغيل", + "syncingAgentRegistry": "جارٍ مزامنة سجل الوكلاء", + "loadingActiveSessions": "جارٍ تحميل الجلسات النشطة", + "hydratingWorkspaceBoard": "جارٍ تهيئة لوحة مساحة العمل", + "mappingMemoryGraph": "جارٍ رسم خريطة الذاكرة", + "indexingSkillCatalog": "جارٍ فهرسة كتالوج المهارات" + }, + "header": { + "workspace": "مساحة العمل", + "sessions": "الجلسات", + "events": "الأحداث", + "live": "مباشر", + "off": "متوقف", + "local": "محلي", + "connected": "متصل", + "disconnected": "غير متصل", + "reconnecting": "جارٍ إعادة الاتصال", + "offline": "غير متصل بالإنترنت", + "retry": "إعادة المحاولة {count}", + "jumpToSearch": "الانتقال إلى صفحة، مهمة، وكيل...", + "searchPlaceholder": "البحث في المهام والوكلاء والنشاط أو كتابة أمر صفحة...", + "searching": "جارٍ البحث...", + "noResults": "لم يتم العثور على نتائج", + "typeToSearch": "اكتب للبحث عن الكيانات أو الانتقال الفوري إلى الصفحات", + "gatewayConnection": "اتصال البوابة", + "status": "الحالة", + "host": "المضيف", + "latency": "زمن الاستجابة", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "عدد المحاولات", + "clickToReconnect": "انقر لإعادة الاتصال", + "down": "معطّل", + "goToOverview": "الانتقال إلى النظرة العامة", + "goToChat": "الانتقال إلى الدردشة", + "goToTasks": "الانتقال إلى المهام", + "goToAgents": "الانتقال إلى الوكلاء", + "goToActivityFeed": "الانتقال إلى موجز النشاط", + "goToNotifications": "الانتقال إلى الإشعارات", + "goToTokenUsage": "الانتقال إلى استخدام الرموز", + "goToLogs": "الانتقال إلى السجلات", + "goToMemoryBrowser": "الانتقال إلى متصفح الذاكرة", + "goToIntegrations": "الانتقال إلى التكاملات", + "goToSettings": "الانتقال إلى الإعدادات", + "goToGateways": "الانتقال إلى البوابات", + "goToGithubSync": "الانتقال إلى مزامنة GitHub", + "goToOffice": "الانتقال إلى المكتب", + "goToSkills": "الانتقال إلى المهارات", + "quickNavigation": "التنقل السريع" + }, + "contextSwitcher": { + "localMode": "الوضع المحلي", + "connected": "متصل", + "disconnected": "غير متصل", + "interface": "الواجهة", + "essential": "أساسي", + "full": "كامل", + "organizations": "المؤسسات", + "all": "الكل", + "noTools": "بدون أدوات", + "unlinked": "غير مرتبط", + "newOrganization": "مؤسسة جديدة...", + "usernamePlaceholder": "اسم المستخدم (مستخدم نظام التشغيل)", + "displayNamePlaceholder": "الاسم المعروض", + "gatewayPortPlaceholder": "منفذ البوابة (مطلوب)", + "installTools": "تثبيت الأدوات", + "usernameAndDisplayRequired": "اسم المستخدم والاسم المعروض مطلوبان", + "invalidUsernameFormat": "تنسيق اسم المستخدم غير صالح", + "gatewayPortRequired": "منفذ البوابة مطلوب", + "creating": "جارٍ الإنشاء...", + "createUser": "إنشاء مستخدم", + "createAndQueue": "إنشاء + إضافة للقائمة" + }, + "localModeBanner": { + "noGatewayDetected": "لم يتم الكشف عن بوابة OpenClaw", + "runningInLocalMode": " — يعمل في الوضع المحلي. مراقبة جلسات Claude Code والمهام والبيانات المحلية.", + "configureGateway": "تكوين البوابة" + }, + "updateBanner": { + "updating": "جارٍ التحديث...", + "restartingServer": "جارٍ إعادة تشغيل الخادم...", + "updateAvailable": "تحديث متاح: v{version}", + "newerVersionAvailable": " — يتوفر إصدار أحدث من Mission Control.", + "updateFailed": "فشل التحديث", + "networkError": "خطأ في الشبكة — تعذر الوصول إلى الخادم." + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "جارٍ تحديث OpenClaw...", + "openclawUpdated": "تم تحديث OpenClaw إلى v{version}", + "openclawUpdateAvailable": "تحديث OpenClaw: v{version} متاح", + "installed": "مثبّت: v{version}", + "changelog": "سجل التغييرات", + "copied": "تم النسخ!", + "copyCommand": "نسخ الأمر", + "updateFailed": "فشل التحديث", + "networkError": "خطأ في الشبكة — تعذر الوصول إلى الخادم." + }, + "doctorBanner": { + "fixCompleted": "اكتمل إصلاح طبيب OpenClaw", + "configDrift": "تم اكتشاف انحراف في إعدادات OpenClaw", + "stateIntegrity": "تحذير سلامة حالة OpenClaw", + "securityWarning": "تحذير أمني من OpenClaw", + "doctorWarnings": "تحذيرات طبيب OpenClaw", + "runningFixes": "جارٍ تنفيذ إصلاحات طبيب OpenClaw...", + "cleaningSessionStores": "جارٍ تنظيف مخازن الجلسات...", + "archivingOrphanTranscripts": "جارٍ أرشفة النصوص اليتيمة...", + "recheckingHealth": "جارٍ إعادة فحص صحة النسخة الحالية...", + "fixFailed": "فشل إصلاح طبيب OpenClaw", + "networkError": "خطأ في الشبكة — تعذر الوصول إلى الخادم.", + "runningFix": "جارٍ تنفيذ الإصلاح...", + "runDoctorFix": "تشغيل إصلاح الطبيب" + }, + "liveFeed": { + "liveFeed": "الموجز المباشر", + "showLiveFeed": "إظهار الموجز المباشر", + "collapseFeed": "طي الموجز", + "closeFeed": "إغلاق الموجز", + "noActivityYet": "لا يوجد نشاط بعد", + "eventsAppearLocal": "تظهر الأحداث عند إنشاء المهام أو تحديث الوكلاء", + "eventsStreamGateway": "يتم بث الأحداث هنا من البوابة وقاعدة البيانات المحلية", + "activeSessions": "الجلسات النشطة", + "noActiveSessions": "لا توجد جلسات نشطة", + "activeSession": "نشطة", + "idleSession": "خاملة" + }, + "errorBoundary": { + "somethingWentWrong": "حدث خطأ ما", + "unexpectedError": "حدث خطأ غير متوقع في هذه اللوحة." + }, + "page": { + "showLiveFeed": "إظهار الموجز المباشر", + "availableInFullMode": "{panel} متاح في الوضع الكامل.", + "switchToFull": "التبديل إلى الوضع الكامل", + "goToOverview": "الانتقال إلى النظرة العامة", + "requiresGateway": "{panel} يتطلب اتصالاً ببوابة OpenClaw.", + "configureGateway": "قم بتكوين بوابة لتفعيل هذه اللوحة." + }, + "onboarding": { + "stationOnline": "المحطة متصلة", + "stationReady": "محطتك جاهزة لاستقبال الوكلاء.", + "welcome": { + "title": "مرحباً بك في Mission Control", + "description": "محطتك لوكلاء الذكاء الاصطناعي. عندما يرسو الوكلاء هنا، يحصلون على ذاكرة دائمة وإدارة المهام وسير عمل منسق ومراقبة كاملة. لقد فحصنا إعداداتك — إليك ما هو متصل.", + "availableModes": "الأوضاع المتاحة", + "localMode": "الوضع المحلي", + "gatewayMode": "وضع البوابة", + "monitorClaude": "مراقبة جلسات Claude Code على هذا الجهاز", + "taskTracking": "تتبع المهام ومراقبة التكاليف", + "sessionHistory": "سجل الجلسات", + "singlePilot": "عمليات بطيار واحد", + "orchestrateAgents": "تنسيق عدة وكلاء عبر أجهزة مختلفة", + "memorySkills": "الذاكرة والمهارات والاتصال بين الوكلاء", + "webhookIntegrations": "تكاملات Webhook", + "requiresGateway": "يتطلب بوابة", + "activeSessionsDetected": "{count, plural, one {جلسة نشطة واحدة مكتشفة} two {جلستان نشطتان مكتشفتان} few {{count} جلسات نشطة مكتشفة} other {{count} جلسة نشطة مكتشفة}}", + "noActiveSessions": "لا توجد جلسات Claude نشطة", + "gatewayConnected": "البوابة متصلة", + "localModeNoGateway": "الوضع المحلي — بدون بوابة", + "agentsRegistered": "{count, plural, one {وكيل واحد مسجل} two {وكيلان مسجلان} few {{count} وكلاء مسجلين} other {{count} وكيل مسجل}}", + "noAgentsYet": "لا يوجد وكلاء بعد", + "gatewayRegistered": "البوابة: Mission Control مسجل", + "gatewayRegistrationPending": "تسجيل البوابة معلق", + "skipSetup": "تخطي الإعداد", + "getStarted": "ابدأ الآن" + }, + "interfaceMode": { + "title": "اختر تخطيط محطتك", + "description": "الأساسي يعرض اللوحات الرئيسية التي يحتاجها المشغلون أكثر. الكامل يفتح جميع أنظمة المحطة — الذاكرة والأتمتة وتدقيق الأمان والمزيد. يمكنك التبديل في أي وقت.", + "essential": "أساسي", + "full": "كامل", + "essentialDescription": "عمليات مبسطة — اللوحات التي ستستخدمها يومياً: نظرة عامة على الأسطول والوكلاء والمهام والدردشة وموجز النشاط والسجلات والإعدادات.", + "essentialPanels1": "نظرة عامة على الأسطول، الوكلاء، المهام، الدردشة", + "essentialPanels2": "موجز النشاط، السجلات، الإعدادات", + "essentialTotal": "7 لوحات إجمالاً", + "fullDescription": "وصول كامل للمحطة — يضيف متصفح الذاكرة وجدولة Cron وWebhooks والتنبيهات وتدقيق الأمان وتتبع التكاليف وإعدادات البوابة.", + "fullIncludes": "كل ما في الأساسي بالإضافة إلى", + "fullPanels": "الذاكرة، Cron، Webhooks، التدقيق", + "fullTotal": "جميع أنظمة المحطة مفتوحة" + }, + "gatewayLink": { + "title": "رابط البوابة", + "description": "يسجل Mission Control أصله لدى بوابة OpenClaw للاتصال عبر WebSocket وإدارة الوكلاء عن بُعد.", + "originRegistered": "تم تسجيل أصل البوابة", + "originAdded": "تمت إضافة أصل Mission Control إلى allowedOrigins للبوابة", + "registrationPending": "التسجيل معلق — سيتم تكوينه عند فحص القدرات التالي", + "deviceAuthConfigured": "تم تكوين مصادقة الجهاز", + "deviceAuthDisabled": "مصادقة الجهاز معطلة — يتم مصادقة MC عبر رمز البوابة", + "deviceAuthWillConfigure": "سيتم تكوينها مع تسجيل الأصل", + "testing": "جارٍ الاختبار...", + "testConnection": "اختبار الاتصال", + "gatewayReachable": "البوابة قابلة للوصول", + "gatewayUnreachable": "البوابة غير قابلة للوصول" + }, + "credentials": { + "title": "تأمين محطتك", + "description": "كلمة مرور المسؤول تحمي وحدة تحكم محطتك. مفتاح API هو بيانات اعتماد الرسو — يقدمه الوكلاء عند التسجيل، بحيث لا يمكن إلا للوكلاء المصرح لهم الرسو.", + "checkingCredentials": "جارٍ التحقق من بيانات الاعتماد...", + "adminPassword": "كلمة مرور المسؤول", + "passwordStrong": "كلمة المرور قوية وليست افتراضية", + "passwordWeak": "تستخدم كلمة مرور افتراضية أو ضعيفة — غيّر AUTH_PASS في .env", + "apiKey": "مفتاح API", + "apiKeyConfigured": "مكوّن — يمكن للوكلاء الرسو باستخدام هذا المفتاح", + "apiKeyNotSet": "غير مضبوط — لن يتمكن الوكلاء من الرسو بدون مفتاح مكوّن. نفّذ: bash scripts/generate-env.sh --force", + "openSettings": "فتح الإعدادات", + "securityScan": "فحص أمني", + "securityScanDescription": "تحقق من الشبكة ووقت التشغيل وتقوية OpenClaw قبل تشغيل المحطة.", + "launchStation": "تشغيل المحطة", + "launchAnyway": "التشغيل على أي حال" + } + }, + "channels": { + "title": "القنوات", + "loadingChannels": "جارٍ تحميل القنوات...", + "gatewayConnected": "البوابة متصلة", + "gatewayDisconnected": "البوابة غير متصلة", + "refresh": "تحديث", + "noChannelsConfigured": "لا توجد قنوات مُهيَّأة بعد. قم بتهيئة منصات المراسلة (WhatsApp، Telegram، Discord، Slack، إلخ) في إعدادات بوابة OpenClaw.", + "gatewayUnreachable": "تعذّر الوصول إلى بوابة OpenClaw. تحقق من أنها تعمل ويمكن الوصول إليها.", + "statusConnected": "متصل", + "statusRunning": "يعمل", + "statusConfigured": "مُهيَّأ", + "statusInactive": "غير نشط", + "probe": "فحص", + "probing": "جارٍ الفحص...", + "showQr": "عرض رمز QR", + "relink": "إعادة الربط", + "waitForScan": "انتظار المسح", + "logout": "تسجيل الخروج", + "loggedOut": "تم تسجيل الخروج.", + "profile": "الملف الشخصي", + "editProfile": "تعديل الملف الشخصي", + "edit": "تعديل", + "noProfileSet": "لم يُعيَّن ملف شخصي", + "displayName": "الاسم المعروض", + "username": "اسم المستخدم", + "about": "حول", + "bio": "نبذة تعريفية", + "avatarUrl": "رابط الصورة الرمزية", + "bannerUrl": "رابط البانر", + "website": "الموقع الإلكتروني", + "lightning": "Lightning", + "saving": "جارٍ الحفظ...", + "saveAndPublish": "حفظ ونشر", + "importFromRelays": "استيراد من المرحِّلات", + "hideAdvanced": "إخفاء الخيارات المتقدمة", + "showAdvanced": "عرض الخيارات المتقدمة", + "cancel": "إلغاء", + "profilePublished": "تم نشر الملف الشخصي على المرحِّلات.", + "saveFailed": "فشل الحفظ.", + "profileImported": "تم استيراد الملف الشخصي من المرحِّلات.", + "importFailed": "فشل الاستيراد.", + "accounts": "الحسابات ({count})" + }, + "integrations": { + "title": "التكاملات", + "loading": "جارٍ تحميل التكاملات...", + "connectedCount": "{connected} من {total} متصلة", + "pullAll": "جلب الكل", + "discard": "تجاهل", + "save": "حفظ", + "saving": "جارٍ الحفظ...", + "saveChanges": "حفظ التغييرات", + "cancel": "إلغاء", + "remove": "إزالة", + "removeTitle": "إزالة التكامل؟", + "removeDescription": "سيؤدي هذا إلى إزالة {target} من ملف .env. يجب إعادة تشغيل البوابة لتفعيل التغييرات.", + "notSet": "غير مُعيَّن", + "noIntegrationsInCategory": "لا توجد تكاملات في هذه الفئة" + }, + "execApproval": { + "title": "موافقات التنفيذ", + "pendingBadge": "{count} معلّق", + "realtimeLabel": "في الوقت الفعلي عبر WebSocket", + "viewApprovals": "الموافقات", + "viewAllowlist": "إعداد القائمة البيضاء", + "filterAll": "الكل", + "filterPending": "المعلّقة", + "filterResolved": "المحلولة", + "noPendingApprovals": "لا توجد موافقات معلّقة. ستظهر طلبات تنفيذ الوكلاء هنا كطبقة علوية.", + "noApprovals": "لا توجد موافقات لعرضها.", + "loadingAllowlist": "جارٍ تحميل القائمة البيضاء...", + "addAgent": "إضافة وكيل", + "save": "حفظ", + "saving": "جارٍ الحفظ...", + "reload": "إعادة التحميل", + "noAgentsConfigured": "لم يُهيَّأ أي وكيل. أدخل معرّف وكيل أعلاه لإنشاء قائمة بيضاء.", + "addPattern": "إضافة نمط", + "noAllowlistPatterns": "لا توجد أنماط في القائمة البيضاء. ستتطلب الأوامر موافقة يدوية.", + "previewMatches": "معاينة: {count} أمر حديث سيتطابق", + "andMore": "...و{count} آخر", + "allowOnce": "السماح مرة واحدة", + "alwaysAllow": "السماح دائمًا", + "deny": "رفض", + "statusExpired": "منتهي الصلاحية", + "statusApproved": "موافق عليه", + "statusDenied": "مرفوض" + }, + "notifications": { + "title": "الإشعارات", + "markAllRead": "وضع علامة مقروء على الكل", + "recipientLabel": "المستلم", + "recipientPlaceholder": "اسم الوكيل (مثال: my-agent)", + "noNotifications": "لا توجد إشعارات", + "markRead": "وضع علامة مقروء" + }, + "localAgentsDoc": { + "title": "AGENTS.md المحلي", + "noPathFound": "لم يُعثَر على AGENTS.md محلي بعد", + "openInVsCode": "فتح في VS Code", + "copied": "تم النسخ", + "copyPath": "نسخ المسار", + "collapse": "طي", + "expand": "توسيع", + "loading": "جارٍ تحميل AGENTS.md المحلي...", + "notDetected": "لم يُكتشَف AGENTS.md محلي.", + "checked": "تم الفحص: {paths}" + }, + "memoryGraph": { + "loading": "جارٍ تحميل الرسم البياني...", + "retry": "إعادة المحاولة", + "noMemoryDatabases": "لم يُعثَر على قواعد بيانات الذاكرة", + "noMemoryDatabasesHint": "لم يُكتشَف أي ملفات SQLite لذاكرة OpenClaw", + "allAgents": "جميع الوكلاء", + "filterFiles": "تصفية الملفات...", + "statAgents": "الوكلاء", + "statFiles": "الملفات", + "statChunks": "المقاطع", + "statSize": "الحجم", + "legendSessions": "الجلسات", + "legendMemory": "الذاكرة", + "legendKnowledge": "المعرفة", + "keyboardHint": "التمرير للتكبير / السحب للتحريك / النقر على عقدة للتعمق", + "chunks": "مقاطع", + "text": "نص" + }, + "agentComms": { + "connecting": "جارٍ الاتصال بالتدفق...", + "eventsCount": "{count} حدث", + "connectionGateway": "البوابة", + "connectionSse": "SSE", + "connectionPolling": "الاستطلاع", + "sourceLive": "مباشر", + "sourceMixed": "مختلط", + "sourceSeeded": "مُبذَّر", + "sessions": "{active}/{total} جلسات", + "scrollToLatest": "التمرير إلى الأحدث", + "toLabel": "إلى:", + "composerPlaceholderTarget": "رسالة إلى {name}... (Enter للإرسال)", + "composerPlaceholderBroadcast": "اختر جلسة أو وكيلًا أعلاه، أو اكتب للبث...", + "send": "إرسال", + "noFeedEvents": "لا توجد أحداث في التدفق بعد", + "noFilterEvents": "لا توجد أحداث {filter}", + "noFeedEventsHint": "اتصل بالبوابة أو انتظر نشاط الوكيل. ستُبث أحداث الجلسات والأدوات والدردشة والتتبعات في الوقت الفعلي.", + "noFilterEventsHint": "انتقل إلى «الكل» لرؤية أحداث الفئات الأخرى، أو انتظر أحداث {filter}." + }, + "agentDetail": { + "configTab": "الإعدادات", + "filesTab": "الملفات", + "toolsTab": "الأدوات", + "channelsTab": "القنوات", + "cronTab": "المجدول", + "modelsTab": "النماذج", + "workspaceFiles": "ملفات مساحة العمل", + "refresh": "تحديث", + "charCount": "{count} حرف", + "missing": "مفقود", + "selectFileToView": "حدد ملفاً للعرض أو التحرير", + "reset": "إعادة تعيين", + "saving": "جارٍ الحفظ...", + "save": "حفظ", + "fileNotExistYet": "هذا الملف غير موجود بعد. يمكنك إنشاؤه بكتابة المحتوى والحفظ.", + "toolConfiguration": "إعدادات الأدوات", + "profile": "الملف الشخصي:", + "saved": "تم الحفظ", + "allowListCount": "قائمة السماح ({count})", + "noAllowList": "لا توجد قائمة سماح صريحة (يتم استخدام إعدادات الملف الشخصي الافتراضية)", + "addToolAllowList": "إضافة أداة إلى قائمة السماح", + "add": "إضافة", + "alsoAllowCount": "السماح أيضاً ({count})", + "alsoAllowDesc": "أدوات إضافية مسموح بها فوق إعدادات الملف الشخصي الافتراضية.", + "none": "لا شيء", + "denyListCount": "قائمة الرفض ({count})", + "noDeniedTools": "لا توجد أدوات مرفوضة", + "addToolDenyList": "إضافة أداة إلى قائمة الرفض", + "channelStatus": "حالة القنوات", + "channelStatusDesc": "القنوات المتاحة لـ {agent}", + "noChannelsFound": "لم يتم العثور على قنوات...", + "connectedOf": "{connected}/{total} متصل", + "noAccounts": "لا توجد حسابات", + "configuredCount": "{count} مُعدّ", + "notConfigured": "غير مُعدّ", + "enabledCount": "{count} مُفعّل", + "disabled": "معطّل", + "cronJobs": "مهام Cron", + "allCronJobsCount": "{count} من {total} مهمة", + "agentCronJobsCount": "{count} من {total} مهمة", + "agentOnly": "العميل فقط", + "showAll": "عرض الكل", + "noCronJobsFound": "لم يتم العثور على مهام cron", + "noCronJobsAssigned": "لا توجد مهام cron مخصصة لـ {agent}", + "noSchedule": "لا يوجد جدول", + "enabled": "مُفعّل", + "lastRun": "الأخير:", + "nextRun": "التالي:", + "modelConfiguration": "إعدادات النماذج", + "modelConfigDesc": "قم بإعداد النماذج الأساسية والاحتياطية لهذا العميل.", + "primaryModel": "النموذج الأساسي", + "defaultModel": "افتراضي", + "fallbackChainCount": "سلسلة الاحتياطي ({count})", + "fallbackChainDesc": "النماذج التي يتم تجربتها بالترتيب إذا فشل النموذج الأساسي أو لم يكن متاحاً.", + "noFallbackModels": "لم يتم إعداد نماذج احتياطية.", + "moveUp": "تحريك لأعلى", + "moveDown": "تحريك لأسفل", + "remove": "إزالة", + "addFallbackPlaceholder": "إضافة نموذج احتياطي", + "sandboxMode": "الوضع", + "sandboxWorkspace": "مساحة العمل", + "sandboxNetwork": "الشبكة", + "sandboxNetworkPlaceholder": "مثال: none، host", + "toolsSection": "الأدوات", + "subAgentsSection": "العملاء الفرعيون", + "addSubAgentPlaceholder": "إضافة عميل فرعي", + "addSubAgent": "إضافة", + "subAgentModelOverride": "تجاوز نموذج العميل الفرعي", + "defaultInherit": "افتراضي (موروث)", + "modelLabel": "النموذج:", + "noSubAgents": "لم يتم إعداد عملاء فرعيين.", + "memorySearch": "البحث في الذاكرة", + "cancel": "إلغاء" + }, + "taskBoard": { + "title": "لوحة المهام", + "allProjects": "جميع المشاريع", + "projects": "المشاريع", + "close": "إغلاق", + "spawnSubAgent": "إنشاء عميل فرعي", + "newTask": "مهمة جديدة", + "refresh": "تحديث", + "spawnAgentPlaceholder": "اسم العميل", + "spawnTaskPlaceholder": "وصف المهمة", + "timeoutTitle": "المهلة الزمنية (دقائق)", + "spawning": "جارٍ الإنشاء...", + "spawn": "إنشاء", + "noActiveSpawnRequests": "لا توجد طلبات إنشاء نشطة", + "dismissError": "إغلاق الخطأ", + "taskBoardAriaLabel": "لوحة المهام", + "columnAriaLabel": "عمود {title}، {count} مهمة", + "colInbox": "البريد الوارد", + "colAssigned": "مُخصّص", + "colInProgress": "قيد التنفيذ", + "colReview": "المراجعة", + "colQualityReview": "مراجعة الجودة", + "colDone": "مكتمل", + "recurring": "متكرر", + "spawned": "مُنشأ", + "spawnedFromTask": "مُنشأ من المهمة #{id}", + "unassigned": "غير مُخصّص", + "due": "الاستحقاق:", + "dropTasksHere": "اسحب المهام هنا", + "priority_low": "منخفض", + "priority_medium": "متوسط", + "priority_high": "مرتفع", + "priority_critical": "حرج", + "claudeCodeTasks": "مهام Claude Code", + "collapse": "طي", + "expand": "توسيع", + "loading": "جارٍ التحميل...", + "noTeamTasksFound": "لم يتم العثور على مهام الفريق", + "noTeamTasksDesc": "لا توجد مهام فريق Claude Code نشطة حالياً.", + "taskCount": "{count} مهمة", + "blocked": "محظور", + "hermesScheduledTasks": "المهام المجدولة لـ Hermes", + "noScheduledTasksFound": "لم يتم العثور على مهام مجدولة", + "noScheduledTasksDesc": "لا توجد مهام مجدولة لـ Hermes نشطة حالياً.", + "noSchedule": "لا يوجد جدول", + "enabled": "مُفعّل", + "disabled": "معطّل", + "createNewTask": "إنشاء مهمة جديدة", + "fieldTitle": "العنوان", + "fieldDescription": "الوصف", + "fieldPriority": "الأولوية", + "fieldProject": "المشروع", + "fieldAssignTo": "تخصيص إلى", + "fieldTags": "العلامات", + "makeRecurring": "جعلها متكررة", + "createRecurringTask": "إنشاء مهمة متكررة", + "createTask": "إنشاء مهمة", + "cancel": "إلغاء", + "editTask": "تحرير المهمة", + "fieldStatus": "الحالة", + "saveChanges": "حفظ التغييرات", + "edit": "تحرير", + "deleteTaskConfirm": "هل تريد حذف \"{title}\"؟", + "delete": "حذف", + "closeTaskDetails": "إغلاق تفاصيل المهمة", + "noDescription": "لا يوجد وصف", + "taskDetailTabs": "علامات تبويب تفاصيل المهمة", + "tabDetails": "التفاصيل", + "tabComments": "التعليقات", + "tabQualityReview": "مراجعة الجودة", + "tabSession": "الجلسة", + "ticket": "التذكرة", + "project": "المشروع", + "status": "الحالة", + "priority": "الأولوية", + "assignedTo": "مُخصّص إلى", + "created": "تاريخ الإنشاء", + "issue": "المشكلة", + "branch": "الفرع", + "pr": "PR", + "live": "مباشر", + "postingAs": "النشر باسم", + "newComment": "تعليق جديد...", + "addComment": "إضافة تعليق", + "broadcastToSubscribers": "البث للمشتركين", + "broadcastPlaceholder": "بث رسالة لجميع المشتركين...", + "broadcast": "بث", + "broadcastSent": "تم إرسال البث إلى {count} مشترك", + "loadingComments": "جارٍ تحميل التعليقات...", + "noComments": "لا توجد تعليقات بعد", + "aegisQualityReview": "مراجعة جودة Aegis", + "noReviews": "لا توجد مراجعات بعد", + "reviewerPlaceholder": "اسم المراجع", + "reviewNotesPlaceholder": "ملاحظات المراجعة...", + "submit": "إرسال", + "loadingTranscript": "جارٍ تحميل النص...", + "noSessionMessages": "لا توجد رسائل جلسة" + }, + "cronManagement": { + "title": "إدارة Cron", + "subtitle": "جدولة وإدارة المهام المتكررة", + "loading": "جارٍ التحميل...", + "refresh": "تحديث", + "addJob": "إضافة مهمة", + "calendarView": "عرض التقويم", + "calendarViewDescLocal": "تُعرض الأوقات بمنطقتك الزمنية المحلية", + "calendarViewDesc": "تُعرض الأوقات بتوقيت UTC", + "prev": "السابق", + "today": "اليوم", + "next": "التالي", + "calMode_agenda": "الأجندة", + "calMode_week": "الأسبوع", + "calMode_month": "الشهر", + "searchPlaceholder": "البحث في المهام...", + "allAgents": "جميع العملاء", + "allStates": "جميع الحالات", + "enabled": "مُفعّل", + "disabled": "معطّل", + "all": "الكل", + "sortName": "الاسم", + "sortSchedule": "الجدول", + "sortLastRun": "آخر تشغيل", + "sortNextRun": "التشغيل التالي", + "ascending": "تصاعدي", + "descending": "تنازلي", + "noJobsMatchFilters": "لا توجد مهام تطابق المرشحات الحالية.", + "uniqueJobs": "{count} مهمة فريدة", + "noJobsForDay": "لا توجد مهام مجدولة في هذا التاريخ.", + "jobCount": "{count} مهمة", + "runsCount": "{count} تشغيل", + "totalRunsCount": "إجمالي {count} تشغيل", + "moreJobs": "+{count} أخرى", + "firstRun": "أول {time}", + "scheduledJobs": "المهام المجدولة", + "jobsCount": "{count} من {total} مهمة", + "loadingJobs": "جارٍ تحميل المهام...", + "noCronJobsFound": "لم يتم العثور على مهام cron.", + "colJobName": "اسم المهمة", + "colAgent": "العميل", + "colSchedule": "الجدول", + "colModel": "النموذج", + "colStatus": "الحالة", + "colLastRun": "آخر تشغيل", + "colNextRun": "التشغيل التالي", + "colActions": "الإجراءات", + "enable": "تفعيل", + "disable": "تعطيل", + "run": "تشغيل", + "runNowForce": "تشغيل الآن (إجباري)", + "runNowIfDue": "تشغيل الآن (إذا حان الوقت)", + "clone": "نسخ", + "history": "السجل", + "configuration": "الإعدادات", + "delivery": "التسليم", + "source": "المصدر", + "localSchedulerAutomation": "المجدول المحلي / الأتمتة", + "command": "الأمر", + "timing": "التوقيت", + "recentLogs": "السجلات الأخيرة", + "lastRun": "آخر تشغيل", + "nextRun": "التشغيل التالي", + "timezone": "المنطقة الزمنية", + "remove": "حذف", + "close": "إغلاق", + "noLogsAvailable": "لا تتوفر سجلات.", + "runHistoryTitle": "سجل التشغيل: {name}", + "totalRuns": "إجمالي {count} تشغيل", + "filterRunsPlaceholder": "تصفية التشغيلات...", + "timestamp": "الطابع الزمني", + "duration": "المدة", + "error": "الخطأ", + "noRunHistoryAvailable": "لا يتوفر سجل تشغيل.", + "loadMore": "تحميل المزيد", + "addNewCronJob": "إضافة مهمة cron جديدة", + "fieldJobName": "اسم المهمة", + "fieldSchedule": "الجدول (تنسيق cron)", + "quickSelect": "اختيار سريع...", + "scheduleFormatHint": "التنسيق: الدقيقة الساعة اليوم الشهر يوم_الأسبوع", + "fieldCommand": "الأمر", + "fieldModelOptional": "النموذج (اختياري)", + "modelHint": "اتركه فارغاً لاستخدام النموذج الافتراضي للعميل أو البوابة.", + "fieldStaggerOptional": "إزاحة التدرج (اختياري)", + "seconds": "ثانية", + "staggerHint": "تأخير التنفيذ لتجنب التداخل مع المهام الأخرى في نفس الجدول.", + "fieldDescriptionOptional": "الوصف (اختياري)", + "descriptionPlaceholder": "ماذا تفعل هذه المهمة؟", + "cancel": "إلغاء", + "claudeCodeTeams": "فرق Claude Code", + "teamsCount": "{count} فريق", + "collapse": "طي", + "expand": "توسيع", + "noClaudeCodeTeams": "لم يتم العثور على فرق Claude Code في ~/.claude/teams/", + "membersCount": "{count} عضو" + }, + "sessionDetails": { + "title": "إدارة الجلسات", + "subtitle": "مراقبة وإدارة جلسات العوامل النشطة", + "filter": "تصفية", + "filterAll": "جميع الجلسات", + "filterActive": "النشطة فقط", + "filterIdle": "الخاملة فقط", + "sortBy": "ترتيب حسب", + "sortAge": "العمر", + "sortTokens": "استخدام الرموز", + "sortModel": "النموذج", + "timeWindow": "نافذة زمنية", + "last1h": "آخر ساعة", + "last6h": "آخر 6 ساعات", + "last24h": "آخر 24 ساعة", + "last7d": "آخر 7 أيام", + "allTime": "الكل", + "global": "عام", + "unknown": "غير معروف", + "sessionCount": "{filtered} من {total} جلسة", + "activeCount": "{count} نشطة", + "noSessionsMatch": "لا توجد جلسات تطابق الفلتر الحالي", + "model": "النموذج", + "tokenUsage": "استخدام الرموز", + "sessionDetails": "تفاصيل الجلسة", + "kind": "النوع", + "id": "المعرف", + "lastActivity": "آخر نشاط", + "messages": "الرسائل", + "label": "التسمية", + "addLabel": "انقر لإضافة تسمية...", + "sessionControls": "ضوابط الجلسة", + "thinking": "التفكير", + "verbose": "تفصيلي", + "reasoning": "الاستدلال", + "off": "إيقاف", + "on": "تشغيل", + "minimal": "أدنى", + "low": "منخفض", + "medium": "متوسط", + "high": "مرتفع", + "xhigh": "مرتفع جداً", + "full": "كامل", + "stream": "تدفق", + "modelInformation": "معلومات النموذج", + "fullName": "الاسم الكامل", + "provider": "المزود", + "description": "الوصف", + "monitor": "مراقبة", + "pause": "إيقاف مؤقت", + "terminate": "إنهاء", + "working": "جارٍ المعالجة...", + "delete": "حذف", + "deleteConfirm": "حذف؟", + "yes": "نعم", + "no": "لا", + "confirmTerminate": "هل أنت متأكد من رغبتك في إنهاء هذه الجلسة؟", + "failedMonitor": "فشل مراقبة الجلسة", + "failedPause": "فشل إيقاف الجلسة مؤقتاً", + "failedTerminate": "فشل إنهاء الجلسة", + "sessionOverview": "نظرة عامة على الجلسات", + "totalSessions": "إجمالي الجلسات", + "active": "نشطة", + "idle": "خاملة", + "subAgents": "العوامل الفرعية", + "cronJobs": "مهام Cron", + "modelDistribution": "توزيع النماذج", + "highTokenUsage": "استخدام مرتفع للرموز", + "highTokenUsageDesc": "{count} جلسة تستخدم أكثر من 80% من حد الرموز الخاص بها." + }, + "costTracker": { + "title": "متتبع التكاليف", + "subtitle": "تحليل استخدام الرموز والتكاليف والإنفاق عبر العوامل والنماذج والجلسات", + "loadingCostData": "جارٍ تحميل بيانات التكلفة", + "noUsageData": "لا توجد بيانات استخدام بعد", + "noUsageDataDesc": "تظهر بيانات الاستخدام عندما تنفذ العوامل جلسات وتستهلك رموزاً.", + "refresh": "تحديث", + "totalCost": "إجمالي التكلفة ({timeframe})", + "totalTokens": "إجمالي الرموز", + "apiRequests": "طلبات API", + "activeAgents": "العوامل النشطة", + "taskAttributed": "منسوب للمهام", + "usageTrends": "اتجاهات الاستخدام", + "perTurn": "لكل دور", + "cumulative": "تراكمي", + "noTrendData": "لا توجد بيانات اتجاه لهذه الفترة", + "tokenUsageByModel": "استخدام الرموز حسب النموذج", + "noModelData": "لا توجد بيانات نموذج", + "costDistributionByModel": "توزيع التكاليف حسب النموذج", + "noCostData": "لا توجد بيانات تكلفة", + "performanceInsights": "رؤى الأداء", + "mostEfficientModel": "النموذج الأكثر كفاءة", + "avgTokensPerRequest": "متوسط الرموز/الطلب", + "optimizationPotential": "إمكانية التحسين", + "savingsPossible": "توفير ممكن", + "exportData": "تصدير البيانات", + "exportDataDesc": "تنزيل سجلات استخدام الرموز وإحصاءات النماذج وتفاصيل التكاليف", + "exporting": "جارٍ التصدير...", + "noAgentData": "لا توجد بيانات عامل", + "noAgentDataDesc": "ستظهر سجلات استخدام الرموز عندما تبدأ العوامل في الإبلاغ", + "agents": "العوامل", + "totalCostDays": "إجمالي التكلفة ({days}ي)", + "avgPer1kTokens": "متوسط $/1K رمز", + "perAgentCost": "التكلفة لكل عامل", + "agentBreakdown": "تفاصيل العامل", + "inputTokens": "رموز الإدخال", + "outputTokens": "رموز الإخراج", + "ioRatio": "نسبة الإدخال/الإخراج", + "lastActive": "آخر نشاط", + "noTaskCosts": "لا توجد تكاليف منسوبة للمهام", + "tokens": "رموز", + "sortBy": "ترتيب", + "noSessionCostData": "لا توجد بيانات تكلفة للجلسة", + "noSessionCostDataDesc": "تظهر التفاصيل حسب الجلسة بعد تسجيل الاستخدام.", + "activeStatus": "نشطة", + "inactiveStatus": "غير نشطة", + "requests": "طلبات", + "inShort": "إدخال", + "outShort": "إخراج", + "avgPerReq": "متوسط/طلب", + "noTaskCostData": "لا توجد بيانات تكلفة للمهام", + "noTaskCostDataDesc": "ستُنسب التكاليف للمهام عندما تعمل عليها العوامل", + "tasksWithCosts": "المهام ذات التكاليف", + "attributedCost": "التكلفة المنسوبة", + "attributedTokens": "الرموز المنسوبة", + "unattributed": "غير منسوب", + "tasksByCost": "المهام حسب التكلفة", + "reqs": "طلب" + }, + "superAdmin": { + "accessDenied": "رفض الوصول", + "accessDeniedDesc": "يتطلب التحكم الفائق صلاحيات المسؤول.", + "loading": "جارٍ تحميل بيانات المسؤول الفائق...", + "title": "التحكم الفائق", + "subtitleLocal": "عرض مستوى التحكم المحلي على أتمتة الجدولة وحالة وقت التشغيل.", + "subtitleMultiTenant": "مستوى تحكم توفير متعدد المستأجرين مع بوابات موافقة وإجراءات مدمرة أكثر أماناً.", + "addWorkspace": "+ إضافة مساحة عمل", + "refresh": "تحديث", + "activeOrgs": "المؤسسات النشطة", + "pendingInProgress": "معلق / قيد التنفيذ", + "erroredOrgs": "المؤسسات ذات الأخطاء", + "queuedApprovals": "الموافقات في قائمة الانتظار", + "createNewWorkspace": "إنشاء مساحة عمل جديدة", + "createWorkspaceHint": "املأ التفاصيل أدناه وانقر على إنشاء + قائمة الانتظار لتوفير مثيل عميل جديد.", + "slugPlaceholder": "المعرف المختصر (مثال: acme)", + "displayNamePlaceholder": "اسم العرض", + "linuxUserPlaceholder": "مستخدم Linux (اختياري)", + "planStandard": "قياسي", + "planPro": "احترافي", + "planEnterprise": "مؤسسي", + "gatewayPortPlaceholder": "منفذ البوابة", + "dashboardPortPlaceholder": "منفذ لوحة التحكم", + "dryRun": "تشغيل تجريبي", + "live": "(حقيقي)", + "createAndQueue": "إنشاء + قائمة الانتظار", + "tabOrganizations": "المؤسسات", + "tabJobs": "الوظائف", + "tabEvents": "الأحداث", + "searchOrganizations": "البحث في المؤسسات", + "showing": "عرض {shown} من {total}", + "colTenant": "المستأجر", + "colSystemUser": "مستخدم النظام", + "colOwner": "المالك", + "colStatus": "الحالة", + "colLatestJob": "آخر وظيفة", + "colAction": "الإجراء", + "unassigned": "غير مُعيَّن", + "by": "بواسطة", + "unknownCreator": "غير معروف", + "localReadOnly": "محلي للقراءة فقط", + "queueDecommission": "إضافة إلى قائمة إيقاف التشغيل", + "noMatchingOrgs": "لا توجد مؤسسات مطابقة.", + "prev": "السابق", + "next": "التالي", + "page": "صفحة {page} / {total}", + "searchJobs": "البحث في الوظائف", + "colJob": "الوظيفة", + "colRequestedApproved": "مطلوب/معتمد", + "reqShort": "مطلوب", + "apprShort": "معتمد", + "view": "عرض", + "viewEvents": "عرض الأحداث", + "approveAndRun": "اعتماد + تنفيذ", + "approve": "اعتماد", + "reject": "رفض", + "running": "جارٍ التنفيذ...", + "run": "تنفيذ", + "noMatchingJobs": "لا توجد وظائف مطابقة.", + "showingEventsForJob": "عرض أحداث الوظيفة #{jobId}", + "selectJobForEvents": "اختر وظيفة لفحص سجل أحداث التوفير.", + "noEventsYet": "لا توجد أحداث لهذه الوظيفة بعد.", + "queueDecommissionTitle": "إضافة إلى قائمة إيقاف التشغيل: {name}", + "reviewImpact": "راجع التأثير قبل إنشاء الوظيفة.", + "dryRunRecommended": "تشغيل تجريبي (موصى به)", + "dryRunDesc": "بدون تغييرات على النظام، يتحقق من الأوامر ويسجل تنفيذاً كاملاً للخطة.", + "liveExecution": "التنفيذ الحقيقي", + "liveExecutionDesc": "سيوقف الخدمات ويطبق تغييرات إيقاف التشغيل بعد الاعتماد + التنفيذ.", + "removeLinuxUser": "إزالة مستخدم Linux", + "removeLinuxUserDesc": "ينفذ `userdel -r` ويزيل الدليل الرئيسي.", + "removeStateDirs": "إزالة أدلة الحالة/مساحة العمل", + "removeStateDirsDesc": "يحذف مسارات `.openclaw` و`workspace` عند الاحتفاظ بالمستخدم.", + "impactSummary": "ملخص التأثير", + "impactStopsService": "يوقف ويعطل `openclaw-gateway@{user}.service`.", + "impactRemovesEnv": "يزيل `/etc/openclaw-tenants/{user}.env`.", + "impactLinuxUserRemoved": "سيتم إزالة مستخدم Linux.", + "impactStateDirsRemoved": "سيتم إزالة أدلة الحالة/مساحة العمل.", + "impactRetained": "يتم الاحتفاظ بمستخدم Linux والأدلة.", + "reasonOptional": "السبب (اختياري)", + "typeSlugLabel": "اكتب", + "toConfirmLive": "للتأكيد على إيقاف التشغيل الحقيقي", + "cancel": "إلغاء", + "queueing": "جارٍ الإضافة لقائمة الانتظار...", + "queueDryRunDecommission": "إضافة إيقاف تشغيل تجريبي لقائمة الانتظار", + "queueLiveDecommission": "إضافة إيقاف تشغيل حقيقي لقائمة الانتظار", + "slugAndNameRequired": "المعرف المختصر واسم العرض مطلوبان", + "tenantCreated": "تم إنشاء المستأجر {slug}. تمت إضافة وظيفة التهيئة لقائمة الانتظار.", + "jobExecuted": "تم تنفيذ الوظيفة #{jobId}", + "jobApprovedExecuted": "تم اعتماد وتنفيذ الوظيفة #{jobId}", + "typeToConfirm": "اكتب {slug} للتأكيد على إيقاف التشغيل الحقيقي", + "decommissionQueuedDryRun": "تمت إضافة إيقاف التشغيل التجريبي لـ {slug} لقائمة الانتظار", + "decommissionQueued": "تمت إضافة إيقاف تشغيل {slug} لقائمة الانتظار", + "optionalReason": "سبب اختياري لـ {action}:", + "jobActioned": "تم {action} الوظيفة #{jobId}" + }, + "auditTrail": { + "title": "مسار التدقيق", + "eventsLogged": "{count, plural, one {# حدث} other {# أحداث}} مسجلة", + "refresh": "تحديث", + "allActions": "جميع الإجراءات", + "groupAuth": "المصادقة", + "groupUsers": "المستخدمون", + "groupAgents": "العوامل", + "groupSystem": "النظام", + "groupConfig": "الإعداد", + "groupWorkspaces": "مساحات العمل", + "actionLogin": "تسجيل دخول", + "actionLoginFailed": "فشل تسجيل الدخول", + "actionLogout": "تسجيل خروج", + "actionLoginGoogle": "تسجيل دخول Google", + "actionGoogleDisconnect": "قطع اتصال Google", + "actionPasswordChange": "تغيير كلمة المرور", + "actionProfileUpdate": "تحديث الملف الشخصي", + "actionUserCreate": "إنشاء مستخدم", + "actionUserUpdate": "تحديث مستخدم", + "actionUserDelete": "حذف مستخدم", + "actionRoleDenied": "رفض الوصول", + "actionAccessRequest": "طلب وصول", + "actionAccessApprove": "اعتماد وصول", + "actionAccessDeny": "رفض وصول", + "actionAgentRegister": "تسجيل عامل", + "actionAgentCreate": "إنشاء عامل", + "actionAgentUpdate": "تحديث عامل", + "actionAgentDelete": "حذف عامل", + "actionAgentConfigSync": "مزامنة الإعداد", + "actionLocalAgentSync": "مزامنة العوامل المحلية", + "actionSettingsUpdate": "تحديث الإعدادات", + "actionAutoBackup": "نسخ احتياطي تلقائي", + "actionBackupCreate": "إنشاء نسخة احتياطية", + "actionBackupDelete": "حذف نسخة احتياطية", + "actionHeartbeatCheck": "فحص نبضة القلب", + "actionIntegrationTest": "اختبار التكامل", + "actionCleanup": "تنظيف", + "actionExport": "تصدير", + "actionTokenRotate": "تدوير الرمز", + "actionGatewayConfigUpdate": "تحديث إعداد البوابة", + "actionWorkspaceCreate": "إنشاء مساحة عمل", + "actionWorkspaceUpdate": "تحديث مساحة عمل", + "actionWorkspaceDelete": "حذف مساحة عمل", + "filterByActor": "تصفية حسب المنفذ...", + "noEvents": "لم يتم العثور على أحداث تدقيق", + "userRef": "مستخدم #{id}", + "previous": "السابق", + "next": "التالي", + "pageOf": "صفحة {page} من {total}", + "adminRequired": "مطلوب وصول المسؤول لعرض سجلات التدقيق", + "failedFetch": "فشل تحميل سجل التدقيق", + "detailUsername": "اسم المستخدم", + "detailRole": "الدور", + "detailName": "الاسم", + "detailPasswordReset": "إعادة تعيين كلمة المرور", + "detailChanged": "تم التغيير", + "detailSize": "الحجم", + "detailMarkedOffline": "تم تعليمه غير متصل", + "detailAgent": "العامل", + "detailSessions": "الجلسات", + "detailEvents": "الأحداث", + "detailRemoved": "تمت الإزالة", + "detailType": "النوع" + }, + "securityAudit": { + "title": "تدقيق الأمان", + "subtitle": "الوضع الأمني وأحداث المصادقة ودرجات الثقة واكتشاف التهديدات", + "timeframeHour": "ساعة", + "timeframeDay": "يوم", + "timeframeWeek": "أسبوع", + "timeframeMonth": "شهر", + "loadingSecurityData": "جارٍ تحميل بيانات الأمان", + "securityPosture": "الوضع الأمني", + "blendedScore": "الدرجة المجمّعة: 70% تكوين البنية التحتية، 30% سجل الأحداث.", + "infrastructureScan": "فحص البنية التحتية", + "scanCredentials": "بيانات الاعتماد", + "scanNetwork": "الشبكة", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "بيئة التشغيل", + "scanOs": "أمان نظام التشغيل", + "authEvents": "أحداث المصادقة", + "noAuthEvents": "لا توجد أحداث مصادقة في هذه الفترة الزمنية", + "colType": "النوع", + "colActor": "الفاعل", + "colIP": "IP", + "colTime": "الوقت", + "agentTrustScores": "درجات ثقة الوكلاء", + "noAgentTrustData": "لا تتوفر بيانات ثقة الوكلاء", + "flagged": "مُعلَّم", + "secretExposureAlerts": "تنبيهات تسرب الأسرار", + "noSecretsDetected": "لم يتم اكتشاف أي أسرار", + "colFile": "الملف", + "colPreview": "معاينة", + "colStatus": "الحالة", + "colDetected": "تاريخ الاكتشاف", + "statusResolved": "محلول", + "statusActive": "نشط", + "mcpToolAudit": "تدقيق أدوات MCP", + "noToolUsageData": "لا تتوفر بيانات استخدام الأدوات", + "chartSuccess": "نجاح", + "chartFailure": "فشل", + "rateLimitAbuseSignals": "إشارات الحد من المعدل / إساءة الاستخدام", + "noRateLimitSignals": "لا توجد إشارات حد المعدل", + "hits": "{hits} وصول", + "injectionAttempts": "محاولات الحقن", + "noInjectionAttempts": "لم يتم اكتشاف محاولات حقن", + "colSource": "المصدر", + "colInput": "الإدخال", + "statusBlocked": "محظور", + "statusPassed": "مسموح", + "securityTimeline": "الجدول الزمني للأمان ({timeframe})", + "noTimelineData": "لا توجد بيانات جدول زمني", + "chartAuthEvents": "أحداث Auth", + "chartInjections": "الحقن", + "chartSecrets": "الأسرار", + "chartToolCalls": "استدعاءات الأدوات", + "agentEvalDashboard": "لوحة تقييم الوكلاء", + "overallConvergence": "التقارب الكلي", + "crossAgentAlignment": "التوافق بين الوكلاء عبر طبقات التقييم", + "noEvalData": "لا تتوفر بيانات تقييم", + "convergence": "التقارب:", + "drift": "انجراف", + "fixPrefix": "الإصلاح: {fix}", + "issueCount": "{count, plural, one {مشكلة واحدة} two {مشكلتان} few {# مشكلات} other {# مشكلة}}" + }, + "office": { + "title": "جسر القيادة", + "subtitle": "راقب فريقك في الوقت الفعلي", + "loadingLocalSessions": "جارٍ فحص الجلسات المحلية...", + "loadingOffice": "جارٍ تحميل المكتب...", + "activeCount": "{count} نشط", + "standbyCount": "{count} في الانتظار", + "alertCount": "{count} تنبيه", + "offlineCount": "{count} غير متصل", + "buttonDeck": "الجسر", + "buttonCrewChart": "مخطط الطاقم", + "refresh": "تحديث", + "emptyDeck": "الجسر فارغ", + "emptyDeckSubtitle": "انشر الوكلاء لرؤيتهم هنا", + "crewHeader": "الطاقم", + "onlineCount": "{count} متصل", + "filterAll": "الكل", + "filterWorking": "يعمل", + "filterIdle": "خامل", + "filterNeedsAttention": "يحتاج انتباهاً", + "filterRunning": "قيد التشغيل", + "filterNotRunning": "غير مشغّل", + "noWorkersInFilter": "لا يوجد عمال في هذا الفلتر.", + "noRecentActivity": "لا يوجد نشاط حديث", + "activeStatus": "نشط", + "idleMinutes": "{minutes}د خامل", + "mainDeck": "الجسر الرئيسي", + "radarLabel": "الرادار", + "resetView": "إعادة تعيين", + "showCrewButton": "إظهار الطاقم", + "hideCrewButton": "إخفاء الطاقم", + "showRadarButton": "إظهار الرادار", + "hideRadarButton": "إخفاء الرادار", + "showLogButton": "إظهار السجل", + "hideLogButton": "إخفاء السجل", + "resetLayout": "إعادة تعيين التخطيط", + "deckLog": "سجل الجسر", + "noEventsYet": "لا توجد أحداث بعد. انقر على منطقة أو نفّذ إجراءً.", + "legendActive": "نشط", + "legendStandby": "في الانتظار", + "legendOther": "أخرى", + "hotspotUp": "أعلى", + "hotspotDown": "أسفل", + "hotspotLeft": "يسار", + "hotspotRight": "يمين", + "hotspotFineMinusX": "دقيق -X", + "hotspotFinePlusX": "دقيق +X", + "hotspotWider": "أوسع", + "hotspotNarrower": "أضيق", + "hotspotTaller": "أطول", + "hotspotShorter": "أقصر", + "segmentedBy": "مُقسَّم حسب", + "segmentCategory": "الفئة", + "segmentRole": "الدور", + "segmentStatus": "الحالة", + "currentActivity": "النشاط الحالي", + "taskStatTotal": "المجموع", + "taskStatAssigned": "مُعيَّن", + "taskStatActive": "نشط", + "taskStatDone": "مكتمل", + "sessionLabel": "الجلسة:", + "quickActions": "الإجراءات السريعة", + "actionFocus": "تركيز", + "actionPair": "اقتران", + "actionBreak": "استراحة", + "openFlightDeck": "فتح في Flight Deck", + "openingFlightDeck": "جارٍ فتح Flight Deck...", + "flightDeckCompanion": "تطبيق مرافق خاص/احترافي لتحليل الجلسات المعمّق", + "flightDeckRequired": "مطلوب Flight Deck", + "flightDeckDescription": "Flight Deck هو التطبيق المرافق الخاص/الاحترافي لـ Mission Control.", + "flightDeckNotInstalled": "يبدو أن Flight Deck غير مثبّت على هذا الجهاز. قم بتثبيته لفتح جلسات الوكلاء بعناصر تحكم وتشخيصات أكثر ثراءً.", + "maybeLater": "ربما لاحقاً", + "downloadFlightDeck": "تنزيل Flight Deck", + "moving": "في تنقل", + "neverSeen": "لم يُرَ قط", + "justNow": "الآن", + "minutesAgo": "منذ {minutes} دقيقة", + "hoursAgo": "منذ {hours} ساعة", + "daysAgo": "منذ {days} يوم" + }, + "githubSync": { + "title": "مزامنة مشكلات GitHub", + "subtitle": "استيراد مشكلات GitHub كمهام Mission Control", + "loading": "جارٍ تحميل مزامنة GitHub...", + "connectedAs": "GitHub: {user}", + "notConfigured": "GitHub: غير مُهيَّأ", + "tokenNotConfigured": "رمز GitHub غير مُهيَّأ", + "tokenNotConfiguredDesc": "قم بتعيين GITHUB_TOKEN في عمليات التكامل لتمكين مزامنة المشكلات. لا يزال بإمكانك تصفح سجل المزامنة والمهام المرتبطة.", + "importIssues": "استيراد المشكلات", + "labelRepository": "المستودع", + "placeholderRepo": "المالك/المستودع", + "labelLabels": "التصنيفات (اختياري)", + "placeholderLabels": "خطأ,تحسين", + "labelState": "الحالة", + "stateOpen": "مفتوح", + "stateClosed": "مغلق", + "stateAll": "الكل", + "labelAssignAgent": "تعيين لوكيل (اختياري)", + "unassigned": "غير مُعيَّن", + "buttonPreview": "معاينة", + "buttonImport": "استيراد", + "twoWaySync": "المزامنة ثنائية الاتجاه", + "syncAll": "مزامنة الكل", + "enableSync": "تمكين", + "disableSync": "تعطيل", + "syncButton": "مزامنة", + "noProjectsLinked": "لا توجد مشاريع مرتبطة بمستودعات GitHub. قم بتعيين مستودع GitHub في إدارة المشاريع.", + "previewTitle": "معاينة ({count} مشكلة)", + "colNumber": "#", + "colTitle": "العنوان", + "colLabels": "التصنيفات", + "colState": "الحالة", + "colCreated": "تاريخ الإنشاء", + "syncHistory": "سجل المزامنة", + "colRepo": "المستودع", + "colIssues": "المشكلات", + "colStatus": "الحالة", + "colSyncedAt": "تاريخ المزامنة", + "noSyncHistory": "لا يوجد سجل مزامنة. قم باستيراد المشكلات من أعلاه للبدء.", + "linkedTasks": "المهام المرتبطة", + "linkedTasksWithCount": "المهام المرتبطة ({count})", + "colTask": "المهمة", + "colPriority": "الأولوية", + "colGitHub": "GitHub", + "colSynced": "تمت المزامنة", + "noLinkedTasks": "لا توجد مهام مرتبطة بمشكلات GitHub بعد.", + "syncResultImported": "مستورد: {count}", + "syncResultSkipped": "تم التخطي: {count}", + "syncResultErrors": "أخطاء: {count}", + "enterRepo": "أدخل مستودعاً (المالك/المستودع)", + "noIssuesFound": "لم يتم العثور على مشكلات تطابق الفلاتر", + "failedFetchIssues": "فشل في جلب المشكلات", + "networkError": "خطأ في الشبكة", + "syncFailed": "فشلت المزامنة", + "failedToggleSync": "فشل في تبديل المزامنة", + "importedFeedback": "تم استيراد {imported} مشكلة، تم تخطي {skipped}" + }, + "agentCost": { + "title": "تفصيل تكاليف الوكيل", + "subtitle": "تحليل استخدام الرموز والإنفاق لكل وكيل", + "loadingAgentCosts": "جارٍ تحميل تكاليف الوكلاء", + "viewOverview": "نظرة عامة", + "viewPerAgentDB": "لكل وكيل (قاعدة البيانات)", + "timeframeHour": "ساعة", + "timeframeDay": "يوم", + "timeframeWeek": "أسبوع", + "timeframeMonth": "شهر", + "noAgentCostData": "لا تتوفر بيانات تكاليف الوكلاء", + "noAgentCostSubtitle": "ستظهر بيانات التكاليف بمجرد أن يبدأ الوكلاء في استخدام الرموز", + "refresh": "تحديث", + "activeAgents": "الوكلاء النشطون", + "totalCost": "التكلفة الإجمالية ({timeframe})", + "mostExpensive": "الأكثر تكلفة", + "mostEfficient": "الأكثر كفاءة", + "taskAttributed": "منسوب للمهمة", + "unattributed": "{cost} غير منسوب", + "costDistributionByAgent": "توزيع التكاليف حسب الوكيل", + "noCostData": "لا توجد بيانات تكاليف", + "costTrends": "اتجاهات التكاليف (أفضل 5 وكلاء)", + "noTrendData": "لا توجد بيانات اتجاهات", + "costComparison": "مقارنة التكاليف", + "costEfficiency": "كفاءة التكاليف ($/1000 رمز لكل وكيل)", + "agentCostRanking": "ترتيب تكاليف الوكلاء", + "noTaskCosts": "لا توجد تكاليف منسوبة للمهام لهذا الوكيل", + "tasksTab": "المهام ({count})", + "modelsTab": "النماذج ({count})", + "sessionCount": "{count, plural, one {جلسة واحدة} two {جلستان} few {# جلسات} other {# جلسة}}", + "requestCount": "{count, plural, one {طلب واحد} two {طلبان} few {# طلبات} other {# طلب}}", + "tokens": "رموز", + "ofTotal": "{pct}% من الإجمالي", + "reqs": "{count} طلب", + "inputTokens": "رموز الإدخال", + "outputTokens": "رموز الإخراج", + "ioRatio": "نسبة الإدخال/الإخراج", + "lastActive": "آخر نشاط", + "modelBreakdown": "تفصيل النموذج", + "inSuffix": "إدخال", + "outSuffix": "إخراج", + "noPerAgentData": "لا توجد بيانات لكل وكيل في قاعدة البيانات", + "noPerAgentDataSubtitle": "ستظهر سجلات استخدام الرموز بمجرد أن يبدأ الوكلاء في إرسال النبضات", + "agentCountDB": "الوكلاء (قاعدة البيانات)", + "totalCostDays": "التكلفة الإجمالية ({days}ي)", + "totalTokens": "إجمالي الرموز", + "avgPer1kTokens": "متوسط $/1000 رمز", + "perAgentCostDB": "التكلفة لكل وكيل (قاعدة البيانات)", + "agentTokenBreakdown": "تفصيل رموز الوكلاء", + "chartCost": "التكلفة ($)" + }, + "tokenDashboard": { + "title": "لوحة الرموز والتكاليف", + "subtitle": "مراقبة استخدام الرموز والتكاليف عبر النماذج والجلسات", + "viewOverview": "نظرة عامة", + "viewSessions": "الجلسات", + "timeframeHour": "ساعة", + "timeframeDay": "يوم", + "timeframeWeek": "أسبوع", + "timeframeMonth": "شهر", + "filtersLabel": "الفلاتر:", + "clearAll": "مسح الكل", + "timezoneLabel": "المنطقة الزمنية:", + "sortByLabel": "ترتيب حسب:", + "noSessionCostData": "لا توجد بيانات تكاليف جلسات", + "noSessionCostSubtitle": "ستظهر التفاصيل على مستوى الجلسة بمجرد تسجيل الاستخدام.", + "sessionActive": "نشطة", + "sessionInactive": "غير نشطة", + "requests": "طلبات", + "inSuffix": "إدخال", + "outSuffix": "إخراج", + "avgPerRequest": "متوسط/طلب", + "loadingUsageData": "جارٍ تحميل بيانات الاستخدام", + "totalTokens": "إجمالي الرموز ({timeframe})", + "totalCost": "التكلفة الإجمالية ({timeframe})", + "apiRequests": "طلبات API", + "avgTokensPerRequest": "متوسط الرموز/الطلب", + "cacheReadTokens": "رموز قراءة الذاكرة المؤقتة", + "cacheWriteTokens": "رموز كتابة الذاكرة المؤقتة", + "usageTrends": "اتجاهات الاستخدام ({timeframe})", + "peakLabel": "الذروة:", + "perTurnButton": "لكل دور", + "cumulativeButton": "تراكمي", + "noTrendData": "لا توجد بيانات اتجاهات لهذه الفترة", + "chartTokens": "الرموز", + "chartRequests": "الطلبات", + "tokenUsageByModel": "استخدام الرموز حسب النموذج", + "noModelUsageData": "لا توجد بيانات استخدام نماذج بعد", + "costDistributionByModel": "توزيع التكاليف حسب النموذج", + "noCostData": "لا توجد بيانات تكاليف بعد", + "costByProvider": "التكاليف حسب المزود", + "noProviderData": "لا توجد بيانات مزودين بعد", + "exportData": "تصدير البيانات", + "exportCsvFiltered": "تصدير CSV (مُصفَّى)", + "exportCsvFull": "تصدير CSV (كامل)", + "exportJson": "تصدير JSON", + "exporting": "جارٍ التصدير...", + "exportDescription": "تصدير بيانات استخدام الرموز للتحليل. \"مُصفَّى\" يصدر البيانات المعروضة حالياً فقط؛ \"كامل\" يصدر جميع السجلات من الخادم.", + "performanceInsights": "رؤى الأداء", + "mostEfficientModel": "النموذج الأكثر كفاءة", + "mostUsedModel": "النموذج الأكثر استخداماً", + "optimizationPotential": "إمكانية التحسين", + "savingsPossible": "توفير محتمل {pct}%", + "modelEfficiencyComparison": "مقارنة كفاءة النماذج", + "modelPerformance": "أداء النماذج", + "topSessionsByCost": "أعلى الجلسات تكلفةً", + "requestsLabel": "الطلبات", + "avgCost": "متوسط التكلفة", + "avgTokens": "متوسط الرموز", + "noUsageData": "لا تتوفر بيانات استخدام", + "noUsageDataSubtitle": "سيظهر استخدام الرموز هنا بمجرد بدء تشغيل الوكلاء", + "refresh": "تحديث" + }, + "memoryBrowser": { + "hideSidebar": "إخفاء الشريط الجانبي", + "showSidebar": "إظهار الشريط الجانبي", + "fileCountSize": "{count} ملفات / {size}", + "indexing": "جارٍ الفهرسة…", + "newFile": "+ جديد", + "searchPlaceholder": "البحث في الملفات...", + "searchResults": "{count} نتيجة", + "noFiles": "لا توجد ملفات", + "refresh": "تحديث", + "toggleBacklinks": "تبديل لوحة الروابط العكسية", + "links": "روابط", + "edit": "تعديل", + "delete": "حذف", + "save": "حفظ", + "saving": "جارٍ الحفظ...", + "cancel": "إلغاء", + "selectFilePrompt": "اختر ملفًا للعرض", + "orSwitchView": "أو التبديل إلى عرض الصحة / المسار", + "schemaWarnings": "تحذيرات المخطط:", + "editPlaceholder": "تعديل محتوى الملف...", + "loadingHermes": "جارٍ تحميل ذاكرة Hermes", + "noHermesData": "لا توجد بيانات ذاكرة Hermes", + "hermesMemoryTitle": "ذاكرة Hermes", + "hermesMemoryDesc": "عرض للقراءة فقط لملفات الذاكرة الدائمة لوكيل Hermes", + "noAgentMemory": "لم يُعثر على ملف ذاكرة الوكيل", + "noUserMemory": "لم يُعثر على ملف ذاكرة المستخدم", + "runningDiagnostics": "جارٍ تشغيل التشخيصات", + "noHealthData": "لا توجد بيانات صحة", + "runDiagnostics": "تشغيل التشخيصات", + "healthCategories": "8 فئات / {time}", + "pipelineTitle": "مسار المعالجة", + "pipelineDesc": "عمليات صيانة المعرفة مستوحاة من 6 Rs في Ars Contexta", + "pipelineReflect": "انعكاس", + "pipelineReflectDesc": "البحث عن فرص الربط بين الملفات", + "pipelineReweave": "إعادة النسج", + "pipelineReweaveDesc": "البحث عن الملفات القديمة التي تحتاج تحديثات من ملفات أحدث", + "pipelineGenerateMoc": "إنشاء MOC", + "pipelineGenerateMocDesc": "إنشاء خرائط المحتوى تلقائيًا من مجموعات الملفات", + "processing": "جارٍ المعالجة", + "filesProcessed": "تمت معالجة {count} ملفات", + "noSuggestions": "لا توجد اقتراحات — قاعدة المعرفة مترابطة بشكل جيد", + "mapsOfContent": "خرائط المحتوى ({count} مجموعات)", + "newFileTitle": "ملف جديد", + "directory": "المجلد", + "fileName": "الاسم", + "fileType": "النوع", + "content": "المحتوى", + "contentOptional": "اختياري...", + "create": "إنشاء", + "deleteFileTitle": "حذف الملف", + "permanentlyDelete": "حذف نهائي:", + "outgoing": "صادر ({count})", + "backlinks": "روابط عكسية ({count})", + "wikiLinks": "روابط ويكي ({count})" + }, + "userManagement": { + "adminAccessRequired": "يلزم وصول المسؤول", + "failedToLoadUsers": "فشل تحميل المستخدمين", + "failedToCreate": "فشل إنشاء المستخدم", + "networkError": "خطأ في الشبكة", + "userUpdated": "تم تحديث المستخدم", + "failedToUpdate": "فشل التحديث", + "deletedUser": "تم حذف المستخدم \"{username}\"", + "failedToDelete": "فشل الحذف", + "failedToAction": "فشل {action} الطلب", + "requestActioned": "تم {action} الطلب لـ {email}", + "user": "مستخدم", + "accessDenied": "تم رفض الوصول", + "adminRequired": "تتطلب إدارة المستخدمين صلاحيات المسؤول.", + "loadingUsers": "جارٍ تحميل المستخدمين...", + "usersTitle": "المستخدمون", + "usersSummary": "{count} مستخدم مسجل · {pending} في انتظار الموافقة", + "addLocalUser": "+ إضافة مستخدم محلي", + "cancel": "إلغاء", + "pendingRequests": "{count, plural, one {# طلب وصول معلق} other {# طلبات وصول معلقة}}", + "identity": "الهوية", + "attempts": "المحاولات", + "lastAttempt": "آخر محاولة", + "action": "الإجراء", + "roleViewer": "مشاهد", + "roleOperator": "مشغّل", + "roleAdmin": "مسؤول", + "noteOptional": "ملاحظة (اختياري)", + "confirm": "تأكيد", + "reject": "رفض", + "review": "مراجعة", + "newLocalUser": "مستخدم محلي جديد", + "username": "اسم المستخدم", + "password": "كلمة المرور", + "displayName": "الاسم المعروض", + "creating": "جارٍ الإنشاء...", + "createUser": "إنشاء مستخدم", + "colUser": "المستخدم", + "colProvider": "الموفر", + "colRole": "الدور", + "colLastLogin": "آخر تسجيل دخول", + "colActions": "الإجراءات", + "newPasswordOptional": "كلمة مرور جديدة (اختياري)", + "save": "حفظ", + "edit": "تعديل", + "delete": "حذف", + "never": "أبدًا", + "createdUser": "تم إنشاء المستخدم \"{username}\"" + }, + "alertRules": { + "title": "قواعد التنبيه", + "description": "تكوين تنبيهات تلقائية لأحداث الوكلاء والمهام والنظام", + "evaluating": "جارٍ التقييم...", + "evaluateNow": "تقييم الآن", + "newRule": "+ قاعدة جديدة", + "statTotalRules": "إجمالي القواعد", + "statActive": "نشطة", + "statTotalTriggers": "إجمالي التشغيلات", + "evalResultsTitle": "نتائج التقييم", + "dismiss": "إغلاق", + "triggered": "تم التشغيل", + "noRulesToEvaluate": "لا توجد قواعد للتقييم", + "loadingRules": "جارٍ تحميل القواعد...", + "noRulesConfigured": "لم يتم تكوين قواعد تنبيه", + "createRuleHint": "أنشئ قاعدة لتلقي إشعارات أحداث النظام", + "never": "أبدًا", + "cooldown": "فترة التهدئة: {minutes} د", + "triggerCount": "التشغيلات: {count}x", + "lastTriggered": "الأخيرة: {time}", + "deleteRule": "حذف القاعدة", + "newRuleTitle": "قاعدة تنبيه جديدة", + "ruleName": "اسم القاعدة", + "ruleNamePlaceholder": "مثال: تنبيه وكيل غير متصل", + "ruleDescription": "الوصف", + "optionalDescription": "وصف اختياري", + "entity": "الكيان", + "entityAgent": "وكيل", + "entityTask": "مهمة", + "entitySession": "جلسة", + "entityActivity": "نشاط", + "field": "الحقل", + "operator": "المشغّل", + "value": "القيمة", + "valuePlaceholder": "مثال: error", + "cooldownMinutes": "فترة التهدئة (دقائق)", + "notifyRecipient": "إشعار (المستلم)", + "cancel": "إلغاء", + "creating": "جارٍ الإنشاء...", + "createRule": "إنشاء القاعدة", + "failedToCreate": "فشل إنشاء القاعدة", + "networkError": "خطأ في الشبكة" + }, + "agentSquad": { + "failedToFetch": "فشل جلب الوكلاء", + "errorOccurred": "حدث خطأ", + "failedToUpdateStatus": "فشل تحديث حالة الوكيل", + "loadingAgents": "جارٍ تحميل الوكلاء", + "title": "فريق الوكلاء", + "live": "مباشر", + "manual": "يدوي", + "addAgent": "+ إضافة وكيل", + "refresh": "تحديث", + "noAgents": "لم يُعثر على وكلاء", + "addFirstAgent": "أضف وكيلك الأول للبدء", + "session": "الجلسة", + "totalTasks": "إجمالي المهام", + "inProgress": "قيد التنفيذ", + "lastSeen": "آخر ظهور", + "activity": "النشاط", + "wake": "إيقاظ", + "busy": "مشغول", + "sleep": "نوم", + "statusControl": "التحكم في الحالة", + "role": "الدور", + "sessionKey": "مفتاح الجلسة", + "notSet": "غير محدد", + "soulContent": "محتوى SOUL", + "soulPlaceholder": "شخصية الوكيل وتعليماته...", + "taskStatistics": "إحصائيات المهام", + "total": "الإجمالي", + "assigned": "مُعيَّنة", + "done": "مكتملة", + "created": "تم الإنشاء", + "lastUpdated": "آخر تحديث", + "saveChanges": "حفظ التغييرات", + "cancel": "إلغاء", + "editAgent": "تعديل الوكيل", + "createNewAgent": "إنشاء وكيل جديد", + "name": "الاسم", + "rolePlaceholder": "مثال: باحث، مطور، محلل", + "sessionKeyOptional": "مفتاح الجلسة (اختياري)", + "sessionKeyPlaceholder": "معرّف جلسة ClawdBot", + "soulContentOptional": "محتوى SOUL (اختياري)", + "createAgent": "إنشاء وكيل", + "failedToUpdate": "فشل تحديث الوكيل", + "failedToCreate": "فشل إنشاء الوكيل", + "never": "أبدًا", + "justNow": "الآن", + "minutesAgo": "منذ {count} د", + "hoursAgo": "منذ {count} س", + "daysAgo": "منذ {count} ي" + }, + "multiGateway": { + "title": "مدير البوابات", + "description": "إدارة اتصالات بوابات OpenClaw المتعددة", + "probeAll": "فحص الكل", + "addGateway": "+ إضافة بوابة", + "connected": "متصل", + "disconnected": "غير متصل", + "noActiveConnection": "لا يوجد اتصال نشط", + "loadingGateways": "جارٍ تحميل البوابات...", + "noGateways": "لم يتم تكوين بوابات", + "addGatewayHint": "أضف بوابة لبدء إدارة الاتصالات", + "discoveredGateways": "البوابات المكتشفة", + "discoveredGatewaysDesc": "بوابات OpenClaw الموجودة على هذا الجهاز", + "refresh": "تحديث", + "running": "تعمل", + "stopped": "متوقفة", + "bind": "ربط", + "mode": "الوضع", + "register": "تسجيل", + "directCliConnections": "اتصالات CLI المباشرة", + "directCliDesc": "أدوات CLI المتصلة مباشرة بدون بوابة", + "noDirectConnections": "لا توجد اتصالات CLI مباشرة", + "useApiConnect": "استخدم", + "toRegisterCli": "لتسجيل أداة CLI", + "role": "الدور", + "heartbeat": "نبضة القلب", + "never": "أبدًا", + "disconnect": "قطع الاتصال", + "neverProbed": "لم يُفحص أبدًا", + "primary": "الأساسية", + "connectedBadge": "متصل", + "token": "الرمز المميز", + "tokenSet": "محدد", + "tokenNone": "لا يوجد", + "latency": "زمن الاستجابة", + "last": "الأخير", + "gatewayVersion": "إصدار البوابة", + "noHistory": "لا يوجد سجل بعد", + "colorKey": "مفتاح الألوان", + "colorKeyTitle": "أخضر = متصل؛ كهرماني = خطأ؛ أحمر = غير متصل", + "lastLatency": "آخر زمن استجابة: {ms}ms", + "probeGateway": "فحص البوابة", + "probing": "جارٍ الفحص...", + "probe": "فحص", + "connectToGateway": "الاتصال بهذه البوابة", + "connect": "اتصال", + "setPrimaryTitle": "تعيين كأساسية", + "setPrimary": "تعيين كأساسية", + "removeGateway": "إزالة البوابة", + "addGatewayTitle": "إضافة بوابة", + "name": "الاسم", + "namePlaceholder": "مثال: primary", + "host": "المضيف", + "port": "المنفذ", + "tokenField": "الرمز المميز", + "optional": "اختياري", + "cancel": "إلغاء", + "adding": "جارٍ الإضافة...", + "addGatewaySubmit": "إضافة البوابة", + "failedToAdd": "فشل إضافة البوابة", + "networkError": "خطأ في الشبكة" + }, + "nodes": { + "title": "العقد / المثيلات", + "gatewayConnected": "البوابة متصلة", + "gatewayUnreachable": "البوابة غير متاحة", + "tabInstances": "المثيلات ({count})", + "tabDevices": "الأجهزة ({count})", + "loading": "جارٍ التحميل...", + "noInstances": "لا توجد مثيلات نشطة. تظهر العقد هنا عند اتصالها بالبوابة.", + "colName": "الاسم", + "colClientId": "معرف العميل", + "colPlatform": "المنصة", + "colVersion": "الإصدار", + "colRoles": "الأدوار", + "colStatus": "الحالة", + "colConnected": "متصل", + "colLastActivity": "آخر نشاط", + "colHostIp": "المضيف / IP", + "colDeviceId": "معرف الجهاز", + "colPaired": "مقترن", + "colLastSeen": "آخر ظهور", + "colTrust": "الثقة", + "colActions": "الإجراءات", + "pendingPairingRequests": "طلبات الاقتران المعلقة ({count})", + "approve": "موافقة", + "approving": "جارٍ الموافقة...", + "reject": "رفض", + "rejecting": "جارٍ الرفض...", + "noPairedDevices": "لا توجد أجهزة مقترنة.", + "pairedDevices": "الأجهزة المقترنة ({count})", + "trusted": "موثوق", + "untrusted": "غير موثوق", + "rotateToken": "تدوير الرمز المميز", + "revokeConfirm": "إلغاء؟", + "yes": "نعم", + "no": "لا", + "revoke": "إلغاء", + "hideTokens": "إخفاء الرموز المميزة", + "tokens": "الرموز المميزة ({count})", + "tokenUsed": "استُخدم {time}", + "revoked": "ملغى", + "rotate": "تدوير" + }, + "activityFeed": { + "title": "النشاط", + "live": "مباشر", + "paused": "متوقف", + "refresh": "تحديث", + "filterAgent": "العميل", + "filterAll": "الكل", + "filterType": "النوع", + "allTypes": "جميع الأنواع", + "filterLimit": "الحد", + "loadingActivities": "جارٍ تحميل الأنشطة", + "noActivities": "لم يتم العثور على أنشطة", + "noActivityForAgent": "لم يتم تسجيل نشاط لـ {agent}", + "tryAdjustingFilters": "جرب تعديل الفلاتر", + "entityTask": "المهمة:", + "entityCommentOn": "تعليق على:", + "entityAgent": "العميل:", + "showDetails": "عرض التفاصيل", + "activeSessions": "الجلسات النشطة", + "agentStatus": "الحالة", + "lastSeen": "آخر ظهور", + "lastAction": "آخر إجراء", + "tasksAssigned": "المهام المُسندة", + "inProgress": "قيد التنفيذ", + "completed": "مكتمل", + "events": "{count} أحداث", + "newer": "أحدث", + "older": "أقدم", + "pageOf": "صفحة {page} من {total}", + "footerAgentEvents": "{total} حدث لـ {agent}", + "footerShowing": "عرض {count} أنشطة{filtered}", + "filtered": " (مُصفَّى)", + "lastUpdated": "آخر تحديث: {time}" + }, + "standup": { + "title": "الاجتماع اليومي", + "viewCurrent": "الحالي", + "viewHistory": "السجل", + "generating": "جارٍ التوليد...", + "generate": "توليد", + "export": "تصدير", + "standupFor": "الاجتماع اليومي ليوم {date}", + "generatedOn": "تم التوليد في {date}", + "statCompleted": "مكتمل", + "statInProgress": "قيد التنفيذ", + "statBlocked": "محجوب", + "statOverdue": "متأخر", + "teamAccomplishments": "إنجازات الفريق", + "teamBlockers": "عوائق الفريق", + "overdueTasks": "المهام المتأخرة", + "unassigned": "غير مُسند", + "individualReports": "التقارير الفردية", + "activitySummary": "النشاط: {actions} إجراءات، {comments} تعليقات", + "sectionCompleted": "مكتمل ({count})", + "sectionInProgress": "قيد التنفيذ ({count})", + "sectionAssigned": "مُسند ({count})", + "sectionBlocked": "محجوب ({count})", + "none": "لا شيء", + "noStandupGenerated": "لم يتم توليد اجتماع يومي", + "selectDatePrompt": "اختر تاريخاً وأنشئ تقريراً", + "generateToday": "توليد اجتماع اليوم", + "noHistory": "لم يتم العثور على سجل للاجتماعات", + "historyGenerated": "تم التوليد: {date}", + "historyAgentsParticipated": "شارك {count} عملاء", + "historyCompleted": "مكتمل: {count}", + "historyInProgress": "قيد التنفيذ: {count}", + "historyBlocked": "محجوب: {count}" + }, + "webhooks": { + "title": "Webhooks", + "configured": "تم تكوين {count} Webhook", + "addWebhook": "+ إضافة Webhook", + "secretLabel": "سر Webhook (احفظه الآن - يُعرض مرة واحدة فقط)", + "dismiss": "إغلاق", + "testSuccessful": "نجح الاختبار", + "testFailed": "فشل الاختبار", + "testStatus": "الحالة:", + "testDuration": "المدة:", + "testError": "الخطأ:", + "localAutomations": "أتمتة Webhook المحلية", + "localAutomationsDesc": "مهام الجدولة المحلية التي تدعم تسليم Webhook وإعادة المحاولة", + "nextRun": "التشغيل التالي {time}", + "noNextRun": "لا يوجد تشغيل تالٍ مجدول", + "running": "جارٍ التشغيل...", + "run": "تشغيل", + "noWebhooks": "لا توجد Webhooks مُكوَّنة", + "noWebhooksDesc": "أضف Webhook لتلقي إشعارات HTTP للأحداث", + "allEvents": "جميع الأحداث", + "eventCount": "{count} أحداث", + "deliveries": "{count} تسليمات", + "failed": "{count} فاشل", + "lastFired": "آخر تفعيل {time}", + "sendTestEvent": "إرسال حدث اختباري", + "testing": "جارٍ الاختبار...", + "test": "اختبار", + "disable": "تعطيل", + "enable": "تمكين", + "delete": "حذف", + "recentDeliveries": "التسليمات الأخيرة", + "noDeliveries": "لا توجد تسليمات مسجلة بعد", + "newWebhook": "Webhook جديد", + "formName": "الاسم", + "formUrl": "URL", + "formEvents": "الأحداث", + "cancel": "إلغاء", + "createWebhook": "إنشاء Webhook" + }, + "skills": { + "title": "مركز المهارات", + "subtitle": "إدارة المهارات محلياً واستعراض السجلات الخارجية.", + "localMode": "الوضع المحلي", + "gatewayMode": "وضع البوابة", + "tabInstalled": "مُثبَّت", + "tabRegistry": "السجل", + "searchPlaceholder": "بحث سريع في المهارات المثبتة...", + "searchResults": "عرض {count} من {total} مهارة تطابق \"{query}\"", + "diskSyncActive": "مزامنة القرص ثنائية الاتجاه نشطة (الجدولة كل 60 ثانية)", + "scanAll": "فحص الكل", + "scanningProgress": "جارٍ الفحص {done}/{total}...", + "refreshNow": "تحديث الآن", + "scanning": "جارٍ الفحص:", + "skillsScanned": "تم فحص {count} مهارة", + "dismiss": "إغلاق", + "addSkill": "إضافة مهارة", + "initialContent": "المحتوى الأولي لـ SKILL.md", + "loadingSkills": "جارٍ تحميل المهارات...", + "skillCount": "{count} من {total} مهارة", + "noMatch": "لا توجد مهارات تطابق هذا الفلتر.", + "scan": "فحص", + "view": "عرض", + "registrySearchPlaceholder": "البحث عن المهارات...", + "searching": "جارٍ البحث...", + "search": "بحث", + "installTo": "التثبيت في:", + "installing": "جارٍ التثبيت...", + "install": "تثبيت", + "noRegistryResults": "لم يتم العثور على نتائج لـ \"{query}\" في {registry}. جرب استعلاماً مختلفاً أو بدّل السجل.", + "registryPrompt": "ابحث في ClawdHub أو skills.sh أو Awesome OpenClaw لاكتشاف مهارات العملاء وتثبيتها.", + "skillInstalled": "تم تثبيت المهارة", + "installFailed": "فشل التثبيت", + "installingSkill": "جارٍ تثبيت المهارة", + "stepFetching": "جلب SKILL.md من السجل", + "stepScanning": "تشغيل فحص الأمان", + "stepWriting": "الكتابة على القرص والتسجيل", + "security": "الأمان", + "viewInstalled": "عرض المثبتة", + "done": "تم", + "close": "إغلاق", + "delete": "حذف", + "save": "حفظ", + "loadingSkillContent": "جارٍ تحميل SKILL.md...", + "noContent": "لا يوجد محتوى." + }, + "orchestration": { + "tabCommand": "الأوامر", + "tabWorkflows": "سير العمل", + "tabPipelines": "خطوط الأنابيب", + "tabFleet": "الأسطول", + "selectAgent": "اختر عميلاً...", + "commandPlaceholder": "إرسال أمر أو رسالة للعميل...", + "send": "إرسال", + "noTemplates": "لا توجد قوالب لسير العمل بعد", + "createFirstTemplate": "إنشاء أول قالب", + "cancel": "إلغاء", + "new": "+ جديد", + "editTemplate": "تعديل القالب", + "newTemplate": "قالب جديد", + "templateName": "اسم القالب", + "templateDescription": "الوصف (اختياري)", + "taskPromptPlaceholder": "موجه المهمة للعميل...", + "timeout": "المهلة", + "role": "الدور", + "lastRun": "آخر تشغيل", + "update": "تحديث", + "save": "حفظ", + "totalAgents": "إجمالي العملاء", + "online": "متصل", + "busy": "مشغول", + "errors": "أخطاء" + } +} diff --git a/messages/de.json b/messages/de.json new file mode 100644 index 0000000000000000000000000000000000000000..3feae579d6186d893206f039474401aefb03d2a3 --- /dev/null +++ b/messages/de.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "Speichern", + "cancel": "Abbrechen", + "loading": "Wird geladen...", + "error": "Fehler", + "search": "Suchen", + "confirm": "Bestätigen", + "delete": "Löschen", + "edit": "Bearbeiten", + "close": "Schließen", + "back": "Zurück", + "next": "Weiter", + "retry": "Erneut versuchen", + "or": "oder", + "optional": "optional", + "language": "Sprache", + "dismiss": "Verwerfen", + "continue": "Fortfahren", + "selected": "Ausgewählt", + "detected": "Erkannt", + "now": "jetzt", + "tryAgain": "Erneut versuchen", + "skipToMainContent": "Zum Hauptinhalt springen", + "builtWithCareBy": "Mit Sorgfalt entwickelt von", + "viewRelease": "Version anzeigen", + "updateNow": "Jetzt aktualisieren", + "showDetails": "Details anzeigen", + "hideDetails": "Details ausblenden", + "moreIssues": "+ {count} {count, plural, one {weiteres Problem} other {weitere Probleme}}" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "Melden Sie sich an, um fortzufahren", + "username": "Benutzername", + "password": "Passwort", + "signIn": "Anmelden", + "signingIn": "Anmeldung läuft...", + "signInWithGoogle": "Mit Google anmelden", + "loadingGoogleSignIn": "Google-Anmeldung wird geladen...", + "googleSignInFailed": "Google-Anmeldung fehlgeschlagen", + "networkError": "Netzwerkfehler", + "loginFailed": "Anmeldung fehlgeschlagen", + "enterUsername": "Benutzername eingeben", + "enterPassword": "Passwort eingeben", + "orchestrationTagline": "OpenClaw Agenten-Orchestrierung", + "accessRequestSubmitted": "Zugriffsanfrage gesendet", + "accessRequestDescription": "Ihre Anfrage wurde zur Überprüfung an einen Administrator gesendet. Nach der Genehmigung können Sie sich anmelden.", + "tryAgain": "Erneut versuchen", + "noAdminAccount": "Noch kein Administratorkonto erstellt", + "noAdminDescription": "Richten Sie Ihr Administratorkonto ein, um mit Mission Control zu beginnen.", + "createAdminAccount": "Administratorkonto erstellen", + "welcomeToMC": "Willkommen bei Mission Control", + "settingUpMC": "Mission Control wird eingerichtet", + "createAdminToStart": "Erstellen Sie Ihr Administratorkonto, um zu beginnen", + "creatingAdmin": "Ihr Administratorkonto wird erstellt...", + "displayName": "Anzeigename", + "confirmPassword": "Passwort bestätigen", + "atLeast12Chars": "Mindestens 12 Zeichen", + "repeatPassword": "Passwort wiederholen", + "passwordsDoNotMatch": "Passwörter stimmen nicht überein", + "passwordTooShort": "Das Passwort muss mindestens 12 Zeichen lang sein", + "moreCharsNeeded": "Noch {count} {count, plural, one {Zeichen} other {Zeichen}} erforderlich", + "firstTimeSetupOnly": "Diese Seite ist nur bei der Ersteinrichtung verfügbar.", + "checkingSetupStatus": "Einrichtungsstatus wird überprüft...", + "setupFailed": "Einrichtung fehlgeschlagen", + "failedToCheckSetup": "Einrichtungsstatus konnte nicht überprüft werden", + "validatingCredentials": "Anmeldedaten werden überprüft", + "creatingAdminAccount": "Administratorkonto wird erstellt", + "configuringSession": "Sitzung wird konfiguriert", + "launchingDashboard": "Dashboard wird gestartet", + "usernameHint": "Nur Kleinbuchstaben, Zahlen, Punkte, Bindestriche und Unterstriche" + }, + "nav": { + "overview": "Übersicht", + "agents": "Agenten", + "tasks": "Aufgaben", + "chat": "Chat", + "channels": "Kanäle", + "skills": "Fähigkeiten", + "memory": "Speicher", + "activity": "Aktivität", + "logs": "Protokolle", + "costTracker": "Kostenverfolgung", + "nodes": "Knoten", + "approvals": "Genehmigungen", + "office": "Büro", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "Warnungen", + "github": "GitHub", + "security": "Sicherheit", + "users": "Benutzer", + "audit": "Audit", + "gateway": "Gateway", + "gateways": "Gateways", + "config": "Konfiguration", + "integrations": "Integrationen", + "debug": "Fehlersuche", + "settings": "Einstellungen", + "group": { + "observe": "ÜBERWACHEN", + "automate": "AUTOMATISIEREN", + "admin": "ADMIN" + }, + "collapseSidebar": "Seitenleiste einklappen", + "expandSidebar": "Seitenleiste ausklappen", + "more": "Mehr" + }, + "settings": { + "language": "Sprache", + "languageDescription": "Wählen Sie Ihre bevorzugte Anzeigesprache", + "general": "Allgemein", + "security": "Sicherheit", + "dataRetention": "Datenaufbewahrung", + "chatSettings": "Chat", + "gatewaySettings": "Gateway", + "title": "Einstellungen", + "description": "Mission-Control-Verhalten und Aufbewahrungsrichtlinien konfigurieren", + "discard": "Verwerfen", + "save": "Speichern", + "saving": "Wird gespeichert...", + "saveChanges": "Änderungen speichern", + "workspaceManagementLabel": "Arbeitsbereichsverwaltung:", + "workspaceManagementDesc1": "Um Arbeitsbereiche (Mandanteninstanzen) zu erstellen oder zu verwalten, gehen Sie zum", + "superAdmin": "Super-Admin", + "workspaceManagementDesc2": "Panel unter Admin > Super-Admin in der Seitenleiste. Von dort können Sie neue Client-Instanzen erstellen, Mandanten verwalten und Bereitstellungsaufgaben überwachen.", + "securityDescription": "Sicherheitslage Ihrer Station scannen", + "securityScan": "Sicherheitsscan", + "hideScan": "Scan ausblenden", + "backups": "Sicherungen", + "backupsDescription": "Erstellen Sie On-Demand-Sicherungen der MC-Datenbank oder des Gateway-Zustands", + "backupMcDatabase": "MC-Datenbank sichern", + "backupGatewayState": "Gateway-Zustand sichern", + "backingUp": "Sicherung wird erstellt...", + "onboarding": "Einarbeitung", + "onboardingDescription": "Richten Sie den Setup-Assistenten erneut aus und setzen Sie die Dashboard-Checkliste zurück", + "replayOnboarding": "Einarbeitung wiederholen", + "resetting": "Wird zurückgesetzt..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "Agenten-Orchestrierung", + "authenticatingOperator": "Operator wird authentifiziert", + "detectingStationMode": "Stationsmodus wird erkannt", + "loadingControlConfig": "Steuerungskonfiguration wird geladen", + "connectingRuntimeLinks": "Laufzeitverbindungen werden hergestellt", + "syncingAgentRegistry": "Agentenregister wird synchronisiert", + "loadingActiveSessions": "Aktive Sitzungen werden geladen", + "hydratingWorkspaceBoard": "Arbeitsbereich wird initialisiert", + "mappingMemoryGraph": "Speichergraph wird kartiert", + "indexingSkillCatalog": "Fähigkeitenkatalog wird indexiert" + }, + "header": { + "workspace": "Arbeitsbereich", + "sessions": "Sitzungen", + "events": "Ereignisse", + "live": "Live", + "off": "Aus", + "local": "Lokal", + "connected": "Verbunden", + "disconnected": "Getrennt", + "reconnecting": "Wiederverbindung", + "offline": "Offline", + "retry": "Versuch {count}", + "jumpToSearch": "Zu Seite, Aufgabe, Agent springen...", + "searchPlaceholder": "Aufgaben, Agenten, Aktivität suchen oder Seitenbefehl eingeben...", + "searching": "Suche...", + "noResults": "Keine Ergebnisse gefunden", + "typeToSearch": "Tippen Sie, um Entitäten zu suchen oder sofort zu Seiten zu springen", + "gatewayConnection": "Gateway-Verbindung", + "status": "Status", + "host": "Host", + "latency": "Latenz", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "Versuche", + "clickToReconnect": "Klicken zum Wiederverbinden", + "down": "Nicht erreichbar", + "goToOverview": "Zur Übersicht", + "goToChat": "Zum Chat", + "goToTasks": "Zu den Aufgaben", + "goToAgents": "Zu den Agenten", + "goToActivityFeed": "Zum Aktivitätsfeed", + "goToNotifications": "Zu den Benachrichtigungen", + "goToTokenUsage": "Zur Token-Nutzung", + "goToLogs": "Zu den Protokollen", + "goToMemoryBrowser": "Zum Speicher-Browser", + "goToIntegrations": "Zu den Integrationen", + "goToSettings": "Zu den Einstellungen", + "goToGateways": "Zu den Gateways", + "goToGithubSync": "Zur GitHub-Synchronisierung", + "goToOffice": "Zum Büro", + "goToSkills": "Zu den Fähigkeiten", + "quickNavigation": "Schnellnavigation" + }, + "contextSwitcher": { + "localMode": "Lokaler Modus", + "connected": "Verbunden", + "disconnected": "Getrennt", + "interface": "Oberfläche", + "essential": "Essenziell", + "full": "Vollständig", + "organizations": "ORGANISATIONEN", + "all": "Alle", + "noTools": "keine Tools", + "unlinked": "nicht verknüpft", + "newOrganization": "Neue Organisation...", + "usernamePlaceholder": "Benutzername (OS-Benutzer)", + "displayNamePlaceholder": "Anzeigename", + "gatewayPortPlaceholder": "Gateway-Port (erforderlich)", + "installTools": "TOOLS INSTALLIEREN", + "usernameAndDisplayRequired": "Benutzername und Anzeigename sind erforderlich", + "invalidUsernameFormat": "Ungültiges Benutzernamenformat", + "gatewayPortRequired": "Gateway-Port ist erforderlich", + "creating": "Wird erstellt...", + "createUser": "Benutzer erstellen", + "createAndQueue": "Erstellen + Einreihen" + }, + "localModeBanner": { + "noGatewayDetected": "Kein OpenClaw-Gateway erkannt", + "runningInLocalMode": " — läuft im lokalen Modus. Überwachung von Claude Code Sitzungen, Aufgaben und lokalen Daten.", + "configureGateway": "Gateway konfigurieren" + }, + "updateBanner": { + "updating": "Aktualisierung...", + "restartingServer": "Server wird neu gestartet...", + "updateAvailable": "Update verfügbar: v{version}", + "newerVersionAvailable": " — eine neuere Version von Mission Control ist verfügbar.", + "updateFailed": "Aktualisierung fehlgeschlagen", + "networkError": "Netzwerkfehler — Server konnte nicht erreicht werden." + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "OpenClaw wird aktualisiert...", + "openclawUpdated": "OpenClaw auf v{version} aktualisiert", + "openclawUpdateAvailable": "OpenClaw-Update: v{version} verfügbar", + "installed": "installiert: v{version}", + "changelog": "Änderungsprotokoll", + "copied": "Kopiert!", + "copyCommand": "Befehl kopieren", + "updateFailed": "Aktualisierung fehlgeschlagen", + "networkError": "Netzwerkfehler — Server konnte nicht erreicht werden." + }, + "doctorBanner": { + "fixCompleted": "OpenClaw-Doktor-Reparatur abgeschlossen", + "configDrift": "OpenClaw-Konfigurationsabweichung erkannt", + "stateIntegrity": "OpenClaw-Zustandsintegritätswarnung", + "securityWarning": "OpenClaw-Sicherheitswarnung", + "doctorWarnings": "OpenClaw-Doktor-Warnungen", + "runningFixes": "OpenClaw-Doktor-Reparaturen werden ausgeführt...", + "cleaningSessionStores": "Sitzungsspeicher werden bereinigt...", + "archivingOrphanTranscripts": "Verwaiste Transkripte werden archiviert...", + "recheckingHealth": "Aktuelle Instanzgesundheit wird erneut überprüft...", + "fixFailed": "OpenClaw-Doktor-Reparatur fehlgeschlagen", + "networkError": "Netzwerkfehler — Server konnte nicht erreicht werden.", + "runningFix": "Reparatur wird ausgeführt...", + "runDoctorFix": "Doktor-Reparatur ausführen" + }, + "liveFeed": { + "liveFeed": "Live-Feed", + "showLiveFeed": "Live-Feed anzeigen", + "collapseFeed": "Feed einklappen", + "closeFeed": "Feed schließen", + "noActivityYet": "Noch keine Aktivität", + "eventsAppearLocal": "Ereignisse erscheinen, wenn Sie Aufgaben erstellen oder Agenten aktualisiert werden", + "eventsStreamGateway": "Ereignisse werden hier vom Gateway und der lokalen Datenbank gestreamt", + "activeSessions": "Aktive Sitzungen", + "noActiveSessions": "Keine aktiven Sitzungen", + "activeSession": "Aktiv", + "idleSession": "Inaktiv" + }, + "errorBoundary": { + "somethingWentWrong": "Etwas ist schiefgelaufen", + "unexpectedError": "In diesem Panel ist ein unerwarteter Fehler aufgetreten." + }, + "page": { + "showLiveFeed": "Live-Feed anzeigen", + "availableInFullMode": "{panel} ist im vollständigen Modus verfügbar.", + "switchToFull": "Zum vollständigen Modus wechseln", + "goToOverview": "Zur Übersicht", + "requiresGateway": "{panel} erfordert eine OpenClaw-Gateway-Verbindung.", + "configureGateway": "Konfigurieren Sie ein Gateway, um dieses Panel zu aktivieren." + }, + "onboarding": { + "stationOnline": "Station online", + "stationReady": "Ihre Station ist bereit für Agenten.", + "welcome": { + "title": "Willkommen bei Mission Control", + "description": "Ihre Station für KI-Agenten. Wenn Agenten hier andocken, erhalten sie persistenten Speicher, Aufgabenverwaltung, koordinierte Workflows und vollständige Beobachtbarkeit. Wir haben Ihr Setup gescannt — hier ist, was online ist.", + "availableModes": "Verfügbare Modi", + "localMode": "Lokaler Modus", + "gatewayMode": "Gateway-Modus", + "monitorClaude": "Claude Code Sitzungen auf diesem Rechner überwachen", + "taskTracking": "Aufgabenverfolgung und Kostenüberwachung", + "sessionHistory": "Sitzungsverlauf", + "singlePilot": "Einzelpilot-Betrieb", + "orchestrateAgents": "Mehrere Agenten über verschiedene Rechner orchestrieren", + "memorySkills": "Speicher, Fähigkeiten und Inter-Agenten-Kommunikation", + "webhookIntegrations": "Webhook-Integrationen", + "requiresGateway": "Gateway erforderlich", + "activeSessionsDetected": "{count} aktive {count, plural, one {Sitzung} other {Sitzungen}} erkannt", + "noActiveSessions": "Keine aktiven Claude-Sitzungen", + "gatewayConnected": "Gateway verbunden", + "localModeNoGateway": "Lokaler Modus — kein Gateway", + "agentsRegistered": "{count} {count, plural, one {Agent} other {Agenten}} registriert", + "noAgentsYet": "Noch keine Agenten", + "gatewayRegistered": "Gateway: Mission Control registriert", + "gatewayRegistrationPending": "Gateway-Registrierung ausstehend", + "skipSetup": "Einrichtung überspringen", + "getStarted": "Loslegen" + }, + "interfaceMode": { + "title": "Wählen Sie Ihr Stationslayout", + "description": "Essenziell zeigt die Kernpanels, die Operatoren am meisten brauchen. Vollständig schaltet alle Systeme der Station frei — Speicher, Automatisierung, Sicherheitsaudit und mehr. Sie können jederzeit wechseln.", + "essential": "Essenziell", + "full": "Vollständig", + "essentialDescription": "Optimierter Betrieb — die Panels, die Sie täglich nutzen: Flottenübersicht, Agenten, Aufgaben, Chat, Aktivitätsfeed, Protokolle und Einstellungen.", + "essentialPanels1": "Flottenübersicht, Agenten, Aufgaben, Chat", + "essentialPanels2": "Aktivitätsfeed, Protokolle, Einstellungen", + "essentialTotal": "7 Panels insgesamt", + "fullDescription": "Vollständiger Stationszugang — fügt Speicher-Browser, Cron-Planung, Webhooks, Warnungen, Sicherheitsaudit, Kostenverfolgung und Gateway-Konfiguration hinzu.", + "fullIncludes": "Alles aus Essenziell plus", + "fullPanels": "Speicher, Cron, Webhooks, Audit", + "fullTotal": "Alle Stationssysteme freigeschaltet" + }, + "gatewayLink": { + "title": "Gateway-Verbindung", + "description": "Mission Control registriert seinen Ursprung beim OpenClaw-Gateway, um sich über WebSocket zu verbinden und Agenten remote zu verwalten.", + "originRegistered": "Gateway-Ursprung registriert", + "originAdded": "Mission Control Ursprung zu Gateway allowedOrigins hinzugefügt", + "registrationPending": "Registrierung ausstehend — wird bei der nächsten Fähigkeitsprüfung konfiguriert", + "deviceAuthConfigured": "Geräteauthentifizierung konfiguriert", + "deviceAuthDisabled": "Geräteauthentifizierung deaktiviert — MC authentifiziert sich über Gateway-Token", + "deviceAuthWillConfigure": "Wird zusammen mit der Ursprungsregistrierung konfiguriert", + "testing": "Wird getestet...", + "testConnection": "Verbindung testen", + "gatewayReachable": "Gateway erreichbar", + "gatewayUnreachable": "Gateway nicht erreichbar" + }, + "credentials": { + "title": "Sichern Sie Ihre Station", + "description": "Das Administratorpasswort schützt Ihre Stationskonsole. Der API-Schlüssel ist ein Andock-Berechtigungsnachweis — Agenten präsentieren ihn bei der Registrierung, sodass nur autorisierte Agenten andocken können.", + "checkingCredentials": "Anmeldedaten werden überprüft...", + "adminPassword": "Administratorpasswort", + "passwordStrong": "Passwort ist stark und nicht der Standard", + "passwordWeak": "Standard- oder schwaches Passwort wird verwendet — ändern Sie AUTH_PASS in .env", + "apiKey": "API-Schlüssel", + "apiKeyConfigured": "Konfiguriert — Agenten können mit diesem Schlüssel andocken", + "apiKeyNotSet": "Nicht gesetzt — ohne konfigurierten Schlüssel können Agenten nicht andocken. Ausführen: bash scripts/generate-env.sh --force", + "openSettings": "Einstellungen öffnen", + "securityScan": "Sicherheitsscan", + "securityScanDescription": "Überprüfen Sie Netzwerk, Laufzeit und OpenClaw-Härtung, bevor Sie die Station starten.", + "launchStation": "Station starten", + "launchAnyway": "Trotzdem starten" + } + }, + "channels": { + "title": "Kanäle", + "loadingChannels": "Kanäle werden geladen...", + "gatewayConnected": "Gateway verbunden", + "gatewayDisconnected": "Gateway getrennt", + "refresh": "Aktualisieren", + "noChannelsConfigured": "Noch keine Kanäle konfiguriert. Konfigurieren Sie Messaging-Plattformen (WhatsApp, Telegram, Discord, Slack usw.) in den OpenClaw-Gateway-Einstellungen.", + "gatewayUnreachable": "Das OpenClaw-Gateway ist nicht erreichbar. Überprüfen Sie, ob es läuft und zugänglich ist.", + "statusConnected": "Verbunden", + "statusRunning": "Läuft", + "statusConfigured": "Konfiguriert", + "statusInactive": "Inaktiv", + "probe": "Prüfen", + "probing": "Prüfung läuft...", + "showQr": "QR anzeigen", + "relink": "Neu verknüpfen", + "waitForScan": "Auf Scan warten", + "logout": "Abmelden", + "loggedOut": "Abgemeldet.", + "profile": "Profil", + "editProfile": "Profil bearbeiten", + "edit": "Bearbeiten", + "noProfileSet": "Kein Profil festgelegt", + "displayName": "Anzeigename", + "username": "Benutzername", + "about": "Über", + "bio": "Biografie", + "avatarUrl": "Avatar-URL", + "bannerUrl": "Banner-URL", + "website": "Webseite", + "lightning": "Lightning", + "saving": "Wird gespeichert...", + "saveAndPublish": "Speichern und veröffentlichen", + "importFromRelays": "Von Relays importieren", + "hideAdvanced": "Erweitert ausblenden", + "showAdvanced": "Erweitert anzeigen", + "cancel": "Abbrechen", + "profilePublished": "Profil auf Relays veröffentlicht.", + "saveFailed": "Speichern fehlgeschlagen.", + "profileImported": "Profil von Relays importiert.", + "importFailed": "Import fehlgeschlagen.", + "accounts": "Konten ({count})" + }, + "integrations": { + "title": "Integrationen", + "loading": "Integrationen werden geladen...", + "connectedCount": "{connected} von {total} verbunden", + "pullAll": "Alle abrufen", + "discard": "Verwerfen", + "save": "Speichern", + "saving": "Wird gespeichert...", + "saveChanges": "Änderungen speichern", + "cancel": "Abbrechen", + "remove": "Entfernen", + "removeTitle": "Integration entfernen?", + "removeDescription": "Dadurch wird {target} aus der .env-Datei entfernt. Das Gateway muss neu gestartet werden, damit die Änderungen wirksam werden.", + "notSet": "nicht gesetzt", + "noIntegrationsInCategory": "Keine Integrationen in dieser Kategorie" + }, + "execApproval": { + "title": "Ausführungsgenehmigungen", + "pendingBadge": "{count} ausstehend", + "realtimeLabel": "Echtzeit über WebSocket", + "viewApprovals": "Genehmigungen", + "viewAllowlist": "Allowlist-Konfiguration", + "filterAll": "Alle", + "filterPending": "Ausstehend", + "filterResolved": "Erledigt", + "noPendingApprovals": "Keine ausstehenden Genehmigungen. Ausführungsanfragen von Agenten werden hier als Overlay angezeigt.", + "noApprovals": "Keine Genehmigungen anzuzeigen.", + "loadingAllowlist": "Allowlist wird geladen...", + "addAgent": "Agent hinzufügen", + "save": "Speichern", + "saving": "Wird gespeichert...", + "reload": "Neu laden", + "noAgentsConfigured": "Keine Agenten konfiguriert. Geben Sie oben eine Agenten-ID ein, um eine Allowlist zu erstellen.", + "addPattern": "Muster hinzufügen", + "noAllowlistPatterns": "Keine Allowlist-Muster. Befehle erfordern manuelle Genehmigung.", + "previewMatches": "Vorschau: {count} aktuelle(r) Befehl(e) würde(n) übereinstimmen", + "andMore": "...und {count} weitere", + "allowOnce": "Einmal erlauben", + "alwaysAllow": "Immer erlauben", + "deny": "Ablehnen", + "statusExpired": "Abgelaufen", + "statusApproved": "Genehmigt", + "statusDenied": "Abgelehnt" + }, + "notifications": { + "title": "Benachrichtigungen", + "markAllRead": "Alle als gelesen markieren", + "recipientLabel": "Empfänger", + "recipientPlaceholder": "Agentenname (z. B. my-agent)", + "noNotifications": "Keine Benachrichtigungen", + "markRead": "Als gelesen markieren" + }, + "localAgentsDoc": { + "title": "Lokale AGENTS.md", + "noPathFound": "Noch keine lokale AGENTS.md gefunden", + "openInVsCode": "In VS Code öffnen", + "copied": "Kopiert", + "copyPath": "Pfad kopieren", + "collapse": "Einklappen", + "expand": "Ausklappen", + "loading": "Lokale AGENTS.md wird geladen...", + "notDetected": "Keine lokale AGENTS.md erkannt.", + "checked": "Geprüft: {paths}" + }, + "memoryGraph": { + "loading": "Graph wird geladen...", + "retry": "Wiederholen", + "noMemoryDatabases": "Keine Speicherdatenbanken gefunden", + "noMemoryDatabasesHint": "OpenClaw-Speicher-SQLite-Dateien nicht erkannt", + "allAgents": "alle Agenten", + "filterFiles": "Dateien filtern...", + "statAgents": "Agenten", + "statFiles": "Dateien", + "statChunks": "Fragmente", + "statSize": "Größe", + "legendSessions": "Sitzungen", + "legendMemory": "Speicher", + "legendKnowledge": "Wissen", + "keyboardHint": "Scrollen zum Zoomen / Ziehen zum Schwenken / Knoten anklicken zum Vertiefen", + "chunks": "Fragmente", + "text": "Text" + }, + "agentComms": { + "connecting": "Verbindung zum Feed wird hergestellt...", + "eventsCount": "{count} Ereignisse", + "connectionGateway": "Gateway", + "connectionSse": "SSE", + "connectionPolling": "Polling", + "sourceLive": "Live", + "sourceMixed": "Gemischt", + "sourceSeeded": "Vorbesetzt", + "sessions": "{active}/{total} Sitzungen", + "scrollToLatest": "Zum Neuesten scrollen", + "toLabel": "An:", + "composerPlaceholderTarget": "Nachricht an {name}... (Enter zum Senden)", + "composerPlaceholderBroadcast": "Sitzung oder Agent oben auswählen oder zum Senden an alle eingeben...", + "send": "Senden", + "noFeedEvents": "Noch keine Feed-Ereignisse", + "noFilterEvents": "Keine {filter}-Ereignisse", + "noFeedEventsHint": "Verbinden Sie sich mit dem Gateway oder warten Sie auf Agentenaktivität. Ereignisse aus Sitzungen, Tools, Chat und Traces werden in Echtzeit übertragen.", + "noFilterEventsHint": "Wechseln Sie zu „Alle“, um Ereignisse anderer Kategorien zu sehen, oder warten Sie auf {filter}-Ereignisse." + }, + "agentDetail": { + "configTab": "Konfiguration", + "filesTab": "Dateien", + "toolsTab": "Werkzeuge", + "channelsTab": "Kanäle", + "cronTab": "Cron", + "modelsTab": "Modelle", + "workspaceFiles": "Arbeitsbereichsdateien", + "refresh": "Aktualisieren", + "charCount": "{count} Zeichen", + "missing": "fehlt", + "selectFileToView": "Datei zum Anzeigen oder Bearbeiten auswählen", + "reset": "Zurücksetzen", + "saving": "Speichern...", + "save": "Speichern", + "fileNotExistYet": "Diese Datei existiert noch nicht. Sie können sie erstellen, indem Sie Inhalt eingeben und speichern.", + "toolConfiguration": "Werkzeugkonfiguration", + "profile": "Profil:", + "saved": "Gespeichert", + "allowListCount": "Erlaubnisliste ({count})", + "noAllowList": "Keine explizite Erlaubnisliste (Profilstandards werden verwendet)", + "addToolAllowList": "Werkzeug zur Erlaubnisliste hinzufügen", + "add": "Hinzufügen", + "alsoAllowCount": "Auch erlauben ({count})", + "alsoAllowDesc": "Zusätzliche Werkzeuge, die über die Profilstandards hinaus erlaubt sind.", + "none": "Keine", + "denyListCount": "Sperrliste ({count})", + "noDeniedTools": "Keine gesperrten Werkzeuge", + "addToolDenyList": "Werkzeug zur Sperrliste hinzufügen", + "channelStatus": "Kanalstatus", + "channelStatusDesc": "Für {agent} verfügbare Kanäle", + "noChannelsFound": "Keine Kanäle gefunden...", + "connectedOf": "{connected}/{total} verbunden", + "noAccounts": "Keine Konten", + "configuredCount": "{count} konfiguriert", + "notConfigured": "Nicht konfiguriert", + "enabledCount": "{count} aktiviert", + "disabled": "Deaktiviert", + "cronJobs": "Cron-Jobs", + "allCronJobsCount": "{count} von {total} Jobs", + "agentCronJobsCount": "{count} von {total} Jobs", + "agentOnly": "Nur Agent", + "showAll": "Alle anzeigen", + "noCronJobsFound": "Keine Cron-Jobs gefunden", + "noCronJobsAssigned": "Keine Cron-Jobs für {agent} zugewiesen", + "noSchedule": "kein Zeitplan", + "enabled": "aktiviert", + "lastRun": "Letzter:", + "nextRun": "Nächster:", + "modelConfiguration": "Modellkonfiguration", + "modelConfigDesc": "Konfigurieren Sie primäre und Fallback-Modelle für diesen Agenten.", + "primaryModel": "Primärmodell", + "defaultModel": "Standard", + "fallbackChainCount": "Fallback-Kette ({count})", + "fallbackChainDesc": "Modelle, die der Reihe nach versucht werden, wenn das primäre Modell fehlschlägt oder nicht verfügbar ist.", + "noFallbackModels": "Keine Fallback-Modelle konfiguriert.", + "moveUp": "Nach oben", + "moveDown": "Nach unten", + "remove": "Entfernen", + "addFallbackPlaceholder": "Fallback-Modell hinzufügen", + "sandboxMode": "Modus", + "sandboxWorkspace": "Arbeitsbereich", + "sandboxNetwork": "Netzwerk", + "sandboxNetworkPlaceholder": "z.B. none, host", + "toolsSection": "Werkzeuge", + "subAgentsSection": "Unteragenten", + "addSubAgentPlaceholder": "Unteragent hinzufügen", + "addSubAgent": "Hinzufügen", + "subAgentModelOverride": "Modellüberschreibung für Unteragenten", + "defaultInherit": "Standard (erben)", + "modelLabel": "Modell:", + "noSubAgents": "Keine Unteragenten konfiguriert.", + "memorySearch": "Speichersuche", + "cancel": "Abbrechen" + }, + "taskBoard": { + "title": "Aufgabentafel", + "allProjects": "Alle Projekte", + "projects": "Projekte", + "close": "Schließen", + "spawnSubAgent": "Unteragent erstellen", + "newTask": "Neue Aufgabe", + "refresh": "Aktualisieren", + "spawnAgentPlaceholder": "Agentenname", + "spawnTaskPlaceholder": "Aufgabenbeschreibung", + "timeoutTitle": "Timeout (Minuten)", + "spawning": "Erstellen...", + "spawn": "Erstellen", + "noActiveSpawnRequests": "Keine aktiven Erstellungsanfragen", + "dismissError": "Fehler schließen", + "taskBoardAriaLabel": "Aufgabentafel", + "columnAriaLabel": "Spalte {title}, {count} Aufgaben", + "colInbox": "Posteingang", + "colAssigned": "Zugewiesen", + "colInProgress": "In Bearbeitung", + "colReview": "Überprüfung", + "colQualityReview": "Qualitätsprüfung", + "colDone": "Erledigt", + "recurring": "WIEDERKEHREND", + "spawned": "ERSTELLT", + "spawnedFromTask": "Aus Aufgabe #{id} erstellt", + "unassigned": "Nicht zugewiesen", + "due": "Fällig:", + "dropTasksHere": "Aufgaben hier ablegen", + "priority_low": "Niedrig", + "priority_medium": "Mittel", + "priority_high": "Hoch", + "priority_critical": "Kritisch", + "claudeCodeTasks": "Claude Code-Aufgaben", + "collapse": "Einklappen", + "expand": "Ausklappen", + "loading": "Laden...", + "noTeamTasksFound": "Keine Teamaufgaben gefunden", + "noTeamTasksDesc": "Derzeit sind keine Claude Code-Teamaufgaben aktiv.", + "taskCount": "{count} {count, plural, one {Aufgabe} other {Aufgaben}}", + "blocked": "blockiert", + "hermesScheduledTasks": "Hermes-Geplante Aufgaben", + "noScheduledTasksFound": "Keine geplanten Aufgaben gefunden", + "noScheduledTasksDesc": "Derzeit sind keine geplanten Hermes-Aufgaben aktiv.", + "noSchedule": "kein Zeitplan", + "enabled": "aktiviert", + "disabled": "deaktiviert", + "createNewTask": "Neue Aufgabe erstellen", + "fieldTitle": "Titel", + "fieldDescription": "Beschreibung", + "fieldPriority": "Priorität", + "fieldProject": "Projekt", + "fieldAssignTo": "Zuweisen an", + "fieldTags": "Tags", + "makeRecurring": "Wiederkehrend machen", + "createRecurringTask": "Wiederkehrende Aufgabe erstellen", + "createTask": "Aufgabe erstellen", + "cancel": "Abbrechen", + "editTask": "Aufgabe bearbeiten", + "fieldStatus": "Status", + "saveChanges": "Änderungen speichern", + "edit": "Bearbeiten", + "deleteTaskConfirm": "\"{title}\" löschen?", + "delete": "Löschen", + "closeTaskDetails": "Aufgabendetails schließen", + "noDescription": "Keine Beschreibung", + "taskDetailTabs": "Aufgabendetail-Tabs", + "tabDetails": "Details", + "tabComments": "Kommentare", + "tabQualityReview": "Qualitätsprüfung", + "tabSession": "Sitzung", + "ticket": "Ticket", + "project": "Projekt", + "status": "Status", + "priority": "Priorität", + "assignedTo": "Zugewiesen an", + "created": "Erstellt", + "issue": "Issue", + "branch": "Branch", + "pr": "PR", + "live": "Live", + "postingAs": "Gepostet als", + "newComment": "Neuer Kommentar...", + "addComment": "Kommentar hinzufügen", + "broadcastToSubscribers": "An Abonnenten senden", + "broadcastPlaceholder": "Nachricht an alle Abonnenten senden...", + "broadcast": "Senden", + "broadcastSent": "Nachricht an {count} Abonnenten gesendet", + "loadingComments": "Kommentare laden...", + "noComments": "Noch keine Kommentare", + "aegisQualityReview": "Aegis-Qualitätsprüfung", + "noReviews": "Noch keine Bewertungen", + "reviewerPlaceholder": "Name des Prüfers", + "reviewNotesPlaceholder": "Prüfnotizen...", + "submit": "Einreichen", + "loadingTranscript": "Transkript laden...", + "noSessionMessages": "Keine Sitzungsnachrichten" + }, + "cronManagement": { + "title": "Cron-Verwaltung", + "subtitle": "Wiederkehrende Jobs planen und verwalten", + "loading": "Laden...", + "refresh": "Aktualisieren", + "addJob": "Job hinzufügen", + "calendarView": "Kalenderansicht", + "calendarViewDescLocal": "Zeiten werden in Ihrer lokalen Zeitzone angezeigt", + "calendarViewDesc": "Zeiten werden in UTC angezeigt", + "prev": "Zurück", + "today": "Heute", + "next": "Weiter", + "calMode_agenda": "Agenda", + "calMode_week": "Woche", + "calMode_month": "Monat", + "searchPlaceholder": "Jobs suchen...", + "allAgents": "Alle Agenten", + "allStates": "Alle Zustände", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "all": "Alle", + "sortName": "Name", + "sortSchedule": "Zeitplan", + "sortLastRun": "Letzter Lauf", + "sortNextRun": "Nächster Lauf", + "ascending": "Aufsteigend", + "descending": "Absteigend", + "noJobsMatchFilters": "Keine Jobs entsprechen den aktuellen Filtern.", + "uniqueJobs": "{count} {count, plural, one {eindeutiger Job} other {eindeutige Jobs}}", + "noJobsForDay": "Keine Jobs für dieses Datum geplant.", + "jobCount": "{count} {count, plural, one {Job} other {Jobs}}", + "runsCount": "{count} {count, plural, one {Ausführung} other {Ausführungen}}", + "totalRunsCount": "{count} {count, plural, one {Ausführung} other {Ausführungen}} gesamt", + "moreJobs": "+{count} weitere", + "firstRun": "erste {time}", + "scheduledJobs": "Geplante Jobs", + "jobsCount": "{count} von {total} Jobs", + "loadingJobs": "Jobs laden...", + "noCronJobsFound": "Keine Cron-Jobs gefunden.", + "colJobName": "Jobname", + "colAgent": "Agent", + "colSchedule": "Zeitplan", + "colModel": "Modell", + "colStatus": "Status", + "colLastRun": "Letzter Lauf", + "colNextRun": "Nächster Lauf", + "colActions": "Aktionen", + "enable": "Aktivieren", + "disable": "Deaktivieren", + "run": "Ausführen", + "runNowForce": "Jetzt ausführen (erzwingen)", + "runNowIfDue": "Jetzt ausführen (wenn fällig)", + "clone": "Klonen", + "history": "Verlauf", + "configuration": "Konfiguration", + "delivery": "Lieferung", + "source": "Quelle", + "localSchedulerAutomation": "Lokaler Planer / Automatisierung", + "command": "Befehl", + "timing": "Zeitsteuerung", + "recentLogs": "Aktuelle Protokolle", + "lastRun": "Letzter Lauf", + "nextRun": "Nächster Lauf", + "timezone": "Zeitzone", + "remove": "Entfernen", + "close": "Schließen", + "noLogsAvailable": "Keine Protokolle verfügbar.", + "runHistoryTitle": "Ausführungsverlauf: {name}", + "totalRuns": "{count} {count, plural, one {Ausführung} other {Ausführungen}} gesamt", + "filterRunsPlaceholder": "Ausführungen filtern...", + "timestamp": "Zeitstempel", + "duration": "Dauer", + "error": "Fehler", + "noRunHistoryAvailable": "Kein Ausführungsverlauf verfügbar.", + "loadMore": "Mehr laden", + "addNewCronJob": "Neuen Cron-Job hinzufügen", + "fieldJobName": "Jobname", + "fieldSchedule": "Zeitplan (Cron-Format)", + "quickSelect": "Schnellauswahl...", + "scheduleFormatHint": "Format: Minute Stunde Tag Monat Wochentag", + "fieldCommand": "Befehl", + "fieldModelOptional": "Modell (optional)", + "modelHint": "Leer lassen, um das Standard-Modell des Agenten oder Gateways zu verwenden.", + "fieldStaggerOptional": "Verzögerungsversatz (optional)", + "seconds": "Sekunden", + "staggerHint": "Verzögert die Ausführung, um Überschneidungen mit anderen Jobs im gleichen Zeitplan zu vermeiden.", + "fieldDescriptionOptional": "Beschreibung (optional)", + "descriptionPlaceholder": "Was macht dieser Job?", + "cancel": "Abbrechen", + "claudeCodeTeams": "Claude Code-Teams", + "teamsCount": "{count} {count, plural, one {Team} other {Teams}}", + "collapse": "Einklappen", + "expand": "Ausklappen", + "noClaudeCodeTeams": "Keine Claude Code-Teams in ~/.claude/teams/ gefunden", + "membersCount": "{count} {count, plural, one {Mitglied} other {Mitglieder}}" + }, + "sessionDetails": { + "title": "Sitzungsverwaltung", + "subtitle": "Aktive Agenten-Sitzungen überwachen und verwalten", + "filter": "Filter", + "filterAll": "Alle Sitzungen", + "filterActive": "Nur aktive", + "filterIdle": "Nur inaktive", + "sortBy": "Sortieren nach", + "sortAge": "Alter", + "sortTokens": "Token-Nutzung", + "sortModel": "Modell", + "timeWindow": "Zeitfenster", + "last1h": "Letzte Stunde", + "last6h": "Letzte 6 Stunden", + "last24h": "Letzte 24 Stunden", + "last7d": "Letzte 7 Tage", + "allTime": "Alle", + "global": "Global", + "unknown": "Unbekannt", + "sessionCount": "{filtered} von {total} Sitzungen", + "activeCount": "{count} aktiv", + "noSessionsMatch": "Keine Sitzungen entsprechen dem aktuellen Filter", + "model": "Modell", + "tokenUsage": "Token-Nutzung", + "sessionDetails": "Sitzungsdetails", + "kind": "Art", + "id": "ID", + "lastActivity": "Letzte Aktivität", + "messages": "Nachrichten", + "label": "Beschriftung", + "addLabel": "Klicken um Beschriftung hinzuzufügen...", + "sessionControls": "Sitzungssteuerung", + "thinking": "Denken", + "verbose": "Ausführlich", + "reasoning": "Schlussfolgerung", + "off": "Aus", + "on": "Ein", + "minimal": "Minimal", + "low": "Niedrig", + "medium": "Mittel", + "high": "Hoch", + "xhigh": "Sehr hoch", + "full": "Vollständig", + "stream": "Stream", + "modelInformation": "Modellinformationen", + "fullName": "Vollständiger Name", + "provider": "Anbieter", + "description": "Beschreibung", + "monitor": "Überwachen", + "pause": "Pausieren", + "terminate": "Beenden", + "working": "Wird verarbeitet...", + "delete": "Löschen", + "deleteConfirm": "Löschen?", + "yes": "Ja", + "no": "Nein", + "confirmTerminate": "Diese Sitzung wirklich beenden?", + "failedMonitor": "Sitzungsüberwachung fehlgeschlagen", + "failedPause": "Sitzungspause fehlgeschlagen", + "failedTerminate": "Sitzungsbeendigung fehlgeschlagen", + "sessionOverview": "Sitzungsübersicht", + "totalSessions": "Sitzungen gesamt", + "active": "Aktiv", + "idle": "Inaktiv", + "subAgents": "Unteragenten", + "cronJobs": "Cron-Jobs", + "modelDistribution": "Modellverteilung", + "highTokenUsage": "Hohe Token-Nutzung", + "highTokenUsageDesc": "{count} Sitzungen verwenden mehr als 80 % ihres Token-Limits." + }, + "costTracker": { + "title": "Kostenverfolgung", + "subtitle": "Token-Nutzung, Kosten und Ausgabenanalyse über Agenten, Modelle und Sitzungen", + "loadingCostData": "Kostendaten werden geladen", + "noUsageData": "Noch keine Nutzungsdaten", + "noUsageDataDesc": "Nutzungsdaten erscheinen, wenn Agenten Sitzungen ausführen und Tokens verbrauchen.", + "refresh": "Aktualisieren", + "totalCost": "Gesamtkosten ({timeframe})", + "totalTokens": "Tokens gesamt", + "apiRequests": "API-Anfragen", + "activeAgents": "Aktive Agenten", + "taskAttributed": "Aufgaben zugeordnet", + "usageTrends": "Nutzungstrends", + "perTurn": "Pro Runde", + "cumulative": "Kumulativ", + "noTrendData": "Keine Trenddaten für diesen Zeitraum", + "tokenUsageByModel": "Token-Nutzung nach Modell", + "noModelData": "Keine Modelldaten", + "costDistributionByModel": "Kostenverteilung nach Modell", + "noCostData": "Keine Kostendaten", + "performanceInsights": "Leistungsanalysen", + "mostEfficientModel": "Effizientestes Modell", + "avgTokensPerRequest": "Durchschn. Tokens/Anfrage", + "optimizationPotential": "Optimierungspotenzial", + "savingsPossible": "Einsparungen möglich", + "exportData": "Daten exportieren", + "exportDataDesc": "Token-Nutzungsdaten, Modellstatistiken und Kostenaufschlüsselungen herunterladen", + "exporting": "Exportiere...", + "noAgentData": "Keine Agentendaten", + "noAgentDataDesc": "Token-Nutzungsdaten erscheinen, sobald Agenten mit der Meldung beginnen", + "agents": "Agenten", + "totalCostDays": "Gesamtkosten ({days}T)", + "avgPer1kTokens": "Durchschn. $/1K Tokens", + "perAgentCost": "Kosten pro Agent", + "agentBreakdown": "Agentenaufschlüsselung", + "inputTokens": "Eingabe-Tokens", + "outputTokens": "Ausgabe-Tokens", + "ioRatio": "E/A-Verhältnis", + "lastActive": "Zuletzt aktiv", + "noTaskCosts": "Keine aufgabenzugeordneten Kosten", + "tokens": "Tokens", + "sortBy": "Sortieren", + "noSessionCostData": "Keine Sitzungskostendaten", + "noSessionCostDataDesc": "Sitzungsaufschlüsselungen erscheinen, sobald die Nutzung aufgezeichnet wird.", + "activeStatus": "Aktiv", + "inactiveStatus": "Inaktiv", + "requests": "Anfragen", + "inShort": "Ein", + "outShort": "Aus", + "avgPerReq": "Durchschn./Anfrage", + "noTaskCostData": "Keine Aufgabenkostendaten", + "noTaskCostDataDesc": "Kosten werden Aufgaben zugeordnet, sobald Agenten daran arbeiten", + "tasksWithCosts": "Aufgaben mit Kosten", + "attributedCost": "Zugeordnete Kosten", + "attributedTokens": "Zugeordnete Tokens", + "unattributed": "Nicht zugeordnet", + "tasksByCost": "Aufgaben nach Kosten", + "reqs": "Anfragen" + }, + "superAdmin": { + "accessDenied": "Zugriff verweigert", + "accessDeniedDesc": "Für die Supersteuerung sind Administratorrechte erforderlich.", + "loading": "Super-Admin-Daten werden geladen...", + "title": "Supersteuerung", + "subtitleLocal": "Lokale Steuerebenen-Ansicht über Planer-Automatisierungen und Laufzeitzustand.", + "subtitleMultiTenant": "Mehrmandanten-Bereitstellungs-Steuerebene mit Genehmigungsschranken und sichereren destruktiven Aktionen.", + "addWorkspace": "+ Arbeitsbereich hinzufügen", + "refresh": "Aktualisieren", + "activeOrgs": "Aktive Organisationen", + "pendingInProgress": "Ausstehend / In Bearbeitung", + "erroredOrgs": "Fehlerhafte Organisationen", + "queuedApprovals": "Ausstehende Genehmigungen", + "createNewWorkspace": "Neuen Arbeitsbereich erstellen", + "createWorkspaceHint": "Füllen Sie die Arbeitsbereichsdetails aus und klicken Sie auf Erstellen + Warteschlange, um eine neue Client-Instanz bereitzustellen.", + "slugPlaceholder": "Bezeichner (z.B. acme)", + "displayNamePlaceholder": "Anzeigename", + "linuxUserPlaceholder": "Linux-Benutzer (optional)", + "planStandard": "Standard", + "planPro": "Pro", + "planEnterprise": "Enterprise", + "gatewayPortPlaceholder": "Gateway-Port", + "dashboardPortPlaceholder": "Dashboard-Port", + "dryRun": "Probelauf", + "live": "(real)", + "createAndQueue": "Erstellen + Warteschlange", + "tabOrganizations": "Organisationen", + "tabJobs": "Jobs", + "tabEvents": "Ereignisse", + "searchOrganizations": "Organisationen suchen", + "showing": "{shown} von {total} angezeigt", + "colTenant": "Mandant", + "colSystemUser": "Systembenutzer", + "colOwner": "Eigentümer", + "colStatus": "Status", + "colLatestJob": "Letzter Job", + "colAction": "Aktion", + "unassigned": "nicht zugewiesen", + "by": "von", + "unknownCreator": "unbekannt", + "localReadOnly": "Lokal schreibgeschützt", + "queueDecommission": "Stilllegung einreihen", + "noMatchingOrgs": "Keine passenden Organisationen.", + "prev": "Zurück", + "next": "Weiter", + "page": "Seite {page} / {total}", + "searchJobs": "Jobs suchen", + "colJob": "Job", + "colRequestedApproved": "Angefordert/Genehmigt", + "reqShort": "Ang.", + "apprShort": "Gen.", + "view": "Anzeigen", + "viewEvents": "Ereignisse anzeigen", + "approveAndRun": "Genehmigen + Ausführen", + "approve": "Genehmigen", + "reject": "Ablehnen", + "running": "Wird ausgeführt...", + "run": "Ausführen", + "noMatchingJobs": "Keine passenden Jobs.", + "showingEventsForJob": "Ereignisse für Job #{jobId} werden angezeigt", + "selectJobForEvents": "Wählen Sie einen Job aus, um das Bereitstellungs-Ereignisprotokoll zu prüfen.", + "noEventsYet": "Noch keine Ereignisse für diesen Job.", + "queueDecommissionTitle": "Stilllegung einreihen: {name}", + "reviewImpact": "Prüfen Sie die Auswirkungen, bevor Sie den Job erstellen.", + "dryRunRecommended": "Probelauf (empfohlen)", + "dryRunDesc": "Keine Systemänderungen, validiert Befehle und protokolliert eine vollständige Planausführung.", + "liveExecution": "Echte Ausführung", + "liveExecutionDesc": "Stoppt Dienste und wendet Abbau-Änderungen nach Genehmigung + Ausführung an.", + "removeLinuxUser": "Linux-Benutzer entfernen", + "removeLinuxUserDesc": "Führt `userdel -r` aus und entfernt das Home-Verzeichnis.", + "removeStateDirs": "Status-/Arbeitsbereichsverzeichnisse entfernen", + "removeStateDirsDesc": "Löscht `.openclaw` und `workspace`-Pfade, wenn der Benutzer beibehalten wird.", + "impactSummary": "Auswirkungszusammenfassung", + "impactStopsService": "Stoppt und deaktiviert `openclaw-gateway@{user}.service`.", + "impactRemovesEnv": "Entfernt `/etc/openclaw-tenants/{user}.env`.", + "impactLinuxUserRemoved": "Linux-Benutzer wird entfernt.", + "impactStateDirsRemoved": "Status-/Arbeitsbereichsverzeichnisse werden entfernt.", + "impactRetained": "Linux-Benutzer und Verzeichnisse werden beibehalten.", + "reasonOptional": "Begründung (optional)", + "typeSlugLabel": "Geben Sie", + "toConfirmLive": "ein, um die echte Stilllegung zu bestätigen", + "cancel": "Abbrechen", + "queueing": "Wird eingereiht...", + "queueDryRunDecommission": "Probelauf-Stilllegung einreihen", + "queueLiveDecommission": "Echte Stilllegung einreihen", + "slugAndNameRequired": "Bezeichner und Anzeigename sind erforderlich", + "tenantCreated": "Mandant {slug} erstellt. Bootstrap-Job eingereiht.", + "jobExecuted": "Job #{jobId} ausgeführt", + "jobApprovedExecuted": "Job #{jobId} genehmigt und ausgeführt", + "typeToConfirm": "Geben Sie {slug} ein, um die echte Stilllegung zu bestätigen", + "decommissionQueuedDryRun": "Probelauf-Stilllegung für {slug} eingereiht", + "decommissionQueued": "Stilllegung für {slug} eingereiht", + "optionalReason": "Optionale Begründung für {action}:", + "jobActioned": "Job #{jobId} wurde {action}" + }, + "auditTrail": { + "title": "Prüfprotokoll", + "eventsLogged": "{count, plural, one {# Ereignis} other {# Ereignisse}} protokolliert", + "refresh": "Aktualisieren", + "allActions": "Alle Aktionen", + "groupAuth": "Authentifizierung", + "groupUsers": "Benutzer", + "groupAgents": "Agenten", + "groupSystem": "System", + "groupConfig": "Konfiguration", + "groupWorkspaces": "Arbeitsbereiche", + "actionLogin": "Anmeldung", + "actionLoginFailed": "Anmeldung fehlgeschlagen", + "actionLogout": "Abmeldung", + "actionLoginGoogle": "Google-Anmeldung", + "actionGoogleDisconnect": "Google getrennt", + "actionPasswordChange": "Passwort geändert", + "actionProfileUpdate": "Profil aktualisiert", + "actionUserCreate": "Benutzer erstellt", + "actionUserUpdate": "Benutzer aktualisiert", + "actionUserDelete": "Benutzer gelöscht", + "actionRoleDenied": "Zugriff verweigert", + "actionAccessRequest": "Zugriff angefordert", + "actionAccessApprove": "Zugriff genehmigt", + "actionAccessDeny": "Zugriff abgelehnt", + "actionAgentRegister": "Agent registriert", + "actionAgentCreate": "Agent erstellt", + "actionAgentUpdate": "Agent aktualisiert", + "actionAgentDelete": "Agent gelöscht", + "actionAgentConfigSync": "Konfiguration synchronisiert", + "actionLocalAgentSync": "Lokale Agenten synchronisiert", + "actionSettingsUpdate": "Einstellungen aktualisiert", + "actionAutoBackup": "Automatische Sicherung", + "actionBackupCreate": "Sicherung erstellt", + "actionBackupDelete": "Sicherung gelöscht", + "actionHeartbeatCheck": "Heartbeat-Prüfung", + "actionIntegrationTest": "Integrationstest", + "actionCleanup": "Bereinigung", + "actionExport": "Export", + "actionTokenRotate": "Token rotiert", + "actionGatewayConfigUpdate": "Gateway-Konfiguration aktualisiert", + "actionWorkspaceCreate": "Arbeitsbereich erstellt", + "actionWorkspaceUpdate": "Arbeitsbereich aktualisiert", + "actionWorkspaceDelete": "Arbeitsbereich gelöscht", + "filterByActor": "Nach Akteur filtern...", + "noEvents": "Keine Prüfereignisse gefunden", + "userRef": "Benutzer #{id}", + "previous": "Zurück", + "next": "Weiter", + "pageOf": "Seite {page} von {total}", + "adminRequired": "Administratorzugriff erforderlich, um Prüfprotokolle anzuzeigen", + "failedFetch": "Prüfprotokoll konnte nicht geladen werden", + "detailUsername": "Benutzername", + "detailRole": "Rolle", + "detailName": "Name", + "detailPasswordReset": "Passwort zurückgesetzt", + "detailChanged": "geändert", + "detailSize": "Größe", + "detailMarkedOffline": "als offline markiert", + "detailAgent": "Agent", + "detailSessions": "Sitzungen", + "detailEvents": "Ereignisse", + "detailRemoved": "entfernt", + "detailType": "Typ" + }, + "securityAudit": { + "title": "Sicherheitsaudit", + "subtitle": "Sicherheitslage, Auth-Ereignisse, Vertrauenswerte und Bedrohungserkennung", + "timeframeHour": "Stunde", + "timeframeDay": "Tag", + "timeframeWeek": "Woche", + "timeframeMonth": "Monat", + "loadingSecurityData": "Sicherheitsdaten werden geladen", + "securityPosture": "Sicherheitslage", + "blendedScore": "Kombinierter Wert: 70% Infrastrukturkonfiguration, 30% Ereignisverlauf.", + "infrastructureScan": "Infrastruktur-Scan", + "scanCredentials": "Anmeldedaten", + "scanNetwork": "Netzwerk", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "Laufzeit", + "scanOs": "Betriebssystemsicherheit", + "authEvents": "Auth-Ereignisse", + "noAuthEvents": "Keine Auth-Ereignisse in diesem Zeitraum", + "colType": "Typ", + "colActor": "Akteur", + "colIP": "IP", + "colTime": "Zeit", + "agentTrustScores": "Agent-Vertrauenswerte", + "noAgentTrustData": "Keine Agent-Vertrauensdaten verfügbar", + "flagged": "markiert", + "secretExposureAlerts": "Warnungen zur Geheimnis-Exposition", + "noSecretsDetected": "Keine Geheimnisse erkannt", + "colFile": "Datei", + "colPreview": "Vorschau", + "colStatus": "Status", + "colDetected": "Erkannt", + "statusResolved": "gelöst", + "statusActive": "aktiv", + "mcpToolAudit": "MCP-Tool-Audit", + "noToolUsageData": "Keine Tool-Nutzungsdaten", + "chartSuccess": "Erfolg", + "chartFailure": "Fehler", + "rateLimitAbuseSignals": "Ratenlimit-/Missbrauchssignale", + "noRateLimitSignals": "Keine Ratenlimit-Signale", + "hits": "{hits} Treffer", + "injectionAttempts": "Injection-Versuche", + "noInjectionAttempts": "Keine Injection-Versuche erkannt", + "colSource": "Quelle", + "colInput": "Eingabe", + "statusBlocked": "blockiert", + "statusPassed": "durchgelassen", + "securityTimeline": "Sicherheits-Zeitverlauf ({timeframe})", + "noTimelineData": "Keine Zeitverlaufsdaten", + "chartAuthEvents": "Auth-Ereignisse", + "chartInjections": "Injections", + "chartSecrets": "Geheimnisse", + "chartToolCalls": "Tool-Aufrufe", + "agentEvalDashboard": "Agent-Evaluierungs-Dashboard", + "overallConvergence": "Gesamtkonvergenz", + "crossAgentAlignment": "Agentenübergreifende Ausrichtung über Evaluierungsebenen", + "noEvalData": "Keine Evaluierungsdaten verfügbar", + "convergence": "Konvergenz:", + "drift": "Drift", + "fixPrefix": "Behebung: {fix}", + "issueCount": "{count, plural, one {# Problem} other {# Probleme}}" + }, + "office": { + "title": "Kommandobrücke", + "subtitle": "Überwachen Sie Ihre Crew in Echtzeit", + "loadingLocalSessions": "Lokale Sitzungen werden gescannt...", + "loadingOffice": "Büro wird geladen...", + "activeCount": "{count} aktiv", + "standbyCount": "{count} bereit", + "alertCount": "{count} Alarm", + "offlineCount": "{count} offline", + "buttonDeck": "Brücke", + "buttonCrewChart": "Crew-Diagramm", + "refresh": "Aktualisieren", + "emptyDeck": "Die Brücke ist leer", + "emptyDeckSubtitle": "Agenten deployen, um sie hier zu sehen", + "crewHeader": "CREW", + "onlineCount": "{count} online", + "filterAll": "Alle", + "filterWorking": "Aktiv", + "filterIdle": "Inaktiv", + "filterNeedsAttention": "Aufmerksamkeit erforderlich", + "filterRunning": "Läuft", + "filterNotRunning": "Nicht aktiv", + "noWorkersInFilter": "Keine Mitarbeiter in diesem Filter.", + "noRecentActivity": "Keine kürzliche Aktivität", + "activeStatus": "aktiv", + "idleMinutes": "{minutes}m inaktiv", + "mainDeck": "HAUPTBRÜCKE", + "radarLabel": "Radar", + "resetView": "Zurücksetzen", + "showCrewButton": "Crew anzeigen", + "hideCrewButton": "Crew ausblenden", + "showRadarButton": "Radar anzeigen", + "hideRadarButton": "Radar ausblenden", + "showLogButton": "Protokoll anzeigen", + "hideLogButton": "Protokoll ausblenden", + "resetLayout": "Layout zurücksetzen", + "deckLog": "Brückenprotokoll", + "noEventsYet": "Noch keine Ereignisse. Klicken Sie auf eine Zone oder führen Sie eine Aktion aus.", + "legendActive": "Aktiv", + "legendStandby": "Bereit", + "legendOther": "Sonstige", + "hotspotUp": "Hoch", + "hotspotDown": "Runter", + "hotspotLeft": "Links", + "hotspotRight": "Rechts", + "hotspotFineMinusX": "Fein -X", + "hotspotFinePlusX": "Fein +X", + "hotspotWider": "Breiter", + "hotspotNarrower": "Schmaler", + "hotspotTaller": "Höher", + "hotspotShorter": "Niedriger", + "segmentedBy": "Segmentiert nach", + "segmentCategory": "Kategorie", + "segmentRole": "Rolle", + "segmentStatus": "Status", + "currentActivity": "Aktuelle Aktivität", + "taskStatTotal": "Gesamt", + "taskStatAssigned": "Zugewiesen", + "taskStatActive": "Aktiv", + "taskStatDone": "Abgeschlossen", + "sessionLabel": "Sitzung:", + "quickActions": "Schnellaktionen", + "actionFocus": "Fokus", + "actionPair": "Pairing", + "actionBreak": "Pause", + "openFlightDeck": "In Flight Deck öffnen", + "openingFlightDeck": "Flight Deck wird geöffnet...", + "flightDeckCompanion": "Private/Pro-Begleit-App für tiefe Sitzungsanalyse", + "flightDeckRequired": "Flight Deck erforderlich", + "flightDeckDescription": "Flight Deck ist die private/Pro-Begleit-App für Mission Control.", + "flightDeckNotInstalled": "Flight Deck scheint auf diesem Gerät nicht installiert zu sein. Installieren Sie es, um Agent-Sitzungen mit umfangreicheren Steuerelementen und Diagnosen zu öffnen.", + "maybeLater": "Später", + "downloadFlightDeck": "Flight Deck herunterladen", + "moving": "in Bewegung", + "neverSeen": "Noch nie gesehen", + "justNow": "Gerade eben", + "minutesAgo": "vor {minutes}m", + "hoursAgo": "vor {hours}h", + "daysAgo": "vor {days}d" + }, + "githubSync": { + "title": "GitHub-Issues-Synchronisierung", + "subtitle": "GitHub-Issues als Mission-Control-Aufgaben importieren", + "loading": "GitHub-Synchronisierung wird geladen...", + "connectedAs": "GitHub: {user}", + "notConfigured": "GitHub: nicht konfiguriert", + "tokenNotConfigured": "GitHub-Token nicht konfiguriert", + "tokenNotConfiguredDesc": "Legen Sie GITHUB_TOKEN in den Integrationen fest, um die Issue-Synchronisierung zu aktivieren. Sie können den Synchronisierungsverlauf und verknüpfte Aufgaben weiterhin einsehen.", + "importIssues": "Issues importieren", + "labelRepository": "Repository", + "placeholderRepo": "eigentümer/repo", + "labelLabels": "Labels (optional)", + "placeholderLabels": "bug,verbesserung", + "labelState": "Status", + "stateOpen": "Offen", + "stateClosed": "Geschlossen", + "stateAll": "Alle", + "labelAssignAgent": "Agent zuweisen (optional)", + "unassigned": "Nicht zugewiesen", + "buttonPreview": "Vorschau", + "buttonImport": "Importieren", + "twoWaySync": "Bidirektionale Synchronisierung", + "syncAll": "Alle synchronisieren", + "enableSync": "Aktivieren", + "disableSync": "Deaktivieren", + "syncButton": "Synchronisieren", + "noProjectsLinked": "Keine Projekte mit GitHub-Repositories verknüpft. Legen Sie ein GitHub-Repository in der Projektverwaltung fest.", + "previewTitle": "Vorschau ({count} Issues)", + "colNumber": "#", + "colTitle": "Titel", + "colLabels": "Labels", + "colState": "Status", + "colCreated": "Erstellt", + "syncHistory": "Synchronisierungsverlauf", + "colRepo": "Repository", + "colIssues": "Issues", + "colStatus": "Status", + "colSyncedAt": "Synchronisiert am", + "noSyncHistory": "Kein Synchronisierungsverlauf. Importieren Sie Issues oben, um zu beginnen.", + "linkedTasks": "Verknüpfte Aufgaben", + "linkedTasksWithCount": "Verknüpfte Aufgaben ({count})", + "colTask": "Aufgabe", + "colPriority": "Priorität", + "colGitHub": "GitHub", + "colSynced": "Synchronisiert", + "noLinkedTasks": "Noch keine mit GitHub-Issues verknüpfte Aufgaben.", + "syncResultImported": "Importiert: {count}", + "syncResultSkipped": "Übersprungen: {count}", + "syncResultErrors": "Fehler: {count}", + "enterRepo": "Repository eingeben (eigentümer/repo)", + "noIssuesFound": "Keine Issues gefunden, die den Filtern entsprechen", + "failedFetchIssues": "Issues konnten nicht abgerufen werden", + "networkError": "Netzwerkfehler", + "syncFailed": "Synchronisierung fehlgeschlagen", + "failedToggleSync": "Synchronisierung konnte nicht umgeschaltet werden", + "importedFeedback": "{imported} {imported, plural, one {Issue} other {Issues}} importiert, {skipped} übersprungen" + }, + "agentCost": { + "title": "Kostenaufschlüsselung nach Agent", + "subtitle": "Token-Nutzung und Ausgabenanalyse pro Agent", + "loadingAgentCosts": "Agentkosten werden geladen", + "viewOverview": "Übersicht", + "viewPerAgentDB": "Pro Agent (DB)", + "timeframeHour": "Stunde", + "timeframeDay": "Tag", + "timeframeWeek": "Woche", + "timeframeMonth": "Monat", + "noAgentCostData": "Keine Agentkosten-Daten verfügbar", + "noAgentCostSubtitle": "Kostendaten erscheinen, sobald Agenten Token verwenden", + "refresh": "Aktualisieren", + "activeAgents": "Aktive Agenten", + "totalCost": "Gesamtkosten ({timeframe})", + "mostExpensive": "Teuerster Agent", + "mostEfficient": "Effizientester Agent", + "taskAttributed": "Aufgaben-Zuordnung", + "unattributed": "{cost} nicht zugeordnet", + "costDistributionByAgent": "Kostenverteilung nach Agent", + "noCostData": "Keine Kostendaten", + "costTrends": "Kostentrends (Top 5 Agenten)", + "noTrendData": "Keine Trenddaten", + "costComparison": "Kostenvergleich", + "costEfficiency": "Kosteneffizienz ($/1K Token pro Agent)", + "agentCostRanking": "Agentkosten-Ranking", + "noTaskCosts": "Keine aufgabenzugeordneten Kosten für diesen Agenten", + "tasksTab": "Aufgaben ({count})", + "modelsTab": "Modelle ({count})", + "sessionCount": "{count, plural, one {# Sitzung} other {# Sitzungen}}", + "requestCount": "{count, plural, one {# Anfrage} other {# Anfragen}}", + "tokens": "Token", + "ofTotal": "{pct}% des Gesamtwerts", + "reqs": "{count} Anfragen", + "inputTokens": "Eingabe-Token", + "outputTokens": "Ausgabe-Token", + "ioRatio": "E/A-Verhältnis", + "lastActive": "Zuletzt aktiv", + "modelBreakdown": "Modellaufschlüsselung", + "inSuffix": "ein", + "outSuffix": "aus", + "noPerAgentData": "Keine agentbezogenen Daten in der Datenbank", + "noPerAgentDataSubtitle": "Token-Nutzungseinträge erscheinen, sobald Agenten Heartbeats senden", + "agentCountDB": "Agenten (DB)", + "totalCostDays": "Gesamtkosten ({days}T)", + "totalTokens": "Gesamte Token", + "avgPer1kTokens": "Durchschnitt $/1K Token", + "perAgentCostDB": "Kosten pro Agent (DB)", + "agentTokenBreakdown": "Token-Aufschlüsselung pro Agent", + "chartCost": "Kosten ($)" + }, + "tokenDashboard": { + "title": "Token- & Kosten-Dashboard", + "subtitle": "Token-Nutzung und Kosten über Modelle und Sitzungen überwachen", + "viewOverview": "Übersicht", + "viewSessions": "Sitzungen", + "timeframeHour": "Stunde", + "timeframeDay": "Tag", + "timeframeWeek": "Woche", + "timeframeMonth": "Monat", + "filtersLabel": "Filter:", + "clearAll": "Alle löschen", + "timezoneLabel": "Zeitzone:", + "sortByLabel": "Sortieren nach:", + "noSessionCostData": "Keine Sitzungskostendaten", + "noSessionCostSubtitle": "Sitzungsaufschlüsselungen erscheinen, wenn die Nutzung erfasst wird.", + "sessionActive": "Aktiv", + "sessionInactive": "Inaktiv", + "requests": "Anfragen", + "inSuffix": "ein", + "outSuffix": "aus", + "avgPerRequest": "Durchschn./Anfrage", + "loadingUsageData": "Nutzungsdaten werden geladen", + "totalTokens": "Gesamte Token ({timeframe})", + "totalCost": "Gesamtkosten ({timeframe})", + "apiRequests": "API-Anfragen", + "avgTokensPerRequest": "Durchschn. Token/Anfrage", + "cacheReadTokens": "Cache-Lese-Token", + "cacheWriteTokens": "Cache-Schreib-Token", + "usageTrends": "Nutzungstrends ({timeframe})", + "peakLabel": "Spitze:", + "perTurnButton": "Pro Runde", + "cumulativeButton": "Kumulativ", + "noTrendData": "Keine Trenddaten für diesen Zeitraum", + "chartTokens": "Token", + "chartRequests": "Anfragen", + "tokenUsageByModel": "Token-Nutzung nach Modell", + "noModelUsageData": "Noch keine Modell-Nutzungsdaten", + "costDistributionByModel": "Kostenverteilung nach Modell", + "noCostData": "Noch keine Kostendaten", + "costByProvider": "Kosten nach Anbieter", + "noProviderData": "Noch keine Anbieterdaten", + "exportData": "Daten exportieren", + "exportCsvFiltered": "CSV exportieren (Gefiltert)", + "exportCsvFull": "CSV exportieren (Vollständig)", + "exportJson": "JSON exportieren", + "exporting": "Exportiere...", + "exportDescription": "Token-Nutzungsdaten für Analysen exportieren. \"Gefiltert\" exportiert nur die aktuell angezeigten Daten; \"Vollständig\" exportiert alle Einträge vom Server.", + "performanceInsights": "Leistungseinblicke", + "mostEfficientModel": "Effizientestes Modell", + "mostUsedModel": "Meistgenutztes Modell", + "optimizationPotential": "Optimierungspotenzial", + "savingsPossible": "{pct}% Einsparungen möglich", + "modelEfficiencyComparison": "Modell-Effizienzvergleich", + "modelPerformance": "Modell-Performance", + "topSessionsByCost": "Top-Sitzungen nach Kosten", + "requestsLabel": "Anfragen", + "avgCost": "Durchschn. Kosten", + "avgTokens": "Durchschn. Token", + "noUsageData": "Keine Nutzungsdaten verfügbar", + "noUsageDataSubtitle": "Die Token-Nutzung wird hier angezeigt, sobald Agenten starten", + "refresh": "Aktualisieren" + }, + "memoryBrowser": { + "hideSidebar": "Seitenleiste ausblenden", + "showSidebar": "Seitenleiste einblenden", + "fileCountSize": "{count} Dateien / {size}", + "indexing": "Indizierung…", + "newFile": "+ Neu", + "searchPlaceholder": "Dateien suchen...", + "searchResults": "{count} Ergebnisse", + "noFiles": "Keine Dateien", + "refresh": "Aktualisieren", + "toggleBacklinks": "Backlinks-Panel umschalten", + "links": "Links", + "edit": "Bearbeiten", + "delete": "Löschen", + "save": "Speichern", + "saving": "Speichern...", + "cancel": "Abbrechen", + "selectFilePrompt": "Datei zum Anzeigen auswählen", + "orSwitchView": "oder zur Gesundheits-/Pipeline-Ansicht wechseln", + "schemaWarnings": "Schema-Warnungen:", + "editPlaceholder": "Dateiinhalt bearbeiten...", + "loadingHermes": "Hermes-Speicher wird geladen", + "noHermesData": "Keine Hermes-Speicherdaten", + "hermesMemoryTitle": "Hermes-Speicher", + "hermesMemoryDesc": "Nur-Lese-Ansicht der persistenten Speicherdateien des Hermes-Agenten", + "noAgentMemory": "Keine Agenten-Speicherdatei gefunden", + "noUserMemory": "Keine Benutzer-Speicherdatei gefunden", + "runningDiagnostics": "Diagnose wird ausgeführt", + "noHealthData": "Keine Gesundheitsdaten", + "runDiagnostics": "Diagnose ausführen", + "healthCategories": "8 Kategorien / {time}", + "pipelineTitle": "Verarbeitungs-Pipeline", + "pipelineDesc": "Wissenspflegeoperationen inspiriert von den 6 Rs von Ars Contexta", + "pipelineReflect": "Reflektieren", + "pipelineReflectDesc": "Verbindungsmöglichkeiten zwischen Dateien finden", + "pipelineReweave": "Neu verweben", + "pipelineReweaveDesc": "Veraltete Dateien finden, die Aktualisierungen aus neueren verknüpften Dateien benötigen", + "pipelineGenerateMoc": "MOC generieren", + "pipelineGenerateMocDesc": "Inhalts-Karten automatisch aus Datei-Clustern generieren", + "processing": "Verarbeitung", + "filesProcessed": "{count} Dateien verarbeitet", + "noSuggestions": "Keine Vorschläge — die Wissensbasis ist gut vernetzt", + "mapsOfContent": "Inhalts-Karten ({count} Gruppen)", + "newFileTitle": "Neue Datei", + "directory": "Verzeichnis", + "fileName": "Name", + "fileType": "Typ", + "content": "Inhalt", + "contentOptional": "Optional...", + "create": "Erstellen", + "deleteFileTitle": "Datei löschen", + "permanentlyDelete": "Dauerhaft löschen:", + "outgoing": "Ausgehend ({count})", + "backlinks": "Backlinks ({count})", + "wikiLinks": "Wiki-Links ({count})" + }, + "userManagement": { + "adminAccessRequired": "Administratorzugang erforderlich", + "failedToLoadUsers": "Benutzer konnten nicht geladen werden", + "failedToCreate": "Benutzer konnte nicht erstellt werden", + "networkError": "Netzwerkfehler", + "userUpdated": "Benutzer aktualisiert", + "failedToUpdate": "Aktualisierung fehlgeschlagen", + "deletedUser": "Benutzer \"{username}\" gelöscht", + "failedToDelete": "Löschen fehlgeschlagen", + "failedToAction": "Anfrage konnte nicht {action} werden", + "requestActioned": "Anfrage für {email} wurde {action}", + "user": "Benutzer", + "accessDenied": "Zugriff verweigert", + "adminRequired": "Die Benutzerverwaltung erfordert Administratorrechte.", + "loadingUsers": "Benutzer werden geladen...", + "usersTitle": "Benutzer", + "usersSummary": "{count} registrierte Benutzer · {pending} ausstehende Genehmigungen", + "addLocalUser": "+ Lokalen Benutzer hinzufügen", + "cancel": "Abbrechen", + "pendingRequests": "{count, plural, one {# ausstehende Zugriffsanfrage} other {# ausstehende Zugriffsanfragen}}", + "identity": "Identität", + "attempts": "Versuche", + "lastAttempt": "Letzter Versuch", + "action": "Aktion", + "roleViewer": "Betrachter", + "roleOperator": "Operator", + "roleAdmin": "Administrator", + "noteOptional": "Notiz (optional)", + "confirm": "Bestätigen", + "reject": "Ablehnen", + "review": "Überprüfen", + "newLocalUser": "Neuer lokaler Benutzer", + "username": "Benutzername", + "password": "Passwort", + "displayName": "Anzeigename", + "creating": "Erstellen...", + "createUser": "Benutzer erstellen", + "colUser": "Benutzer", + "colProvider": "Anbieter", + "colRole": "Rolle", + "colLastLogin": "Letzter Login", + "colActions": "Aktionen", + "newPasswordOptional": "Neues Passwort (optional)", + "save": "Speichern", + "edit": "Bearbeiten", + "delete": "Löschen", + "never": "Nie", + "createdUser": "Benutzer \"{username}\" erstellt" + }, + "alertRules": { + "title": "Alarmregeln", + "description": "Automatische Alarme für Agenten-, Aufgaben- und Systemereignisse konfigurieren", + "evaluating": "Auswertung...", + "evaluateNow": "Jetzt auswerten", + "newRule": "+ Neue Regel", + "statTotalRules": "Regeln gesamt", + "statActive": "Aktiv", + "statTotalTriggers": "Auslösungen gesamt", + "evalResultsTitle": "Auswertungsergebnisse", + "dismiss": "Schließen", + "triggered": "AUSGELÖST", + "noRulesToEvaluate": "Keine Regeln zum Auswerten", + "loadingRules": "Regeln werden geladen...", + "noRulesConfigured": "Keine Alarmregeln konfiguriert", + "createRuleHint": "Erstellen Sie eine Regel, um über Systemereignisse benachrichtigt zu werden", + "never": "Nie", + "cooldown": "Abkühlung: {minutes}m", + "triggerCount": "Ausgelöst: {count}x", + "lastTriggered": "Zuletzt: {time}", + "deleteRule": "Regel löschen", + "newRuleTitle": "Neue Alarmregel", + "ruleName": "Regelname", + "ruleNamePlaceholder": "z. B. Agent-Offline-Alarm", + "ruleDescription": "Beschreibung", + "optionalDescription": "Optionale Beschreibung", + "entity": "Entität", + "entityAgent": "Agent", + "entityTask": "Aufgabe", + "entitySession": "Sitzung", + "entityActivity": "Aktivität", + "field": "Feld", + "operator": "Operator", + "value": "Wert", + "valuePlaceholder": "z. B. error", + "cooldownMinutes": "Abkühlung (Minuten)", + "notifyRecipient": "Benachrichtigen (Empfänger)", + "cancel": "Abbrechen", + "creating": "Erstellen...", + "createRule": "Regel erstellen", + "failedToCreate": "Regel konnte nicht erstellt werden", + "networkError": "Netzwerkfehler" + }, + "agentSquad": { + "failedToFetch": "Agenten konnten nicht abgerufen werden", + "errorOccurred": "Ein Fehler ist aufgetreten", + "failedToUpdateStatus": "Agentenstatus konnte nicht aktualisiert werden", + "loadingAgents": "Agenten werden geladen", + "title": "Agenten-Team", + "live": "Live", + "manual": "Manuell", + "addAgent": "+ Agent hinzufügen", + "refresh": "Aktualisieren", + "noAgents": "Keine Agenten gefunden", + "addFirstAgent": "Fügen Sie Ihren ersten Agenten hinzu, um zu beginnen", + "session": "Sitzung", + "totalTasks": "Aufgaben gesamt", + "inProgress": "In Bearbeitung", + "lastSeen": "Zuletzt gesehen", + "activity": "Aktivität", + "wake": "Aufwecken", + "busy": "Beschäftigt", + "sleep": "Schlafen", + "statusControl": "Statussteuerung", + "role": "Rolle", + "sessionKey": "Sitzungsschlüssel", + "notSet": "Nicht gesetzt", + "soulContent": "SOUL-Inhalt", + "soulPlaceholder": "Agentenpersönlichkeit und Anweisungen...", + "taskStatistics": "Aufgabenstatistiken", + "total": "Gesamt", + "assigned": "Zugewiesen", + "done": "Erledigt", + "created": "Erstellt", + "lastUpdated": "Zuletzt aktualisiert", + "saveChanges": "Änderungen speichern", + "cancel": "Abbrechen", + "editAgent": "Agent bearbeiten", + "createNewAgent": "Neuen Agenten erstellen", + "name": "Name", + "rolePlaceholder": "z. B. Forscher, Entwickler, Analyst", + "sessionKeyOptional": "Sitzungsschlüssel (optional)", + "sessionKeyPlaceholder": "ClawdBot-Sitzungskennung", + "soulContentOptional": "SOUL-Inhalt (optional)", + "createAgent": "Agent erstellen", + "failedToUpdate": "Agent konnte nicht aktualisiert werden", + "failedToCreate": "Agent konnte nicht erstellt werden", + "never": "Nie", + "justNow": "Gerade eben", + "minutesAgo": "vor {count}m", + "hoursAgo": "vor {count}h", + "daysAgo": "vor {count}d" + }, + "multiGateway": { + "title": "Gateway-Manager", + "description": "Mehrere OpenClaw-Gateway-Verbindungen verwalten", + "probeAll": "Alle testen", + "addGateway": "+ Gateway hinzufügen", + "connected": "Verbunden", + "disconnected": "Getrennt", + "noActiveConnection": "Keine aktive Verbindung", + "loadingGateways": "Gateways werden geladen...", + "noGateways": "Keine Gateways konfiguriert", + "addGatewayHint": "Gateway hinzufügen, um Verbindungen zu verwalten", + "discoveredGateways": "Entdeckte Gateways", + "discoveredGatewaysDesc": "Auf diesem Computer gefundene OpenClaw-Gateways", + "refresh": "Aktualisieren", + "running": "LÄUFT", + "stopped": "GESTOPPT", + "bind": "Binden", + "mode": "Modus", + "register": "Registrieren", + "directCliConnections": "Direkte CLI-Verbindungen", + "directCliDesc": "CLI-Tools, die direkt ohne Gateway verbunden sind", + "noDirectConnections": "Keine direkten CLI-Verbindungen", + "useApiConnect": "Verwenden Sie", + "toRegisterCli": "um ein CLI-Tool zu registrieren", + "role": "Rolle", + "heartbeat": "Heartbeat", + "never": "Nie", + "disconnect": "Trennen", + "neverProbed": "Nie getestet", + "primary": "PRIMÄR", + "connectedBadge": "VERBUNDEN", + "token": "Token", + "tokenSet": "Gesetzt", + "tokenNone": "Keiner", + "latency": "Latenz", + "last": "Zuletzt", + "gatewayVersion": "Gateway-Version", + "noHistory": "Noch kein Verlauf", + "colorKey": "Farblegende", + "colorKeyTitle": "Grün = online; Bernstein = Fehler; Rot = offline", + "lastLatency": "Letzte Latenz: {ms}ms", + "probeGateway": "Gateway testen", + "probing": "Testen...", + "probe": "Testen", + "connectToGateway": "Mit diesem Gateway verbinden", + "connect": "Verbinden", + "setPrimaryTitle": "Als primär festlegen", + "setPrimary": "Als primär festlegen", + "removeGateway": "Gateway entfernen", + "addGatewayTitle": "Gateway hinzufügen", + "name": "Name", + "namePlaceholder": "z. B. primary", + "host": "Host", + "port": "Port", + "tokenField": "Token", + "optional": "Optional", + "cancel": "Abbrechen", + "adding": "Hinzufügen...", + "addGatewaySubmit": "Gateway hinzufügen", + "failedToAdd": "Gateway konnte nicht hinzugefügt werden", + "networkError": "Netzwerkfehler" + }, + "nodes": { + "title": "Knoten / Instanzen", + "gatewayConnected": "Gateway verbunden", + "gatewayUnreachable": "Gateway nicht erreichbar", + "tabInstances": "Instanzen ({count})", + "tabDevices": "Geräte ({count})", + "loading": "Wird geladen...", + "noInstances": "Keine aktiven Instanzen. Knoten erscheinen hier, wenn sie sich mit dem Gateway verbinden.", + "colName": "Name", + "colClientId": "Client-ID", + "colPlatform": "Plattform", + "colVersion": "Version", + "colRoles": "Rollen", + "colStatus": "Status", + "colConnected": "Verbunden", + "colLastActivity": "Letzte Aktivität", + "colHostIp": "Host / IP", + "colDeviceId": "Geräte-ID", + "colPaired": "Gekoppelt", + "colLastSeen": "Zuletzt gesehen", + "colTrust": "Vertrauen", + "colActions": "Aktionen", + "pendingPairingRequests": "Ausstehende Kopplungsanfragen ({count})", + "approve": "Genehmigen", + "approving": "Genehmigung...", + "reject": "Ablehnen", + "rejecting": "Ablehnung...", + "noPairedDevices": "Keine gekoppelten Geräte.", + "pairedDevices": "Gekoppelte Geräte ({count})", + "trusted": "vertrauenswürdig", + "untrusted": "nicht vertrauenswürdig", + "rotateToken": "Token rotieren", + "revokeConfirm": "Widerrufen?", + "yes": "Ja", + "no": "Nein", + "revoke": "Widerrufen", + "hideTokens": "Token ausblenden", + "tokens": "Token ({count})", + "tokenUsed": "verwendet {time}", + "revoked": "widerrufen", + "rotate": "Rotieren" + }, + "activityFeed": { + "title": "Aktivität", + "live": "Live", + "paused": "Pausiert", + "refresh": "Aktualisieren", + "filterAgent": "Agent", + "filterAll": "Alle", + "filterType": "Typ", + "allTypes": "Alle Typen", + "filterLimit": "Limit", + "loadingActivities": "Aktivitäten werden geladen", + "noActivities": "Keine Aktivitäten gefunden", + "noActivityForAgent": "Keine Aktivität für {agent} aufgezeichnet", + "tryAdjustingFilters": "Versuchen Sie, die Filter anzupassen", + "entityTask": "Aufgabe:", + "entityCommentOn": "Kommentar zu:", + "entityAgent": "Agent:", + "showDetails": "Details anzeigen", + "activeSessions": "Aktive Sitzungen", + "agentStatus": "Status", + "lastSeen": "Zuletzt gesehen", + "lastAction": "Letzte Aktion", + "tasksAssigned": "Zugewiesene Aufgaben", + "inProgress": "In Bearbeitung", + "completed": "Abgeschlossen", + "events": "{count} Ereignisse", + "newer": "Neuer", + "older": "Älter", + "pageOf": "Seite {page} von {total}", + "footerAgentEvents": "{total} Ereignisse für {agent}", + "footerShowing": "{count} Aktivitäten werden angezeigt{filtered}", + "filtered": " (gefiltert)", + "lastUpdated": "Zuletzt aktualisiert: {time}" + }, + "standup": { + "title": "Tägliches Standup", + "viewCurrent": "Aktuell", + "viewHistory": "Verlauf", + "generating": "Wird generiert...", + "generate": "Generieren", + "export": "Exportieren", + "standupFor": "Standup vom {date}", + "generatedOn": "Generiert am {date}", + "statCompleted": "Abgeschlossen", + "statInProgress": "In Bearbeitung", + "statBlocked": "Blockiert", + "statOverdue": "Überfällig", + "teamAccomplishments": "Team-Leistungen", + "teamBlockers": "Team-Blocker", + "overdueTasks": "Überfällige Aufgaben", + "unassigned": "Nicht zugewiesen", + "individualReports": "Einzelberichte", + "activitySummary": "Aktivität: {actions} Aktionen, {comments} Kommentare", + "sectionCompleted": "Abgeschlossen ({count})", + "sectionInProgress": "In Bearbeitung ({count})", + "sectionAssigned": "Zugewiesen ({count})", + "sectionBlocked": "Blockiert ({count})", + "none": "Keine", + "noStandupGenerated": "Kein Standup generiert", + "selectDatePrompt": "Wählen Sie ein Datum und generieren Sie einen Bericht", + "generateToday": "Heutiges Standup generieren", + "noHistory": "Kein Standup-Verlauf gefunden", + "historyGenerated": "Generiert: {date}", + "historyAgentsParticipated": "{count} Agenten nahmen teil", + "historyCompleted": "Abgeschlossen: {count}", + "historyInProgress": "In Bearbeitung: {count}", + "historyBlocked": "Blockiert: {count}" + }, + "webhooks": { + "title": "Webhooks", + "configured": "{count, plural, one {# Webhook konfiguriert} other {# Webhooks konfiguriert}}", + "addWebhook": "+ Webhook hinzufügen", + "secretLabel": "Webhook-Geheimnis (jetzt speichern – wird nur einmal angezeigt)", + "dismiss": "Schließen", + "testSuccessful": "Test erfolgreich", + "testFailed": "Test fehlgeschlagen", + "testStatus": "Status:", + "testDuration": "Dauer:", + "testError": "Fehler:", + "localAutomations": "Lokale Webhook-Automatisierungen", + "localAutomationsDesc": "Lokale Scheduler-Aufgaben, die Webhook-Zustellung und Wiederholungen unterstützen", + "nextRun": "Nächste Ausführung {time}", + "noNextRun": "Keine nächste Ausführung geplant", + "running": "Wird ausgeführt...", + "run": "Ausführen", + "noWebhooks": "Keine Webhooks konfiguriert", + "noWebhooksDesc": "Fügen Sie einen Webhook hinzu, um HTTP-Benachrichtigungen für Ereignisse zu erhalten", + "allEvents": "Alle Ereignisse", + "eventCount": "{count, plural, one {# Ereignis} other {# Ereignisse}}", + "deliveries": "{count} Zustellungen", + "failed": "{count} fehlgeschlagen", + "lastFired": "Zuletzt ausgelöst {time}", + "sendTestEvent": "Testereignis senden", + "testing": "Wird getestet...", + "test": "Testen", + "disable": "Deaktivieren", + "enable": "Aktivieren", + "delete": "Löschen", + "recentDeliveries": "Letzte Zustellungen", + "noDeliveries": "Noch keine Zustellungen aufgezeichnet", + "newWebhook": "Neuer Webhook", + "formName": "Name", + "formUrl": "URL", + "formEvents": "Ereignisse", + "cancel": "Abbrechen", + "createWebhook": "Webhook erstellen" + }, + "skills": { + "title": "Skills-Hub", + "subtitle": "Skills lokal verwalten und externe Registrys durchsuchen.", + "localMode": "Lokaler Modus", + "gatewayMode": "Gateway-Modus", + "tabInstalled": "Installiert", + "tabRegistry": "Registry", + "searchPlaceholder": "Installierte Skills schnell finden...", + "searchResults": "{count} von {total} Skills werden angezeigt, die zu \"{query}\" passen", + "diskSyncActive": "Bidirektionale Festplattensynchronisierung aktiv (Scheduler alle 60s)", + "scanAll": "Alle scannen", + "scanningProgress": "Scannen {done}/{total}...", + "refreshNow": "Jetzt aktualisieren", + "scanning": "Scannen:", + "skillsScanned": "{count} Skills gescannt", + "dismiss": "schließen", + "addSkill": "Skill hinzufügen", + "initialContent": "Initialer SKILL.md-Inhalt", + "loadingSkills": "Skills werden geladen...", + "skillCount": "{count} von {total} Skills", + "noMatch": "Keine Skills entsprechen diesem Filter.", + "scan": "Scannen", + "view": "Anzeigen", + "registrySearchPlaceholder": "Skills suchen...", + "searching": "Suche...", + "search": "Suchen", + "installTo": "Installieren in:", + "installing": "Wird installiert...", + "install": "Installieren", + "noRegistryResults": "Keine Ergebnisse für \"{query}\" auf {registry}. Versuchen Sie eine andere Anfrage oder wechseln Sie die Registry.", + "registryPrompt": "Suchen Sie auf ClawdHub, skills.sh oder Awesome OpenClaw, um Agenten-Skills zu entdecken und zu installieren.", + "skillInstalled": "Skill installiert", + "installFailed": "Installation fehlgeschlagen", + "installingSkill": "Skill wird installiert", + "stepFetching": "SKILL.md aus Registry abrufen", + "stepScanning": "Sicherheitsscan durchführen", + "stepWriting": "Auf Festplatte schreiben und registrieren", + "security": "Sicherheit", + "viewInstalled": "Installierte anzeigen", + "done": "Fertig", + "close": "Schließen", + "delete": "Löschen", + "save": "Speichern", + "loadingSkillContent": "SKILL.md wird geladen...", + "noContent": "Kein Inhalt." + }, + "orchestration": { + "tabCommand": "Befehl", + "tabWorkflows": "Workflows", + "tabPipelines": "Pipelines", + "tabFleet": "Flotte", + "selectAgent": "Agent auswählen...", + "commandPlaceholder": "Befehl oder Nachricht an Agent senden...", + "send": "Senden", + "noTemplates": "Noch keine Workflow-Vorlagen", + "createFirstTemplate": "Erste Vorlage erstellen", + "cancel": "Abbrechen", + "new": "+ Neu", + "editTemplate": "Vorlage bearbeiten", + "newTemplate": "Neue Vorlage", + "templateName": "Vorlagenname", + "templateDescription": "Beschreibung (optional)", + "taskPromptPlaceholder": "Aufgaben-Prompt für den Agenten...", + "timeout": "Zeitüberschreitung", + "role": "Rolle", + "lastRun": "Letzte Ausführung", + "update": "Aktualisieren", + "save": "Speichern", + "totalAgents": "Agenten gesamt", + "online": "Online", + "busy": "Beschäftigt", + "errors": "Fehler" + } +} diff --git a/messages/en.json b/messages/en.json new file mode 100644 index 0000000000000000000000000000000000000000..cde3798f69358955d1363b8a9dc69527e9ec746f --- /dev/null +++ b/messages/en.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "Save", + "cancel": "Cancel", + "loading": "Loading...", + "error": "Error", + "search": "Search", + "confirm": "Confirm", + "delete": "Delete", + "edit": "Edit", + "close": "Close", + "back": "Back", + "next": "Next", + "retry": "Retry", + "or": "or", + "optional": "optional", + "language": "Language", + "dismiss": "Dismiss", + "continue": "Continue", + "selected": "Selected", + "detected": "Detected", + "now": "now", + "tryAgain": "Try again", + "skipToMainContent": "Skip to main content", + "builtWithCareBy": "Built with care by", + "viewRelease": "View Release", + "updateNow": "Update Now", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "moreIssues": "+ {count} more issue{count, plural, one {} other {s}}" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "Sign in to continue", + "username": "Username", + "password": "Password", + "signIn": "Sign in", + "signingIn": "Signing in...", + "signInWithGoogle": "Sign in with Google", + "loadingGoogleSignIn": "Loading Google Sign-In...", + "googleSignInFailed": "Google sign-in failed", + "networkError": "Network error", + "loginFailed": "Login failed", + "enterUsername": "Enter username", + "enterPassword": "Enter password", + "orchestrationTagline": "OpenClaw Agent Orchestration", + "accessRequestSubmitted": "Access Request Submitted", + "accessRequestDescription": "Your request has been sent to an administrator for review. You'll be able to sign in once approved.", + "tryAgain": "Try again", + "noAdminAccount": "No admin account created yet", + "noAdminDescription": "Set up your admin account to get started with Mission Control.", + "createAdminAccount": "Create Admin Account", + "welcomeToMC": "Welcome to Mission Control", + "settingUpMC": "Setting up Mission Control", + "createAdminToStart": "Create your admin account to get started", + "creatingAdmin": "Creating your admin account...", + "displayName": "Display Name", + "confirmPassword": "Confirm Password", + "atLeast12Chars": "At least 12 characters", + "repeatPassword": "Repeat your password", + "passwordsDoNotMatch": "Passwords do not match", + "passwordTooShort": "Password must be at least 12 characters", + "moreCharsNeeded": "{count} more character{count, plural, one {} other {s}} needed", + "firstTimeSetupOnly": "This page is only available during first-time setup.", + "checkingSetupStatus": "Checking setup status...", + "setupFailed": "Setup failed", + "failedToCheckSetup": "Failed to check setup status", + "validatingCredentials": "Validating credentials", + "creatingAdminAccount": "Creating admin account", + "configuringSession": "Configuring session", + "launchingDashboard": "Launching dashboard", + "usernameHint": "Lowercase letters, numbers, dots, hyphens, and underscores only" + }, + "nav": { + "overview": "Overview", + "agents": "Agents", + "tasks": "Tasks", + "chat": "Chat", + "channels": "Channels", + "skills": "Skills", + "memory": "Memory", + "activity": "Activity", + "logs": "Logs", + "costTracker": "Cost Tracker", + "nodes": "Nodes", + "approvals": "Approvals", + "office": "Office", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "Alerts", + "github": "GitHub", + "security": "Security", + "users": "Users", + "audit": "Audit", + "gateway": "Gateway", + "gateways": "Gateways", + "config": "Config", + "integrations": "Integrations", + "debug": "Debug", + "settings": "Settings", + "group": { + "observe": "OBSERVE", + "automate": "AUTOMATE", + "admin": "ADMIN" + }, + "collapseSidebar": "Collapse sidebar", + "expandSidebar": "Expand sidebar", + "more": "More" + }, + "settings": { + "language": "Language", + "languageDescription": "Choose your preferred display language", + "general": "General", + "security": "Security", + "dataRetention": "Data Retention", + "chatSettings": "Chat", + "gatewaySettings": "Gateway", + "title": "Settings", + "description": "Configure Mission Control behavior and retention policies", + "discard": "Discard", + "save": "Save", + "saving": "Saving...", + "saveChanges": "Save Changes", + "workspaceManagementLabel": "Workspace Management:", + "workspaceManagementDesc1": "To create or manage workspaces (tenant instances), go to the", + "superAdmin": "Super Admin", + "workspaceManagementDesc2": "panel under Admin > Super Admin in the sidebar. From there you can create new client instances, manage tenants, and monitor provisioning jobs.", + "securityDescription": "Scan your station security posture", + "securityScan": "Security Scan", + "hideScan": "Hide Scan", + "backups": "Backups", + "backupsDescription": "Create on-demand backups of MC database or gateway state", + "backupMcDatabase": "Backup MC Database", + "backupGatewayState": "Backup Gateway State", + "backingUp": "Backing up...", + "onboarding": "Onboarding", + "onboardingDescription": "Replay the setup wizard and reset the dashboard checklist", + "replayOnboarding": "Replay Onboarding", + "resetting": "Resetting..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "Agent Orchestration", + "authenticatingOperator": "Authenticating operator", + "detectingStationMode": "Detecting station mode", + "loadingControlConfig": "Loading control config", + "connectingRuntimeLinks": "Connecting runtime links", + "syncingAgentRegistry": "Syncing agent registry", + "loadingActiveSessions": "Loading active sessions", + "hydratingWorkspaceBoard": "Hydrating workspace board", + "mappingMemoryGraph": "Mapping memory graph", + "indexingSkillCatalog": "Indexing skill catalog" + }, + "header": { + "workspace": "Workspace", + "sessions": "Sessions", + "events": "Events", + "live": "Live", + "off": "Off", + "local": "Local", + "connected": "Connected", + "disconnected": "Disconnected", + "reconnecting": "Reconnecting", + "offline": "Offline", + "retry": "Retry {count}", + "jumpToSearch": "Jump to page, task, agent...", + "searchPlaceholder": "Search tasks, agents, activity, or type a page command...", + "searching": "Searching...", + "noResults": "No results found", + "typeToSearch": "Type to search entities or jump pages instantly", + "gatewayConnection": "Gateway Connection", + "status": "Status", + "host": "Host", + "latency": "Latency", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "Retries", + "clickToReconnect": "Click to reconnect", + "down": "Down", + "goToOverview": "Go to Overview", + "goToChat": "Go to Chat", + "goToTasks": "Go to Tasks", + "goToAgents": "Go to Agents", + "goToActivityFeed": "Go to Activity Feed", + "goToNotifications": "Go to Notifications", + "goToTokenUsage": "Go to Token Usage", + "goToLogs": "Go to Logs", + "goToMemoryBrowser": "Go to Memory Browser", + "goToIntegrations": "Go to Integrations", + "goToSettings": "Go to Settings", + "goToGateways": "Go to Gateways", + "goToGithubSync": "Go to GitHub Sync", + "goToOffice": "Go to Office", + "goToSkills": "Go to Skills", + "quickNavigation": "Quick navigation" + }, + "contextSwitcher": { + "localMode": "Local Mode", + "connected": "Connected", + "disconnected": "Disconnected", + "interface": "Interface", + "essential": "Essential", + "full": "Full", + "organizations": "ORGANIZATIONS", + "all": "All", + "noTools": "no tools", + "unlinked": "unlinked", + "newOrganization": "New organization...", + "usernamePlaceholder": "Username (OS user)", + "displayNamePlaceholder": "Display name", + "gatewayPortPlaceholder": "Gateway port (required)", + "installTools": "INSTALL TOOLS", + "usernameAndDisplayRequired": "Username and display name required", + "invalidUsernameFormat": "Invalid username format", + "gatewayPortRequired": "Gateway port required", + "creating": "Creating...", + "createUser": "Create User", + "createAndQueue": "Create + Queue" + }, + "localModeBanner": { + "noGatewayDetected": "No OpenClaw gateway detected", + "runningInLocalMode": " — running in Local Mode. Monitoring Claude Code sessions, tasks, and local data.", + "configureGateway": "Configure Gateway" + }, + "updateBanner": { + "updating": "Updating...", + "restartingServer": "Restarting server...", + "updateAvailable": "Update available: v{version}", + "newerVersionAvailable": " — a newer version of Mission Control is available.", + "updateFailed": "Update failed", + "networkError": "Network error — could not reach the server." + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "Updating OpenClaw...", + "openclawUpdated": "OpenClaw updated to v{version}", + "openclawUpdateAvailable": "OpenClaw update: v{version} available", + "installed": "installed: v{version}", + "changelog": "Changelog", + "copied": "Copied!", + "copyCommand": "Copy Command", + "updateFailed": "Update failed", + "networkError": "Network error — could not reach the server." + }, + "doctorBanner": { + "fixCompleted": "OpenClaw doctor fix completed", + "configDrift": "OpenClaw config drift detected", + "stateIntegrity": "OpenClaw state integrity warning", + "securityWarning": "OpenClaw security warning", + "doctorWarnings": "OpenClaw doctor warnings", + "runningFixes": "Running OpenClaw doctor fixes...", + "cleaningSessionStores": "Cleaning session stores...", + "archivingOrphanTranscripts": "Archiving orphan transcripts...", + "recheckingHealth": "Rechecking current instance health...", + "fixFailed": "OpenClaw doctor fix failed", + "networkError": "Network error — could not reach the server.", + "runningFix": "Running Fix...", + "runDoctorFix": "Run Doctor Fix" + }, + "liveFeed": { + "liveFeed": "Live Feed", + "showLiveFeed": "Show live feed", + "collapseFeed": "Collapse feed", + "closeFeed": "Close feed", + "noActivityYet": "No activity yet", + "eventsAppearLocal": "Events appear when you create tasks or agents update", + "eventsStreamGateway": "Events stream here from the gateway and local DB", + "activeSessions": "Active Sessions", + "noActiveSessions": "No active sessions", + "activeSession": "Active", + "idleSession": "Idle" + }, + "errorBoundary": { + "somethingWentWrong": "Something went wrong", + "unexpectedError": "An unexpected error occurred in this panel." + }, + "page": { + "showLiveFeed": "Show live feed", + "availableInFullMode": "{panel} is available in Full mode.", + "switchToFull": "Switch to Full", + "goToOverview": "Go to Overview", + "requiresGateway": "{panel} requires an OpenClaw gateway connection.", + "configureGateway": "Configure a gateway to enable this panel." + }, + "onboarding": { + "stationOnline": "Station Online", + "stationReady": "Your station is ready for agents.", + "welcome": { + "title": "Welcome to Mission Control", + "description": "Your station for AI agents. When agents dock here, they gain persistent memory, task management, coordinated workflows, and full observability. We've scanned your setup — here's what's online.", + "availableModes": "Available modes", + "localMode": "Local Mode", + "gatewayMode": "Gateway Mode", + "monitorClaude": "Monitor Claude Code sessions on this machine", + "taskTracking": "Task tracking and cost monitoring", + "sessionHistory": "Session history", + "singlePilot": "Single-pilot ops", + "orchestrateAgents": "Orchestrate multiple agents across machines", + "memorySkills": "Memory, skills, and inter-agent comms", + "webhookIntegrations": "Webhook integrations", + "requiresGateway": "Requires gateway", + "activeSessionsDetected": "{count} active session{count, plural, one {} other {s}} detected", + "noActiveSessions": "No active Claude sessions", + "gatewayConnected": "Gateway connected", + "localModeNoGateway": "Local mode — no gateway", + "agentsRegistered": "{count} agent{count, plural, one {} other {s}} registered", + "noAgentsYet": "No agents yet", + "gatewayRegistered": "Gateway: Mission Control registered", + "gatewayRegistrationPending": "Gateway registration pending", + "skipSetup": "Skip setup", + "getStarted": "Get started" + }, + "interfaceMode": { + "title": "Choose Your Station Layout", + "description": "Essential shows the core panels operators need most. Full unlocks every system on the station — memory, automation, security auditing, and more. You can switch anytime.", + "essential": "Essential", + "full": "Full", + "essentialDescription": "Streamlined ops — the panels you'll use daily: fleet overview, agents, tasks, chat, activity feed, logs, and settings.", + "essentialPanels1": "Fleet overview, Agents, Tasks, Chat", + "essentialPanels2": "Activity feed, Logs, Settings", + "essentialTotal": "7 panels total", + "fullDescription": "Full station access — adds memory browser, cron scheduling, webhooks, alerts, security audit, cost tracking, and gateway config.", + "fullIncludes": "Everything in Essential plus", + "fullPanels": "Memory, Cron, Webhooks, Audit", + "fullTotal": "All station systems unlocked" + }, + "gatewayLink": { + "title": "Gateway Link", + "description": "Mission Control registers its origin with the OpenClaw gateway so it can connect via WebSocket and manage agents remotely.", + "originRegistered": "Gateway origin registered", + "originAdded": "Mission Control origin added to gateway allowedOrigins", + "registrationPending": "Registration pending — will be configured on next capabilities check", + "deviceAuthConfigured": "Device auth configured", + "deviceAuthDisabled": "Device auth disabled — MC authenticates via gateway token", + "deviceAuthWillConfigure": "Will be configured alongside origin registration", + "testing": "Testing...", + "testConnection": "Test Connection", + "gatewayReachable": "Gateway reachable", + "gatewayUnreachable": "Gateway unreachable" + }, + "credentials": { + "title": "Secure Your Station", + "description": "The admin password protects your station console. The API key is a docking credential — agents present it when they register, so only authorized agents can dock.", + "checkingCredentials": "Checking credentials...", + "adminPassword": "Admin Password", + "passwordStrong": "Password is strong and non-default", + "passwordWeak": "Using a default or weak password — change AUTH_PASS in .env", + "apiKey": "API Key", + "apiKeyConfigured": "Configured — agents can dock using this key", + "apiKeyNotSet": "Not set — agents won't be able to dock without a configured key. Run: bash scripts/generate-env.sh --force", + "openSettings": "Open Settings", + "securityScan": "Security Scan", + "securityScanDescription": "Verify network, runtime, and OpenClaw hardening before you launch the station.", + "launchStation": "Launch Station", + "launchAnyway": "Launch anyway" + } + }, + "channels": { + "title": "Channels", + "loadingChannels": "Loading channels...", + "gatewayConnected": "Gateway Connected", + "gatewayDisconnected": "Gateway Disconnected", + "refresh": "Refresh", + "noChannelsConfigured": "No channels configured yet. Configure messaging platforms (WhatsApp, Telegram, Discord, Slack, etc.) in your OpenClaw gateway settings.", + "gatewayUnreachable": "Cannot reach the OpenClaw gateway. Check that it is running and accessible.", + "statusConnected": "Connected", + "statusRunning": "Running", + "statusConfigured": "Configured", + "statusInactive": "Inactive", + "probe": "Probe", + "probing": "Probing...", + "showQr": "Show QR", + "relink": "Relink", + "waitForScan": "Wait for scan", + "logout": "Logout", + "loggedOut": "Logged out.", + "profile": "Profile", + "editProfile": "Edit Profile", + "edit": "Edit", + "noProfileSet": "No profile set", + "displayName": "Display Name", + "username": "Username", + "about": "About", + "bio": "Bio", + "avatarUrl": "Avatar URL", + "bannerUrl": "Banner URL", + "website": "Website", + "lightning": "Lightning", + "saving": "Saving...", + "saveAndPublish": "Save & Publish", + "importFromRelays": "Import from Relays", + "hideAdvanced": "Hide Advanced", + "showAdvanced": "Show Advanced", + "cancel": "Cancel", + "profilePublished": "Profile published to relays.", + "saveFailed": "Save failed.", + "profileImported": "Profile imported from relays.", + "importFailed": "Import failed.", + "accounts": "{count, plural, one {Accounts ({count})} other {Accounts ({count})}}" + }, + "integrations": { + "title": "Integrations", + "loading": "Loading integrations...", + "connectedCount": "{connected} of {total} connected", + "pullAll": "Pull All", + "discard": "Discard", + "save": "Save", + "saving": "Saving...", + "saveChanges": "Save Changes", + "cancel": "Cancel", + "remove": "Remove", + "removeTitle": "Remove integration?", + "removeDescription": "This will remove {target} from the .env file. The gateway must be restarted for changes to take effect.", + "notSet": "not set", + "noIntegrationsInCategory": "No integrations in this category" + }, + "execApproval": { + "title": "Exec Approvals", + "pendingBadge": "{count} pending", + "realtimeLabel": "Real-time via WebSocket", + "viewApprovals": "Approvals", + "viewAllowlist": "Allowlist Config", + "filterAll": "All", + "filterPending": "Pending", + "filterResolved": "Resolved", + "noPendingApprovals": "No pending approvals. Execution requests from agents will appear here as an overlay.", + "noApprovals": "No approvals to display.", + "loadingAllowlist": "Loading allowlist...", + "addAgent": "Add agent", + "save": "Save", + "saving": "Saving...", + "reload": "Reload", + "noAgentsConfigured": "No agents configured. Add an agent ID above to create an allowlist.", + "addPattern": "Add pattern", + "noAllowlistPatterns": "No allowlist patterns. Commands will require manual approval.", + "previewMatches": "Preview: {count, plural, one {# recent command} other {# recent commands}} would match", + "andMore": "...and {count} more", + "allowOnce": "Allow once", + "alwaysAllow": "Always allow", + "deny": "Deny", + "statusExpired": "Expired", + "statusApproved": "Approved", + "statusDenied": "Denied" + }, + "notifications": { + "title": "Notifications", + "markAllRead": "Mark All Read", + "recipientLabel": "Recipient", + "recipientPlaceholder": "Agent name (e.g., my-agent)", + "noNotifications": "No notifications", + "markRead": "Mark read" + }, + "localAgentsDoc": { + "title": "Local AGENTS.md", + "noPathFound": "No local AGENTS.md found yet", + "openInVsCode": "Open in VS Code", + "copied": "Copied", + "copyPath": "Copy Path", + "collapse": "Collapse", + "expand": "Expand", + "loading": "Loading local AGENTS.md...", + "notDetected": "No local AGENTS.md detected.", + "checked": "Checked: {paths}" + }, + "memoryGraph": { + "loading": "Loading graph...", + "retry": "Retry", + "noMemoryDatabases": "No memory databases found", + "noMemoryDatabasesHint": "OpenClaw memory SQLite files not detected", + "allAgents": "all agents", + "filterFiles": "filter files...", + "statAgents": "agents", + "statFiles": "files", + "statChunks": "chunks", + "statSize": "size", + "legendSessions": "sessions", + "legendMemory": "memory", + "legendKnowledge": "knowledge", + "keyboardHint": "scroll to zoom / drag to pan / click node to drill in", + "chunks": "chunks", + "text": "text" + }, + "agentComms": { + "connecting": "Connecting to feed...", + "eventsCount": "{count} events", + "connectionGateway": "Gateway", + "connectionSse": "SSE", + "connectionPolling": "Polling", + "sourceLive": "Live", + "sourceMixed": "Mixed", + "sourceSeeded": "Seeded", + "sessions": "{active}/{total} sessions", + "scrollToLatest": "Scroll to latest", + "toLabel": "To:", + "composerPlaceholderTarget": "Message {name}... (Enter to send)", + "composerPlaceholderBroadcast": "Select a session or agent above, or type to broadcast...", + "send": "Send", + "noFeedEvents": "No feed events yet", + "noFilterEvents": "No {filter} events", + "noFeedEventsHint": "Connect to the gateway or wait for agent activity. Events from sessions, tools, chat, and traces will stream here in real time.", + "noFilterEventsHint": "Switch to \"All\" to see events from other categories, or wait for {filter} events to arrive." + }, + "agentDetail": { + "configTab": "Config", + "filesTab": "Files", + "toolsTab": "Tools", + "channelsTab": "Channels", + "cronTab": "Cron", + "modelsTab": "Models", + "workspaceFiles": "Workspace Files", + "refresh": "Refresh", + "charCount": "{count} chars", + "missing": "missing", + "selectFileToView": "Select a file to view or edit", + "reset": "Reset", + "saving": "Saving...", + "save": "Save", + "fileNotExistYet": "This file does not exist yet. You can create it by typing content and saving.", + "toolConfiguration": "Tool Configuration", + "profile": "Profile:", + "saved": "Saved", + "allowListCount": "Allow List ({count})", + "noAllowList": "No explicit allow list (using profile defaults)", + "addToolAllowList": "Add tool to allow list", + "add": "Add", + "alsoAllowCount": "Also Allow ({count})", + "alsoAllowDesc": "Extra tools allowed on top of the profile defaults.", + "none": "None", + "denyListCount": "Deny List ({count})", + "noDeniedTools": "No denied tools", + "addToolDenyList": "Add tool to deny list", + "channelStatus": "Channel Status", + "channelStatusDesc": "Channels available to {agent}", + "noChannelsFound": "No channels found...", + "connectedOf": "{connected}/{total} connected", + "noAccounts": "No accounts", + "configuredCount": "{count} configured", + "notConfigured": "Not configured", + "enabledCount": "{count} enabled", + "disabled": "Disabled", + "cronJobs": "Cron Jobs", + "allCronJobsCount": "{count} of {total} jobs", + "agentCronJobsCount": "{count} of {total} jobs", + "agentOnly": "Agent Only", + "showAll": "Show All", + "noCronJobsFound": "No cron jobs found", + "noCronJobsAssigned": "No cron jobs assigned to {agent}", + "noSchedule": "no schedule", + "enabled": "enabled", + "lastRun": "Last:", + "nextRun": "Next:", + "modelConfiguration": "Model Configuration", + "modelConfigDesc": "Configure primary and fallback models for this agent.", + "primaryModel": "Primary Model", + "defaultModel": "Default", + "fallbackChainCount": "Fallback Chain ({count})", + "fallbackChainDesc": "Models tried in order if the primary model fails or is unavailable.", + "noFallbackModels": "No fallback models configured.", + "moveUp": "Move up", + "moveDown": "Move down", + "remove": "Remove", + "addFallbackPlaceholder": "Add fallback model", + "sandboxMode": "Mode", + "sandboxWorkspace": "Workspace", + "sandboxNetwork": "Network", + "sandboxNetworkPlaceholder": "e.g., none, host", + "toolsSection": "Tools", + "subAgentsSection": "Sub-Agents", + "addSubAgentPlaceholder": "Add sub-agent", + "addSubAgent": "Add", + "subAgentModelOverride": "Sub-agent model override", + "defaultInherit": "Default (inherit)", + "modelLabel": "Model:", + "noSubAgents": "No sub-agents configured.", + "memorySearch": "Memory Search", + "cancel": "Cancel" + }, + "taskBoard": { + "title": "Task Board", + "allProjects": "All Projects", + "projects": "Projects", + "close": "Close", + "spawnSubAgent": "Spawn Sub-Agent", + "newTask": "New Task", + "refresh": "Refresh", + "spawnAgentPlaceholder": "Agent name", + "spawnTaskPlaceholder": "Task description", + "timeoutTitle": "Timeout (minutes)", + "spawning": "Spawning...", + "spawn": "Spawn", + "noActiveSpawnRequests": "No active spawn requests", + "dismissError": "Dismiss error", + "taskBoardAriaLabel": "Task Board", + "columnAriaLabel": "{title} column, {count} tasks", + "colInbox": "Inbox", + "colAssigned": "Assigned", + "colInProgress": "In Progress", + "colReview": "Review", + "colQualityReview": "Quality Review", + "colDone": "Done", + "recurring": "RECURRING", + "spawned": "SPAWNED", + "spawnedFromTask": "Spawned from task #{id}", + "unassigned": "Unassigned", + "due": "Due:", + "dropTasksHere": "Drop tasks here", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "claudeCodeTasks": "Claude Code Tasks", + "collapse": "Collapse", + "expand": "Expand", + "loading": "Loading...", + "noTeamTasksFound": "No team tasks found", + "noTeamTasksDesc": "No Claude Code team tasks are currently active.", + "taskCount": "{count, plural, one {# task} other {# tasks}}", + "blocked": "blocked", + "hermesScheduledTasks": "Hermes Scheduled Tasks", + "noScheduledTasksFound": "No scheduled tasks found", + "noScheduledTasksDesc": "No Hermes scheduled tasks are currently active.", + "noSchedule": "no schedule", + "enabled": "enabled", + "disabled": "disabled", + "createNewTask": "Create New Task", + "fieldTitle": "Title", + "fieldDescription": "Description", + "fieldPriority": "Priority", + "fieldProject": "Project", + "fieldAssignTo": "Assign To", + "fieldTags": "Tags", + "makeRecurring": "Make Recurring", + "createRecurringTask": "Create Recurring Task", + "createTask": "Create Task", + "cancel": "Cancel", + "editTask": "Edit Task", + "fieldStatus": "Status", + "saveChanges": "Save Changes", + "edit": "Edit", + "deleteTaskConfirm": "Delete \"{title}\"?", + "delete": "Delete", + "closeTaskDetails": "Close task details", + "noDescription": "No description", + "taskDetailTabs": "Task detail tabs", + "tabDetails": "Details", + "tabComments": "Comments", + "tabQualityReview": "Quality Review", + "tabSession": "Session", + "ticket": "Ticket", + "project": "Project", + "status": "Status", + "priority": "Priority", + "assignedTo": "Assigned To", + "created": "Created", + "issue": "Issue", + "branch": "Branch", + "pr": "PR", + "live": "Live", + "postingAs": "Posting as", + "newComment": "New comment...", + "addComment": "Add Comment", + "broadcastToSubscribers": "Broadcast to subscribers", + "broadcastPlaceholder": "Broadcast message to all subscribers...", + "broadcast": "Broadcast", + "broadcastSent": "Broadcast sent to {count} subscribers", + "loadingComments": "Loading comments...", + "noComments": "No comments yet", + "aegisQualityReview": "Aegis Quality Review", + "noReviews": "No reviews yet", + "reviewerPlaceholder": "Reviewer name", + "reviewNotesPlaceholder": "Review notes...", + "submit": "Submit", + "loadingTranscript": "Loading transcript...", + "noSessionMessages": "No session messages" + }, + "cronManagement": { + "title": "Cron Management", + "subtitle": "Schedule and manage recurring jobs", + "loading": "Loading...", + "refresh": "Refresh", + "addJob": "Add Job", + "calendarView": "Calendar View", + "calendarViewDescLocal": "Times shown in your local timezone", + "calendarViewDesc": "Times shown in UTC", + "prev": "Prev", + "today": "Today", + "next": "Next", + "calMode_agenda": "Agenda", + "calMode_week": "Week", + "calMode_month": "Month", + "searchPlaceholder": "Search jobs...", + "allAgents": "All Agents", + "allStates": "All States", + "enabled": "Enabled", + "disabled": "Disabled", + "all": "All", + "sortName": "Name", + "sortSchedule": "Schedule", + "sortLastRun": "Last Run", + "sortNextRun": "Next Run", + "ascending": "Asc", + "descending": "Desc", + "noJobsMatchFilters": "No jobs match the current filters.", + "uniqueJobs": "{count, plural, one {# unique job} other {# unique jobs}}", + "noJobsForDay": "No jobs scheduled on this date.", + "jobCount": "{count, plural, one {# job} other {# jobs}}", + "runsCount": "{count, plural, one {# run} other {# runs}}", + "totalRunsCount": "{count, plural, one {# total run} other {# total runs}}", + "moreJobs": "+{count} more", + "firstRun": "first {time}", + "scheduledJobs": "Scheduled Jobs", + "jobsCount": "{count} of {total} jobs", + "loadingJobs": "Loading jobs...", + "noCronJobsFound": "No cron jobs found.", + "colJobName": "Job Name", + "colAgent": "Agent", + "colSchedule": "Schedule", + "colModel": "Model", + "colStatus": "Status", + "colLastRun": "Last Run", + "colNextRun": "Next Run", + "colActions": "Actions", + "enable": "Enable", + "disable": "Disable", + "run": "Run", + "runNowForce": "Run Now (Force)", + "runNowIfDue": "Run Now (If Due)", + "clone": "Clone", + "history": "History", + "configuration": "Configuration", + "delivery": "Delivery", + "source": "Source", + "localSchedulerAutomation": "Local Scheduler / Automation", + "command": "Command", + "timing": "Timing", + "recentLogs": "Recent Logs", + "lastRun": "Last Run", + "nextRun": "Next Run", + "timezone": "Timezone", + "remove": "Remove", + "close": "Close", + "noLogsAvailable": "No logs available.", + "runHistoryTitle": "Run History: {name}", + "totalRuns": "{count, plural, one {# run} other {# runs}} total", + "filterRunsPlaceholder": "Filter runs...", + "timestamp": "Timestamp", + "duration": "Duration", + "error": "Error", + "noRunHistoryAvailable": "No run history available.", + "loadMore": "Load more", + "addNewCronJob": "Add New Cron Job", + "fieldJobName": "Job Name", + "fieldSchedule": "Schedule (Cron Format)", + "quickSelect": "Quick select...", + "scheduleFormatHint": "Format: minute hour day month dayOfWeek", + "fieldCommand": "Command", + "fieldModelOptional": "Model (Optional)", + "modelHint": "Leave empty to use the agent or gateway default model.", + "fieldStaggerOptional": "Stagger Offset (Optional)", + "seconds": "seconds", + "staggerHint": "Delay execution to avoid overlapping with other jobs on the same schedule.", + "fieldDescriptionOptional": "Description (Optional)", + "descriptionPlaceholder": "What does this job do?", + "cancel": "Cancel", + "claudeCodeTeams": "Claude Code Teams", + "teamsCount": "{count, plural, one {# team} other {# teams}}", + "collapse": "Collapse", + "expand": "Expand", + "noClaudeCodeTeams": "No Claude Code teams found in ~/.claude/teams/", + "membersCount": "{count, plural, one {# member} other {# members}}" + }, + "sessionDetails": { + "title": "Session Management", + "subtitle": "Monitor and manage active agent sessions", + "filter": "Filter", + "filterAll": "All Sessions", + "filterActive": "Active Only", + "filterIdle": "Idle Only", + "sortBy": "Sort by", + "sortAge": "Age", + "sortTokens": "Token Usage", + "sortModel": "Model", + "timeWindow": "Time Window", + "last1h": "Last 1h", + "last6h": "Last 6h", + "last24h": "Last 24h", + "last7d": "Last 7d", + "allTime": "All", + "global": "Global", + "unknown": "Unknown", + "sessionCount": "{filtered} of {total} sessions", + "activeCount": "{count} active", + "noSessionsMatch": "No sessions match the current filter", + "model": "Model", + "tokenUsage": "Token Usage", + "sessionDetails": "Session Details", + "kind": "Kind", + "id": "ID", + "lastActivity": "Last Activity", + "messages": "Messages", + "label": "Label", + "addLabel": "Click to add label...", + "sessionControls": "Session Controls", + "thinking": "Thinking", + "verbose": "Verbose", + "reasoning": "Reasoning", + "off": "Off", + "on": "On", + "minimal": "Minimal", + "low": "Low", + "medium": "Medium", + "high": "High", + "xhigh": "X-High", + "full": "Full", + "stream": "Stream", + "modelInformation": "Model Information", + "fullName": "Full Name", + "provider": "Provider", + "description": "Description", + "monitor": "Monitor", + "pause": "Pause", + "terminate": "Terminate", + "working": "Working...", + "delete": "Delete", + "deleteConfirm": "Delete?", + "yes": "Yes", + "no": "No", + "confirmTerminate": "Are you sure you want to terminate this session?", + "failedMonitor": "Failed to monitor session", + "failedPause": "Failed to pause session", + "failedTerminate": "Failed to terminate session", + "sessionOverview": "Session Overview", + "totalSessions": "Total Sessions", + "active": "Active", + "idle": "Idle", + "subAgents": "Sub-agents", + "cronJobs": "Cron Jobs", + "modelDistribution": "Model Distribution", + "highTokenUsage": "High Token Usage", + "highTokenUsageDesc": "{count} sessions are using more than 80% of their token limit." + }, + "costTracker": { + "title": "Cost Tracker", + "subtitle": "Token usage, costs, and spend analysis across agents, models, and sessions", + "loadingCostData": "Loading cost data", + "noUsageData": "No usage data yet", + "noUsageDataDesc": "Usage data appears as agents run sessions and consume tokens. Start a session or dock an agent to begin tracking costs.", + "refresh": "Refresh", + "totalCost": "Total Cost ({timeframe})", + "totalTokens": "Total Tokens", + "apiRequests": "API Requests", + "activeAgents": "Active Agents", + "taskAttributed": "Task-Attributed", + "usageTrends": "Usage Trends", + "perTurn": "Per-Turn", + "cumulative": "Cumulative", + "noTrendData": "No trend data for this timeframe", + "tokenUsageByModel": "Token Usage by Model", + "noModelData": "No model data", + "costDistributionByModel": "Cost Distribution by Model", + "noCostData": "No cost data", + "performanceInsights": "Performance Insights", + "mostEfficientModel": "Most Efficient Model", + "avgTokensPerRequest": "Avg Tokens/Request", + "optimizationPotential": "Optimization Potential", + "savingsPossible": "savings possible", + "exportData": "Export Data", + "exportDataDesc": "Download token usage records, model stats, and cost breakdowns", + "exporting": "Exporting...", + "noAgentData": "No per-agent data", + "noAgentDataDesc": "Token usage records will appear once agents start reporting", + "agents": "Agents", + "totalCostDays": "Total Cost ({days}d)", + "avgPer1kTokens": "Avg $/1K Tokens", + "perAgentCost": "Per-Agent Cost", + "agentBreakdown": "Agent Breakdown", + "inputTokens": "Input Tokens", + "outputTokens": "Output Tokens", + "ioRatio": "I/O Ratio", + "lastActive": "Last Active", + "noTaskCosts": "No task-attributed costs", + "tokens": "tokens", + "sortBy": "Sort by", + "noSessionCostData": "No session cost data", + "noSessionCostDataDesc": "Session-level breakdowns appear once usage is recorded.", + "activeStatus": "Active", + "inactiveStatus": "Inactive", + "requests": "requests", + "inShort": "in", + "outShort": "out", + "avgPerReq": "avg/req", + "noTaskCostData": "No task cost data", + "noTaskCostDataDesc": "Costs will be attributed to tasks once agents work on assigned tasks", + "tasksWithCosts": "Tasks with Costs", + "attributedCost": "Attributed Cost", + "attributedTokens": "Attributed Tokens", + "unattributed": "Unattributed", + "tasksByCost": "Tasks by Cost", + "reqs": "reqs" + }, + "superAdmin": { + "accessDenied": "Access Denied", + "accessDeniedDesc": "Super Mission Control requires admin privileges.", + "loading": "Loading super admin data...", + "title": "Super Mission Control", + "subtitleLocal": "Local control plane view over scheduler automations and runtime state.", + "subtitleMultiTenant": "Multi-tenant provisioning control plane with approval gates and safer destructive actions.", + "addWorkspace": "+ Add Workspace", + "refresh": "Refresh", + "activeOrgs": "Active Orgs", + "pendingInProgress": "Pending / In Progress", + "erroredOrgs": "Errored Orgs", + "queuedApprovals": "Queued Approvals", + "createNewWorkspace": "Create New Workspace", + "createWorkspaceHint": "Fill in the workspace details below and click Create + Queue to provision a new client instance.", + "slugPlaceholder": "Slug (e.g. acme)", + "displayNamePlaceholder": "Display name", + "linuxUserPlaceholder": "Linux user (optional)", + "planStandard": "Standard", + "planPro": "Pro", + "planEnterprise": "Enterprise", + "gatewayPortPlaceholder": "Gateway port", + "dashboardPortPlaceholder": "Dashboard port", + "dryRun": "Dry-run", + "live": "(live)", + "createAndQueue": "Create + Queue", + "tabOrganizations": "Organizations", + "tabJobs": "jobs", + "tabEvents": "events", + "searchOrganizations": "Search organizations", + "showing": "Showing {shown} of {total}", + "colTenant": "Tenant", + "colSystemUser": "System User", + "colOwner": "Owner", + "colStatus": "Status", + "colLatestJob": "Latest Job", + "colAction": "Action", + "unassigned": "unassigned", + "by": "by", + "unknownCreator": "unknown", + "localReadOnly": "Local read-only", + "queueDecommission": "Queue Decommission", + "noMatchingOrgs": "No matching organizations.", + "prev": "Prev", + "next": "Next", + "page": "Page {page} / {total}", + "searchJobs": "Search jobs", + "colJob": "Job", + "colRequestedApproved": "Requested/Approved", + "reqShort": "Req", + "apprShort": "Appr", + "view": "View", + "viewEvents": "View events", + "approveAndRun": "Approve + Run", + "approve": "Approve", + "reject": "Reject", + "running": "Running...", + "run": "Run", + "noMatchingJobs": "No matching jobs.", + "showingEventsForJob": "Showing events for job #{jobId}", + "selectJobForEvents": "Select a job to inspect provisioning event log.", + "noEventsYet": "No events for this job yet.", + "queueDecommissionTitle": "Queue Decommission: {name}", + "reviewImpact": "Review impact before creating the job.", + "dryRunRecommended": "Dry-run (recommended)", + "dryRunDesc": "No system changes, validates commands and logs a full plan execution.", + "liveExecution": "Live execution", + "liveExecutionDesc": "Will stop services and apply teardown changes after approval + run.", + "removeLinuxUser": "Remove Linux user", + "removeLinuxUserDesc": "Runs `userdel -r` and removes home directory.", + "removeStateDirs": "Remove state/workspace dirs", + "removeStateDirsDesc": "Deletes `.openclaw` and `workspace` paths when user is kept.", + "impactSummary": "Impact summary", + "impactStopsService": "Stops and disables `openclaw-gateway@{user}.service`.", + "impactRemovesEnv": "Removes `/etc/openclaw-tenants/{user}.env`.", + "impactLinuxUserRemoved": "Linux user will be removed.", + "impactStateDirsRemoved": "State/workspace directories will be removed.", + "impactRetained": "Linux user and directories are retained.", + "reasonOptional": "Reason (optional)", + "typeSlugLabel": "Type", + "toConfirmLive": "to confirm live decommission", + "cancel": "Cancel", + "queueing": "Queueing...", + "queueDryRunDecommission": "Queue Dry-run Decommission", + "queueLiveDecommission": "Queue Live Decommission", + "slugAndNameRequired": "Slug and display name are required", + "tenantCreated": "Tenant {slug} created. Bootstrap job queued.", + "jobExecuted": "Job #{jobId} executed", + "jobApprovedExecuted": "Job #{jobId} approved and executed", + "typeToConfirm": "Type {slug} to confirm live decommission", + "decommissionQueuedDryRun": "Decommission job queued for {slug} (dry-run)", + "decommissionQueued": "Decommission job queued for {slug}", + "optionalReason": "Optional reason for {action}:", + "jobActioned": "Job #{jobId} {action}d" + }, + "auditTrail": { + "title": "Audit Trail", + "eventsLogged": "{count, plural, one {# event} other {# events}} logged", + "refresh": "Refresh", + "allActions": "All actions", + "groupAuth": "Auth", + "groupUsers": "Users", + "groupAgents": "Agents", + "groupSystem": "System", + "groupConfig": "Config", + "groupWorkspaces": "Workspaces", + "actionLogin": "Login", + "actionLoginFailed": "Failed login", + "actionLogout": "Logout", + "actionLoginGoogle": "Google login", + "actionGoogleDisconnect": "Google disconnected", + "actionPasswordChange": "Password change", + "actionProfileUpdate": "Profile update", + "actionUserCreate": "User created", + "actionUserUpdate": "User updated", + "actionUserDelete": "User deleted", + "actionRoleDenied": "Access denied", + "actionAccessRequest": "Access requested", + "actionAccessApprove": "Access approved", + "actionAccessDeny": "Access denied", + "actionAgentRegister": "Agent registered", + "actionAgentCreate": "Agent created", + "actionAgentUpdate": "Agent updated", + "actionAgentDelete": "Agent deleted", + "actionAgentConfigSync": "Config synced", + "actionLocalAgentSync": "Local agents synced", + "actionSettingsUpdate": "Settings updated", + "actionAutoBackup": "Auto backup", + "actionBackupCreate": "Backup created", + "actionBackupDelete": "Backup deleted", + "actionHeartbeatCheck": "Heartbeat check", + "actionIntegrationTest": "Integration test", + "actionCleanup": "Cleanup", + "actionExport": "Export", + "actionTokenRotate": "Token rotated", + "actionGatewayConfigUpdate": "Gateway config updated", + "actionWorkspaceCreate": "Workspace created", + "actionWorkspaceUpdate": "Workspace updated", + "actionWorkspaceDelete": "Workspace deleted", + "filterByActor": "Filter by actor...", + "noEvents": "No audit events found", + "userRef": "user #{id}", + "previous": "Previous", + "next": "Next", + "pageOf": "Page {page} of {total}", + "adminRequired": "Admin access required to view audit logs", + "failedFetch": "Failed to fetch audit log", + "detailUsername": "username", + "detailRole": "role", + "detailName": "name", + "detailPasswordReset": "password reset", + "detailChanged": "changed", + "detailSize": "size", + "detailMarkedOffline": "marked offline", + "detailAgent": "agent", + "detailSessions": "sessions", + "detailEvents": "events", + "detailRemoved": "removed", + "detailType": "type" + }, + "securityAudit": { + "title": "Security Audit", + "subtitle": "Security posture, auth events, trust scores, and threat detection", + "timeframeHour": "Hour", + "timeframeDay": "Day", + "timeframeWeek": "Week", + "timeframeMonth": "Month", + "loadingSecurityData": "Loading security data", + "securityPosture": "Security Posture", + "blendedScore": "Blended score: 70% infrastructure configuration, 30% event history.", + "infrastructureScan": "Infrastructure Scan", + "scanCredentials": "Credentials", + "scanNetwork": "Network", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "Runtime", + "scanOs": "OS Security", + "authEvents": "Auth Events", + "noAuthEvents": "No auth events in this timeframe", + "colType": "Type", + "colActor": "Actor", + "colIP": "IP", + "colTime": "Time", + "agentTrustScores": "Agent Trust Scores", + "noAgentTrustData": "No agent trust data available", + "flagged": "flagged", + "secretExposureAlerts": "Secret Exposure Alerts", + "noSecretsDetected": "No secrets detected", + "colFile": "File", + "colPreview": "Preview", + "colStatus": "Status", + "colDetected": "Detected", + "statusResolved": "resolved", + "statusActive": "active", + "mcpToolAudit": "MCP Tool Audit", + "noToolUsageData": "No tool usage data", + "chartSuccess": "Success", + "chartFailure": "Failure", + "rateLimitAbuseSignals": "Rate Limit / Abuse Signals", + "noRateLimitSignals": "No rate limit signals", + "hits": "{hits} hits", + "injectionAttempts": "Injection Attempts", + "noInjectionAttempts": "No injection attempts detected", + "colSource": "Source", + "colInput": "Input", + "statusBlocked": "blocked", + "statusPassed": "passed", + "securityTimeline": "Security Timeline ({timeframe})", + "noTimelineData": "No timeline data", + "chartAuthEvents": "Auth Events", + "chartInjections": "Injections", + "chartSecrets": "Secrets", + "chartToolCalls": "Tool Calls", + "agentEvalDashboard": "Agent Eval Dashboard", + "overallConvergence": "Overall Convergence", + "crossAgentAlignment": "Cross-agent alignment across eval layers", + "noEvalData": "No eval data available", + "convergence": "Convergence:", + "drift": "drift", + "fixPrefix": "Fix: {fix}", + "issueCount": "{count, plural, one {# issue} other {# issues}}" + }, + "office": { + "title": "Command Deck", + "subtitle": "Monitor your crew in real time", + "loadingLocalSessions": "Scanning local sessions...", + "loadingOffice": "Loading office...", + "activeCount": "{count} active", + "standbyCount": "{count} standby", + "alertCount": "{count} alert", + "offlineCount": "{count} offline", + "buttonDeck": "Deck", + "buttonCrewChart": "Crew Chart", + "refresh": "Refresh", + "emptyDeck": "The deck is empty", + "emptyDeckSubtitle": "Deploy agents to see them appear here", + "crewHeader": "CREW", + "onlineCount": "{count} online", + "filterAll": "All", + "filterWorking": "Working", + "filterIdle": "Idle", + "filterNeedsAttention": "Needs Attention", + "filterRunning": "Running", + "filterNotRunning": "Not Running", + "noWorkersInFilter": "No workers in this filter.", + "noRecentActivity": "No recent activity", + "activeStatus": "active", + "idleMinutes": "{minutes}m idle", + "mainDeck": "MAIN DECK", + "radarLabel": "Radar", + "resetView": "Reset", + "showCrewButton": "Show Crew", + "hideCrewButton": "Hide Crew", + "showRadarButton": "Show Radar", + "hideRadarButton": "Hide Radar", + "showLogButton": "Show Log", + "hideLogButton": "Hide Log", + "resetLayout": "Reset Layout", + "deckLog": "Deck Log", + "noEventsYet": "No events yet. Click a zone or run an action.", + "legendActive": "Active", + "legendStandby": "Standby", + "legendOther": "Other", + "hotspotUp": "Up", + "hotspotDown": "Down", + "hotspotLeft": "Left", + "hotspotRight": "Right", + "hotspotFineMinusX": "Fine -X", + "hotspotFinePlusX": "Fine +X", + "hotspotWider": "Wider", + "hotspotNarrower": "Narrower", + "hotspotTaller": "Taller", + "hotspotShorter": "Shorter", + "segmentedBy": "Segmented by", + "segmentCategory": "Category", + "segmentRole": "Role", + "segmentStatus": "Status", + "currentActivity": "Current Activity", + "taskStatTotal": "Total", + "taskStatAssigned": "Assigned", + "taskStatActive": "Active", + "taskStatDone": "Done", + "sessionLabel": "Session:", + "quickActions": "Quick Actions", + "actionFocus": "Focus", + "actionPair": "Pair", + "actionBreak": "Break", + "openFlightDeck": "Open in Flight Deck", + "openingFlightDeck": "Opening Flight Deck...", + "flightDeckCompanion": "Private/pro companion app for session deep-dive", + "flightDeckRequired": "Flight Deck Required", + "flightDeckDescription": "Flight Deck is the private/pro companion app for Mission Control.", + "flightDeckNotInstalled": "It looks like Flight Deck is not installed on this machine. Install it to open agent sessions with richer controls and diagnostics.", + "maybeLater": "Maybe Later", + "downloadFlightDeck": "Download Flight Deck", + "moving": "moving", + "neverSeen": "Never seen", + "justNow": "Just now", + "minutesAgo": "{minutes}m ago", + "hoursAgo": "{hours}h ago", + "daysAgo": "{days}d ago" + }, + "githubSync": { + "title": "GitHub Issues Sync", + "subtitle": "Import GitHub issues as Mission Control tasks", + "loading": "Loading GitHub sync...", + "connectedAs": "GitHub: {user}", + "notConfigured": "GitHub: not configured", + "tokenNotConfigured": "GitHub token not configured", + "tokenNotConfiguredDesc": "Set GITHUB_TOKEN in Integrations to enable issue sync. You can still browse sync history and linked tasks below.", + "importIssues": "Import Issues", + "labelRepository": "Repository", + "placeholderRepo": "owner/repo", + "labelLabels": "Labels (optional)", + "placeholderLabels": "bug,enhancement", + "labelState": "State", + "stateOpen": "Open", + "stateClosed": "Closed", + "stateAll": "All", + "labelAssignAgent": "Assign to Agent (optional)", + "unassigned": "Unassigned", + "buttonPreview": "Preview", + "buttonImport": "Import", + "twoWaySync": "Two-Way Sync", + "syncAll": "Sync All", + "enableSync": "Enable", + "disableSync": "Disable", + "syncButton": "Sync", + "noProjectsLinked": "No projects linked to GitHub repos. Set a GitHub repo in Project Management.", + "previewTitle": "Preview ({count} issues)", + "colNumber": "#", + "colTitle": "Title", + "colLabels": "Labels", + "colState": "State", + "colCreated": "Created", + "syncHistory": "Sync History", + "colRepo": "Repo", + "colIssues": "Issues", + "colStatus": "Status", + "colSyncedAt": "Synced At", + "noSyncHistory": "No sync history yet. Import issues above to get started.", + "linkedTasks": "Linked Tasks", + "linkedTasksWithCount": "Linked Tasks ({count})", + "colTask": "Task", + "colPriority": "Priority", + "colGitHub": "GitHub", + "colSynced": "Synced", + "noLinkedTasks": "No tasks linked to GitHub issues yet.", + "syncResultImported": "Imported: {count}", + "syncResultSkipped": "Skipped: {count}", + "syncResultErrors": "Errors: {count}", + "enterRepo": "Enter a repository (owner/repo)", + "noIssuesFound": "No issues found matching filters", + "failedFetchIssues": "Failed to fetch issues", + "networkError": "Network error", + "syncFailed": "Sync failed", + "failedToggleSync": "Failed to toggle sync", + "importedFeedback": "Imported {imported} {imported, plural, one {issue} other {issues}}, skipped {skipped}" + }, + "agentCost": { + "title": "Agent Cost Breakdown", + "subtitle": "Per-agent token usage and spend analysis", + "loadingAgentCosts": "Loading agent costs", + "viewOverview": "Overview", + "viewPerAgentDB": "Per-Agent DB", + "timeframeHour": "Hour", + "timeframeDay": "Day", + "timeframeWeek": "Week", + "timeframeMonth": "Month", + "noAgentCostData": "No agent cost data available", + "noAgentCostSubtitle": "Cost data will appear once agents start using tokens", + "refresh": "Refresh", + "activeAgents": "Active Agents", + "totalCost": "Total Cost ({timeframe})", + "mostExpensive": "Most Expensive", + "mostEfficient": "Most Efficient", + "taskAttributed": "Task-Attributed", + "unattributed": "{cost} unattributed", + "costDistributionByAgent": "Cost Distribution by Agent", + "noCostData": "No cost data", + "costTrends": "Cost Trends (Top 5 Agents)", + "noTrendData": "No trend data", + "costComparison": "Cost Comparison", + "costEfficiency": "Cost Efficiency ($/1K Tokens per Agent)", + "agentCostRanking": "Agent Cost Ranking", + "noTaskCosts": "No task-attributed costs for this agent", + "tasksTab": "Tasks ({count})", + "modelsTab": "Models ({count})", + "sessionCount": "{count, plural, one {# session} other {# sessions}}", + "requestCount": "{count, plural, one {# req} other {# reqs}}", + "tokens": "tokens", + "ofTotal": "{pct}% of total", + "reqs": "{count} reqs", + "inputTokens": "Input Tokens", + "outputTokens": "Output Tokens", + "ioRatio": "I/O Ratio", + "lastActive": "Last Active", + "modelBreakdown": "Model Breakdown", + "inSuffix": "in", + "outSuffix": "out", + "noPerAgentData": "No per-agent data in database", + "noPerAgentDataSubtitle": "Token usage records will appear once agents start reporting heartbeats", + "agentCountDB": "Agents (DB)", + "totalCostDays": "Total Cost ({days}d)", + "totalTokens": "Total Tokens", + "avgPer1kTokens": "Avg $/1K Tokens", + "perAgentCostDB": "Per-Agent Cost (Database)", + "agentTokenBreakdown": "Agent Token Breakdown", + "chartCost": "Cost ($)" + }, + "tokenDashboard": { + "title": "Token & Cost Dashboard", + "subtitle": "Monitor token usage and costs across models and sessions", + "viewOverview": "Overview", + "viewSessions": "Sessions", + "timeframeHour": "Hour", + "timeframeDay": "Day", + "timeframeWeek": "Week", + "timeframeMonth": "Month", + "filtersLabel": "Filters:", + "clearAll": "Clear all", + "timezoneLabel": "Timezone:", + "sortByLabel": "Sort by:", + "noSessionCostData": "No session cost data", + "noSessionCostSubtitle": "Session-level breakdowns appear once usage is recorded.", + "sessionActive": "Active", + "sessionInactive": "Inactive", + "requests": "requests", + "inSuffix": "in", + "outSuffix": "out", + "avgPerRequest": "avg/req", + "loadingUsageData": "Loading usage data", + "totalTokens": "Total Tokens ({timeframe})", + "totalCost": "Total Cost ({timeframe})", + "apiRequests": "API Requests", + "avgTokensPerRequest": "Avg Tokens/Request", + "cacheReadTokens": "Cache Read Tokens", + "cacheWriteTokens": "Cache Write Tokens", + "usageTrends": "Usage Trends ({timeframe})", + "peakLabel": "Peak:", + "perTurnButton": "Per-Turn", + "cumulativeButton": "Cumulative", + "noTrendData": "No trend data for this timeframe", + "chartTokens": "Tokens", + "chartRequests": "Requests", + "tokenUsageByModel": "Token Usage by Model", + "noModelUsageData": "No model usage data yet", + "costDistributionByModel": "Cost Distribution by Model", + "noCostData": "No cost data yet", + "costByProvider": "Cost by Provider", + "noProviderData": "No provider data yet", + "exportData": "Export Data", + "exportCsvFiltered": "Export CSV (Filtered)", + "exportCsvFull": "Export CSV (Full)", + "exportJson": "Export JSON", + "exporting": "Exporting...", + "exportDescription": "Export token usage data for analysis. \"Filtered\" exports only the currently displayed data; \"Full\" exports all records from the server.", + "performanceInsights": "Performance Insights", + "mostEfficientModel": "Most Efficient Model", + "mostUsedModel": "Most Used Model", + "optimizationPotential": "Optimization Potential", + "savingsPossible": "{pct}% savings possible", + "modelEfficiencyComparison": "Model Efficiency Comparison", + "modelPerformance": "Model Performance", + "topSessionsByCost": "Top Sessions by Cost", + "requestsLabel": "Requests", + "avgCost": "Avg Cost", + "avgTokens": "Avg Tokens", + "noUsageData": "No usage data available", + "noUsageDataSubtitle": "Token usage will appear here once agents start running", + "refresh": "Refresh" + }, + "memoryBrowser": { + "hideSidebar": "Hide sidebar", + "showSidebar": "Show sidebar", + "fileCountSize": "{count} files / {size}", + "indexing": "indexing…", + "newFile": "+ new", + "searchPlaceholder": "Search files...", + "searchResults": "{count} results", + "noFiles": "no files", + "refresh": "refresh", + "toggleBacklinks": "Toggle backlinks panel", + "links": "links", + "edit": "edit", + "delete": "delete", + "save": "save", + "saving": "saving...", + "cancel": "cancel", + "selectFilePrompt": "select a file to view", + "orSwitchView": "or switch to health / pipeline view", + "schemaWarnings": "Schema warnings:", + "editPlaceholder": "Edit file content...", + "loadingHermes": "Loading Hermes memory", + "noHermesData": "No Hermes memory data", + "hermesMemoryTitle": "Hermes Memory", + "hermesMemoryDesc": "Read-only view of Hermes agent persistent memory files", + "noAgentMemory": "No agent memory file found", + "noUserMemory": "No user memory file found", + "runningDiagnostics": "Running diagnostics", + "noHealthData": "No health data", + "runDiagnostics": "Run Diagnostics", + "healthCategories": "8 categories / {time}", + "pipelineTitle": "Processing Pipeline", + "pipelineDesc": "Knowledge maintenance operations inspired by Ars Contexta's 6 Rs", + "pipelineReflect": "Reflect", + "pipelineReflectDesc": "Find connection opportunities between files", + "pipelineReweave": "Reweave", + "pipelineReweaveDesc": "Find stale files needing updates from newer linked files", + "pipelineGenerateMoc": "Generate MOC", + "pipelineGenerateMocDesc": "Auto-generate Maps of Content from file clusters", + "processing": "Processing", + "filesProcessed": "{count} files processed", + "noSuggestions": "No suggestions — knowledge base looks well-connected", + "mapsOfContent": "Maps of Content ({count} groups)", + "newFileTitle": "new file", + "directory": "directory", + "fileName": "name", + "fileType": "type", + "content": "content", + "contentOptional": "optional...", + "create": "Create", + "deleteFileTitle": "delete file", + "permanentlyDelete": "permanently delete:", + "outgoing": "Outgoing ({count})", + "backlinks": "Backlinks ({count})", + "wikiLinks": "Wiki-links ({count})" + }, + "userManagement": { + "adminAccessRequired": "Admin access required", + "failedToLoadUsers": "Failed to load users", + "failedToCreate": "Failed to create user", + "networkError": "Network error", + "userUpdated": "User updated", + "failedToUpdate": "Failed to update", + "deletedUser": "Deleted user \"{username}\"", + "failedToDelete": "Failed to delete", + "failedToAction": "Failed to {action} request", + "requestActioned": "Request {action}d for {email}", + "user": "user", + "accessDenied": "Access Denied", + "adminRequired": "User management requires admin privileges.", + "loadingUsers": "Loading users...", + "usersTitle": "Users", + "usersSummary": "{count} registered users · {pending} pending approvals", + "addLocalUser": "+ Add Local User", + "cancel": "Cancel", + "pendingRequests": "{count, plural, one {# Pending Access Request} other {# Pending Access Requests}}", + "identity": "Identity", + "attempts": "Attempts", + "lastAttempt": "Last Attempt", + "action": "Action", + "roleViewer": "Viewer", + "roleOperator": "Operator", + "roleAdmin": "Admin", + "noteOptional": "Note (optional)", + "confirm": "Confirm", + "reject": "Reject", + "review": "Review", + "newLocalUser": "New Local User", + "username": "Username", + "password": "Password", + "displayName": "Display name", + "creating": "Creating...", + "createUser": "Create User", + "colUser": "User", + "colProvider": "Provider", + "colRole": "Role", + "colLastLogin": "Last Login", + "colActions": "Actions", + "newPasswordOptional": "New password (optional)", + "save": "Save", + "edit": "Edit", + "delete": "Delete", + "never": "Never", + "createdUser": "Created user \"{username}\"" + }, + "alertRules": { + "title": "Alert Rules", + "description": "Configure automated alerts for agent, task, and system events", + "evaluating": "Evaluating...", + "evaluateNow": "Evaluate Now", + "newRule": "+ New Rule", + "statTotalRules": "Total Rules", + "statActive": "Active", + "statTotalTriggers": "Total Triggers", + "evalResultsTitle": "Evaluation Results", + "dismiss": "Dismiss", + "triggered": "TRIGGERED", + "noRulesToEvaluate": "No rules to evaluate", + "loadingRules": "Loading rules...", + "noRulesConfigured": "No alert rules configured", + "createRuleHint": "Create a rule to get notified about system events", + "never": "Never", + "cooldown": "Cooldown: {minutes}m", + "triggerCount": "Triggered: {count}x", + "lastTriggered": "Last: {time}", + "deleteRule": "Delete rule", + "newRuleTitle": "New Alert Rule", + "ruleName": "Rule Name", + "ruleNamePlaceholder": "e.g., Agent Offline Alert", + "ruleDescription": "Description", + "optionalDescription": "Optional description", + "entity": "Entity", + "entityAgent": "Agent", + "entityTask": "Task", + "entitySession": "Session", + "entityActivity": "Activity", + "field": "Field", + "operator": "Operator", + "value": "Value", + "valuePlaceholder": "e.g., error", + "cooldownMinutes": "Cooldown (minutes)", + "notifyRecipient": "Notify (recipient)", + "cancel": "Cancel", + "creating": "Creating...", + "createRule": "Create Rule", + "failedToCreate": "Failed to create rule", + "networkError": "Network error" + }, + "agentSquad": { + "failedToFetch": "Failed to fetch agents", + "errorOccurred": "An error occurred", + "failedToUpdateStatus": "Failed to update agent status", + "loadingAgents": "Loading agents", + "title": "Agent Squad", + "live": "Live", + "manual": "Manual", + "addAgent": "+ Add Agent", + "refresh": "Refresh", + "noAgents": "No agents found", + "addFirstAgent": "Add your first agent to get started", + "session": "Session", + "totalTasks": "Total Tasks", + "inProgress": "In Progress", + "lastSeen": "Last seen", + "activity": "Activity", + "wake": "Wake", + "busy": "Busy", + "sleep": "Sleep", + "statusControl": "Status Control", + "role": "Role", + "sessionKey": "Session Key", + "notSet": "Not set", + "soulContent": "SOUL Content", + "soulPlaceholder": "Agent personality and instructions...", + "taskStatistics": "Task Statistics", + "total": "Total", + "assigned": "Assigned", + "done": "Done", + "created": "Created", + "lastUpdated": "Last Updated", + "saveChanges": "Save Changes", + "cancel": "Cancel", + "editAgent": "Edit Agent", + "createNewAgent": "Create New Agent", + "name": "Name", + "rolePlaceholder": "e.g., researcher, developer, analyst", + "sessionKeyOptional": "Session Key (Optional)", + "sessionKeyPlaceholder": "ClawdBot session identifier", + "soulContentOptional": "SOUL Content (Optional)", + "createAgent": "Create Agent", + "failedToUpdate": "Failed to update agent", + "failedToCreate": "Failed to create agent", + "never": "Never", + "justNow": "Just now", + "minutesAgo": "{count}m ago", + "hoursAgo": "{count}h ago", + "daysAgo": "{count}d ago" + }, + "multiGateway": { + "title": "Gateway Manager", + "description": "Manage multiple OpenClaw gateway connections", + "probeAll": "Probe All", + "addGateway": "+ Add Gateway", + "connected": "Connected", + "disconnected": "Disconnected", + "noActiveConnection": "No active connection", + "loadingGateways": "Loading gateways...", + "noGateways": "No gateways configured", + "addGatewayHint": "Add a gateway to start managing connections", + "discoveredGateways": "Discovered Gateways", + "discoveredGatewaysDesc": "OpenClaw gateways found on this machine", + "refresh": "Refresh", + "running": "RUNNING", + "stopped": "STOPPED", + "bind": "Bind", + "mode": "Mode", + "register": "Register", + "directCliConnections": "Direct CLI Connections", + "directCliDesc": "CLI tools connected directly without a gateway", + "noDirectConnections": "No direct CLI connections", + "useApiConnect": "Use", + "toRegisterCli": "to register a CLI tool", + "role": "Role", + "heartbeat": "Heartbeat", + "never": "Never", + "disconnect": "Disconnect", + "neverProbed": "Never probed", + "primary": "PRIMARY", + "connectedBadge": "CONNECTED", + "token": "Token", + "tokenSet": "Set", + "tokenNone": "None", + "latency": "Latency", + "last": "Last", + "gatewayVersion": "Gateway version", + "noHistory": "No history yet", + "colorKey": "Color key", + "colorKeyTitle": "Green = online; amber = error; red = offline", + "lastLatency": "Last latency: {ms}ms", + "probeGateway": "Probe gateway", + "probing": "Probing...", + "probe": "Probe", + "connectToGateway": "Connect to this gateway", + "connect": "Connect", + "setPrimaryTitle": "Set as primary", + "setPrimary": "Set Primary", + "removeGateway": "Remove gateway", + "addGatewayTitle": "Add Gateway", + "name": "Name", + "namePlaceholder": "e.g., primary", + "host": "Host", + "port": "Port", + "tokenField": "Token", + "optional": "Optional", + "cancel": "Cancel", + "adding": "Adding...", + "addGatewaySubmit": "Add Gateway", + "failedToAdd": "Failed to add gateway", + "networkError": "Network error" + }, + "nodes": { + "title": "Nodes / Instances", + "gatewayConnected": "Gateway Connected", + "gatewayUnreachable": "Gateway Unreachable", + "tabInstances": "Instances ({count})", + "tabDevices": "Devices ({count})", + "loading": "Loading...", + "noInstances": "No active instances. Nodes appear here when they connect to the gateway.", + "colName": "Name", + "colClientId": "Client ID", + "colPlatform": "Platform", + "colVersion": "Version", + "colRoles": "Roles", + "colStatus": "Status", + "colConnected": "Connected", + "colLastActivity": "Last Activity", + "colHostIp": "Host / IP", + "colDeviceId": "Device ID", + "colPaired": "Paired", + "colLastSeen": "Last Seen", + "colTrust": "Trust", + "colActions": "Actions", + "pendingPairingRequests": "Pending Pairing Requests ({count})", + "approve": "Approve", + "approving": "Approving...", + "reject": "Reject", + "rejecting": "Rejecting...", + "noPairedDevices": "No paired devices.", + "pairedDevices": "Paired Devices ({count})", + "trusted": "trusted", + "untrusted": "untrusted", + "rotateToken": "Rotate Token", + "revokeConfirm": "Revoke?", + "yes": "Yes", + "no": "No", + "revoke": "Revoke", + "hideTokens": "Hide Tokens", + "tokens": "Tokens ({count})", + "tokenUsed": "used {time}", + "revoked": "revoked", + "rotate": "Rotate" + }, + "activityFeed": { + "title": "Activity", + "live": "Live", + "paused": "Paused", + "refresh": "Refresh", + "filterAgent": "Agent", + "filterAll": "All", + "filterType": "Type", + "allTypes": "All Types", + "filterLimit": "Limit", + "loadingActivities": "Loading activities", + "noActivities": "No activities found", + "noActivityForAgent": "No activity recorded for {agent}", + "tryAdjustingFilters": "Try adjusting your filters", + "entityTask": "Task:", + "entityCommentOn": "Comment on:", + "entityAgent": "Agent:", + "showDetails": "Show details", + "activeSessions": "Active Sessions", + "agentStatus": "Status", + "lastSeen": "Last seen", + "lastAction": "Last action", + "tasksAssigned": "Tasks assigned", + "inProgress": "In progress", + "completed": "Completed", + "events": "{count} events", + "newer": "Newer", + "older": "Older", + "pageOf": "Page {page} of {total}", + "footerAgentEvents": "{total} events for {agent}", + "footerShowing": "Showing {count} activities{filtered}", + "filtered": "(filtered)", + "lastUpdated": "Last updated: {time}" + }, + "standup": { + "title": "Daily Standup", + "viewCurrent": "Current", + "viewHistory": "History", + "generating": "Generating...", + "generate": "Generate", + "export": "Export", + "standupFor": "Standup for {date}", + "generatedOn": "Generated on {date}", + "statCompleted": "Completed", + "statInProgress": "In Progress", + "statBlocked": "Blocked", + "statOverdue": "Overdue", + "teamAccomplishments": "Team Accomplishments", + "teamBlockers": "Team Blockers", + "overdueTasks": "Overdue Tasks", + "unassigned": "Unassigned", + "individualReports": "Individual Reports", + "activitySummary": "Activity: {actions} actions, {comments} comments", + "sectionCompleted": "Completed ({count})", + "sectionInProgress": "In Progress ({count})", + "sectionAssigned": "Assigned ({count})", + "sectionBlocked": "Blocked ({count})", + "none": "None", + "noStandupGenerated": "No Standup Generated", + "selectDatePrompt": "Select a date and generate a report", + "generateToday": "Generate Today's Standup", + "noHistory": "No standup history found", + "historyGenerated": "Generated: {date}", + "historyAgentsParticipated": "{count} agents participated", + "historyCompleted": "Completed: {count}", + "historyInProgress": "In Progress: {count}", + "historyBlocked": "Blocked: {count}" + }, + "webhooks": { + "title": "Webhooks", + "configured": "{count, plural, one {# webhook configured} other {# webhooks configured}}", + "addWebhook": "+ Add Webhook", + "secretLabel": "Webhook Secret (save now - shown only once)", + "dismiss": "Dismiss", + "testSuccessful": "Test successful", + "testFailed": "Test failed", + "testStatus": "Status:", + "testDuration": "Duration:", + "testError": "Error:", + "localAutomations": "Local Webhook Automations", + "localAutomationsDesc": "Local scheduler tasks that support webhook delivery and retries", + "nextRun": "Next run {time}", + "noNextRun": "No next run scheduled", + "running": "Running...", + "run": "Run", + "noWebhooks": "No webhooks configured", + "noWebhooksDesc": "Add a webhook to receive HTTP notifications for events", + "allEvents": "All events", + "eventCount": "{count, plural, one {# event} other {# events}}", + "deliveries": "{count} deliveries", + "failed": "{count} failed", + "lastFired": "Last fired {time}", + "sendTestEvent": "Send test event", + "testing": "Testing...", + "test": "Test", + "disable": "Disable", + "enable": "Enable", + "delete": "Delete", + "recentDeliveries": "Recent Deliveries", + "noDeliveries": "No deliveries recorded yet", + "newWebhook": "New Webhook", + "formName": "Name", + "formUrl": "URL", + "formEvents": "Events", + "cancel": "Cancel", + "createWebhook": "Create Webhook" + }, + "skills": { + "title": "Skills Hub", + "subtitle": "Manage skills locally and browse external registries.", + "localMode": "Local mode", + "gatewayMode": "Gateway mode", + "tabInstalled": "Installed", + "tabRegistry": "Registry", + "searchPlaceholder": "Quick find installed skills...", + "searchResults": "Showing {count} of {total} skills matching \"{query}\"", + "diskSyncActive": "Bidirectional disk sync active (scheduler every 60s)", + "scanAll": "Scan All", + "scanningProgress": "Scanning {done}/{total}...", + "refreshNow": "Refresh Now", + "scanning": "Scanning:", + "skillsScanned": "{count} skills scanned", + "dismiss": "dismiss", + "addSkill": "Add Skill", + "initialContent": "Initial SKILL.md content", + "loadingSkills": "Loading skills...", + "skillCount": "{count} of {total} skills", + "noMatch": "No skills matched this filter.", + "scan": "Scan", + "view": "View", + "registrySearchPlaceholder": "Search skills...", + "searching": "Searching...", + "search": "Search", + "installTo": "Install to:", + "installing": "Installing...", + "install": "Install", + "noRegistryResults": "No results found for \"{query}\" on {registry}. Try a different query or switch registries.", + "registryPrompt": "Search ClawdHub, skills.sh, or Awesome OpenClaw to discover and install agent skills.", + "skillInstalled": "Skill Installed", + "installFailed": "Install Failed", + "installingSkill": "Installing Skill", + "stepFetching": "Fetching SKILL.md from registry", + "stepScanning": "Running security scan", + "stepWriting": "Writing to disk & registering", + "security": "Security", + "viewInstalled": "View Installed", + "done": "Done", + "close": "Close", + "delete": "Delete", + "save": "Save", + "loadingSkillContent": "Loading SKILL.md...", + "noContent": "No content." + }, + "orchestration": { + "tabCommand": "Command", + "tabWorkflows": "Workflows", + "tabPipelines": "Pipelines", + "tabFleet": "Fleet", + "selectAgent": "Select agent...", + "commandPlaceholder": "Send command or message to agent...", + "send": "Send", + "noTemplates": "No workflow templates yet", + "createFirstTemplate": "Create your first template", + "cancel": "Cancel", + "new": "+ New", + "editTemplate": "Edit Template", + "newTemplate": "New Template", + "templateName": "Template name", + "templateDescription": "Description (optional)", + "taskPromptPlaceholder": "Task prompt for the agent...", + "timeout": "Timeout", + "role": "Role", + "lastRun": "Last run", + "update": "Update", + "save": "Save", + "totalAgents": "Total Agents", + "online": "Online", + "busy": "Busy", + "errors": "Errors" + } +} diff --git a/messages/es.json b/messages/es.json new file mode 100644 index 0000000000000000000000000000000000000000..58b4eba2b2417ea545f6049b4e4d5554e19b2a4d --- /dev/null +++ b/messages/es.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "Guardar", + "cancel": "Cancelar", + "loading": "Cargando...", + "error": "Error", + "search": "Buscar", + "confirm": "Confirmar", + "delete": "Eliminar", + "edit": "Editar", + "close": "Cerrar", + "back": "Atrás", + "next": "Siguiente", + "retry": "Reintentar", + "or": "o", + "optional": "opcional", + "language": "Idioma", + "dismiss": "Descartar", + "continue": "Continuar", + "selected": "Seleccionado", + "detected": "Detectado", + "now": "ahora", + "tryAgain": "Intentar de nuevo", + "skipToMainContent": "Saltar al contenido principal", + "builtWithCareBy": "Construido con cuidado por", + "viewRelease": "Ver versión", + "updateNow": "Actualizar ahora", + "showDetails": "Mostrar detalles", + "hideDetails": "Ocultar detalles", + "moreIssues": "+ {count} {count, plural, one {problema más} other {problemas más}}" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "Inicia sesión para continuar", + "username": "Nombre de usuario", + "password": "Contraseña", + "signIn": "Iniciar sesión", + "signingIn": "Iniciando sesión...", + "signInWithGoogle": "Iniciar sesión con Google", + "loadingGoogleSignIn": "Cargando inicio de sesión con Google...", + "googleSignInFailed": "Error al iniciar sesión con Google", + "networkError": "Error de red", + "loginFailed": "Error de inicio de sesión", + "enterUsername": "Ingresa el nombre de usuario", + "enterPassword": "Ingresa la contraseña", + "orchestrationTagline": "Orquestación de agentes OpenClaw", + "accessRequestSubmitted": "Solicitud de acceso enviada", + "accessRequestDescription": "Tu solicitud ha sido enviada a un administrador para su revisión. Podrás iniciar sesión una vez aprobada.", + "tryAgain": "Intentar de nuevo", + "noAdminAccount": "Aún no se ha creado una cuenta de administrador", + "noAdminDescription": "Configura tu cuenta de administrador para comenzar con Mission Control.", + "createAdminAccount": "Crear cuenta de administrador", + "welcomeToMC": "Bienvenido a Mission Control", + "settingUpMC": "Configurando Mission Control", + "createAdminToStart": "Crea tu cuenta de administrador para comenzar", + "creatingAdmin": "Creando tu cuenta de administrador...", + "displayName": "Nombre para mostrar", + "confirmPassword": "Confirmar contraseña", + "atLeast12Chars": "Al menos 12 caracteres", + "repeatPassword": "Repite tu contraseña", + "passwordsDoNotMatch": "Las contraseñas no coinciden", + "passwordTooShort": "La contraseña debe tener al menos 12 caracteres", + "moreCharsNeeded": "{count} {count, plural, one {carácter más necesario} other {caracteres más necesarios}}", + "firstTimeSetupOnly": "Esta página solo está disponible durante la configuración inicial.", + "checkingSetupStatus": "Verificando estado de configuración...", + "setupFailed": "Error en la configuración", + "failedToCheckSetup": "Error al verificar el estado de configuración", + "validatingCredentials": "Validando credenciales", + "creatingAdminAccount": "Creando cuenta de administrador", + "configuringSession": "Configurando sesión", + "launchingDashboard": "Iniciando panel de control", + "usernameHint": "Solo letras minúsculas, números, puntos, guiones y guiones bajos" + }, + "nav": { + "overview": "Resumen", + "agents": "Agentes", + "tasks": "Tareas", + "chat": "Chat", + "channels": "Canales", + "skills": "Habilidades", + "memory": "Memoria", + "activity": "Actividad", + "logs": "Registros", + "costTracker": "Seguimiento de costos", + "nodes": "Nodos", + "approvals": "Aprobaciones", + "office": "Oficina", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "Alertas", + "github": "GitHub", + "security": "Seguridad", + "users": "Usuarios", + "audit": "Auditoría", + "gateway": "Gateway", + "gateways": "Gateways", + "config": "Configuración", + "integrations": "Integraciones", + "debug": "Depuración", + "settings": "Ajustes", + "group": { + "observe": "OBSERVAR", + "automate": "AUTOMATIZAR", + "admin": "ADMIN" + }, + "collapseSidebar": "Contraer barra lateral", + "expandSidebar": "Expandir barra lateral", + "more": "Más" + }, + "settings": { + "language": "Idioma", + "languageDescription": "Elige tu idioma de visualización preferido", + "general": "General", + "security": "Seguridad", + "dataRetention": "Retención de datos", + "chatSettings": "Chat", + "gatewaySettings": "Gateway", + "title": "Configuración", + "description": "Configure el comportamiento de Mission Control y las políticas de retención", + "discard": "Descartar", + "save": "Guardar", + "saving": "Guardando...", + "saveChanges": "Guardar cambios", + "workspaceManagementLabel": "Gestión del espacio de trabajo:", + "workspaceManagementDesc1": "Para crear o gestionar espacios de trabajo (instancias de inquilino), vaya al panel", + "superAdmin": "Super Admin", + "workspaceManagementDesc2": "en Admin > Super Admin en la barra lateral. Desde allí puede crear nuevas instancias de cliente, gestionar inquilinos y supervisar trabajos de aprovisionamiento.", + "securityDescription": "Analice la postura de seguridad de su estación", + "securityScan": "Análisis de seguridad", + "hideScan": "Ocultar análisis", + "backups": "Copias de seguridad", + "backupsDescription": "Cree copias de seguridad bajo demanda de la base de datos de MC o el estado de la puerta de enlace", + "backupMcDatabase": "Copia de seguridad de BD de MC", + "backupGatewayState": "Copia de seguridad del estado de la puerta de enlace", + "backingUp": "Realizando copia de seguridad...", + "onboarding": "Incorporación", + "onboardingDescription": "Reproduzca el asistente de configuración y restablezca la lista de verificación del panel", + "replayOnboarding": "Repetir incorporación", + "resetting": "Restableciendo..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "Orquestación de agentes", + "authenticatingOperator": "Autenticando operador", + "detectingStationMode": "Detectando modo de estación", + "loadingControlConfig": "Cargando configuración de control", + "connectingRuntimeLinks": "Conectando enlaces de ejecución", + "syncingAgentRegistry": "Sincronizando registro de agentes", + "loadingActiveSessions": "Cargando sesiones activas", + "hydratingWorkspaceBoard": "Inicializando panel de trabajo", + "mappingMemoryGraph": "Mapeando grafo de memoria", + "indexingSkillCatalog": "Indexando catálogo de habilidades" + }, + "header": { + "workspace": "Espacio de trabajo", + "sessions": "Sesiones", + "events": "Eventos", + "live": "En vivo", + "off": "Apagado", + "local": "Local", + "connected": "Conectado", + "disconnected": "Desconectado", + "reconnecting": "Reconectando", + "offline": "Sin conexión", + "retry": "Reintento {count}", + "jumpToSearch": "Ir a página, tarea, agente...", + "searchPlaceholder": "Buscar tareas, agentes, actividad o escribir un comando de página...", + "searching": "Buscando...", + "noResults": "No se encontraron resultados", + "typeToSearch": "Escribe para buscar entidades o saltar a páginas instantáneamente", + "gatewayConnection": "Conexión del Gateway", + "status": "Estado", + "host": "Host", + "latency": "Latencia", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "Reintentos", + "clickToReconnect": "Clic para reconectar", + "down": "Caído", + "goToOverview": "Ir a Resumen", + "goToChat": "Ir a Chat", + "goToTasks": "Ir a Tareas", + "goToAgents": "Ir a Agentes", + "goToActivityFeed": "Ir a Feed de actividad", + "goToNotifications": "Ir a Notificaciones", + "goToTokenUsage": "Ir a Uso de tokens", + "goToLogs": "Ir a Registros", + "goToMemoryBrowser": "Ir a Explorador de memoria", + "goToIntegrations": "Ir a Integraciones", + "goToSettings": "Ir a Ajustes", + "goToGateways": "Ir a Gateways", + "goToGithubSync": "Ir a Sincronización de GitHub", + "goToOffice": "Ir a Oficina", + "goToSkills": "Ir a Habilidades", + "quickNavigation": "Navegación rápida" + }, + "contextSwitcher": { + "localMode": "Modo local", + "connected": "Conectado", + "disconnected": "Desconectado", + "interface": "Interfaz", + "essential": "Esencial", + "full": "Completo", + "organizations": "ORGANIZACIONES", + "all": "Todos", + "noTools": "sin herramientas", + "unlinked": "sin vincular", + "newOrganization": "Nueva organización...", + "usernamePlaceholder": "Nombre de usuario (usuario del SO)", + "displayNamePlaceholder": "Nombre para mostrar", + "gatewayPortPlaceholder": "Puerto del gateway (obligatorio)", + "installTools": "INSTALAR HERRAMIENTAS", + "usernameAndDisplayRequired": "Nombre de usuario y nombre para mostrar son obligatorios", + "invalidUsernameFormat": "Formato de nombre de usuario inválido", + "gatewayPortRequired": "Puerto del gateway obligatorio", + "creating": "Creando...", + "createUser": "Crear usuario", + "createAndQueue": "Crear + Encolar" + }, + "localModeBanner": { + "noGatewayDetected": "No se detectó un gateway OpenClaw", + "runningInLocalMode": " — ejecutando en modo local. Monitoreando sesiones de Claude Code, tareas y datos locales.", + "configureGateway": "Configurar Gateway" + }, + "updateBanner": { + "updating": "Actualizando...", + "restartingServer": "Reiniciando servidor...", + "updateAvailable": "Actualización disponible: v{version}", + "newerVersionAvailable": " — hay una versión más reciente de Mission Control disponible.", + "updateFailed": "Error en la actualización", + "networkError": "Error de red — no se pudo contactar con el servidor." + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "Actualizando OpenClaw...", + "openclawUpdated": "OpenClaw actualizado a v{version}", + "openclawUpdateAvailable": "Actualización de OpenClaw: v{version} disponible", + "installed": "instalado: v{version}", + "changelog": "Registro de cambios", + "copied": "¡Copiado!", + "copyCommand": "Copiar comando", + "updateFailed": "Error en la actualización", + "networkError": "Error de red — no se pudo contactar con el servidor." + }, + "doctorBanner": { + "fixCompleted": "Corrección del doctor de OpenClaw completada", + "configDrift": "Desviación de configuración de OpenClaw detectada", + "stateIntegrity": "Advertencia de integridad de estado de OpenClaw", + "securityWarning": "Advertencia de seguridad de OpenClaw", + "doctorWarnings": "Advertencias del doctor de OpenClaw", + "runningFixes": "Ejecutando correcciones del doctor de OpenClaw...", + "cleaningSessionStores": "Limpiando almacenes de sesión...", + "archivingOrphanTranscripts": "Archivando transcripciones huérfanas...", + "recheckingHealth": "Verificando estado de la instancia actual...", + "fixFailed": "Error en la corrección del doctor de OpenClaw", + "networkError": "Error de red — no se pudo contactar con el servidor.", + "runningFix": "Ejecutando corrección...", + "runDoctorFix": "Ejecutar corrección del doctor" + }, + "liveFeed": { + "liveFeed": "Feed en vivo", + "showLiveFeed": "Mostrar feed en vivo", + "collapseFeed": "Contraer feed", + "closeFeed": "Cerrar feed", + "noActivityYet": "Aún no hay actividad", + "eventsAppearLocal": "Los eventos aparecen cuando creas tareas o los agentes se actualizan", + "eventsStreamGateway": "Los eventos se transmiten aquí desde el gateway y la base de datos local", + "activeSessions": "Sesiones activas", + "noActiveSessions": "Sin sesiones activas", + "activeSession": "Activa", + "idleSession": "Inactiva" + }, + "errorBoundary": { + "somethingWentWrong": "Algo salió mal", + "unexpectedError": "Ocurrió un error inesperado en este panel." + }, + "page": { + "showLiveFeed": "Mostrar feed en vivo", + "availableInFullMode": "{panel} está disponible en modo Completo.", + "switchToFull": "Cambiar a Completo", + "goToOverview": "Ir a Resumen", + "requiresGateway": "{panel} requiere una conexión al gateway OpenClaw.", + "configureGateway": "Configura un gateway para habilitar este panel." + }, + "onboarding": { + "stationOnline": "Estación en línea", + "stationReady": "Tu estación está lista para los agentes.", + "welcome": { + "title": "Bienvenido a Mission Control", + "description": "Tu estación para agentes de IA. Cuando los agentes se acoplan aquí, obtienen memoria persistente, gestión de tareas, flujos de trabajo coordinados y observabilidad completa. Hemos escaneado tu configuración — esto es lo que está en línea.", + "availableModes": "Modos disponibles", + "localMode": "Modo local", + "gatewayMode": "Modo Gateway", + "monitorClaude": "Monitorear sesiones de Claude Code en esta máquina", + "taskTracking": "Seguimiento de tareas y monitoreo de costos", + "sessionHistory": "Historial de sesiones", + "singlePilot": "Operaciones de piloto único", + "orchestrateAgents": "Orquestar múltiples agentes en diferentes máquinas", + "memorySkills": "Memoria, habilidades y comunicación entre agentes", + "webhookIntegrations": "Integraciones de Webhook", + "requiresGateway": "Requiere gateway", + "activeSessionsDetected": "{count} {count, plural, one {sesión activa detectada} other {sesiones activas detectadas}}", + "noActiveSessions": "Sin sesiones activas de Claude", + "gatewayConnected": "Gateway conectado", + "localModeNoGateway": "Modo local — sin gateway", + "agentsRegistered": "{count} {count, plural, one {agente registrado} other {agentes registrados}}", + "noAgentsYet": "Aún no hay agentes", + "gatewayRegistered": "Gateway: Mission Control registrado", + "gatewayRegistrationPending": "Registro del gateway pendiente", + "skipSetup": "Omitir configuración", + "getStarted": "Comenzar" + }, + "interfaceMode": { + "title": "Elige el diseño de tu estación", + "description": "Esencial muestra los paneles principales que los operadores más necesitan. Completo desbloquea todos los sistemas de la estación — memoria, automatización, auditoría de seguridad y más. Puedes cambiar en cualquier momento.", + "essential": "Esencial", + "full": "Completo", + "essentialDescription": "Operaciones simplificadas — los paneles que usarás a diario: resumen de flota, agentes, tareas, chat, feed de actividad, registros y ajustes.", + "essentialPanels1": "Resumen de flota, Agentes, Tareas, Chat", + "essentialPanels2": "Feed de actividad, Registros, Ajustes", + "essentialTotal": "7 paneles en total", + "fullDescription": "Acceso completo a la estación — añade explorador de memoria, programación Cron, Webhooks, alertas, auditoría de seguridad, seguimiento de costos y configuración del gateway.", + "fullIncludes": "Todo lo de Esencial más", + "fullPanels": "Memoria, Cron, Webhooks, Auditoría", + "fullTotal": "Todos los sistemas de la estación desbloqueados" + }, + "gatewayLink": { + "title": "Enlace del Gateway", + "description": "Mission Control registra su origen con el gateway OpenClaw para conectarse vía WebSocket y gestionar agentes remotamente.", + "originRegistered": "Origen del gateway registrado", + "originAdded": "Origen de Mission Control añadido a allowedOrigins del gateway", + "registrationPending": "Registro pendiente — se configurará en la próxima verificación de capacidades", + "deviceAuthConfigured": "Autenticación de dispositivo configurada", + "deviceAuthDisabled": "Autenticación de dispositivo deshabilitada — MC se autentica vía token del gateway", + "deviceAuthWillConfigure": "Se configurará junto con el registro de origen", + "testing": "Probando...", + "testConnection": "Probar conexión", + "gatewayReachable": "Gateway accesible", + "gatewayUnreachable": "Gateway inaccesible" + }, + "credentials": { + "title": "Asegura tu estación", + "description": "La contraseña de administrador protege la consola de tu estación. La clave API es una credencial de acoplamiento — los agentes la presentan al registrarse, para que solo los agentes autorizados puedan acoplarse.", + "checkingCredentials": "Verificando credenciales...", + "adminPassword": "Contraseña de administrador", + "passwordStrong": "La contraseña es fuerte y no es la predeterminada", + "passwordWeak": "Usando una contraseña predeterminada o débil — cambia AUTH_PASS en .env", + "apiKey": "Clave API", + "apiKeyConfigured": "Configurada — los agentes pueden acoplarse con esta clave", + "apiKeyNotSet": "No configurada — los agentes no podrán acoplarse sin una clave configurada. Ejecuta: bash scripts/generate-env.sh --force", + "openSettings": "Abrir ajustes", + "securityScan": "Escaneo de seguridad", + "securityScanDescription": "Verifica la red, el entorno de ejecución y el endurecimiento de OpenClaw antes de lanzar la estación.", + "launchStation": "Lanzar estación", + "launchAnyway": "Lanzar de todos modos" + } + }, + "channels": { + "title": "Canales", + "loadingChannels": "Cargando canales...", + "gatewayConnected": "Puerta de enlace conectada", + "gatewayDisconnected": "Puerta de enlace desconectada", + "refresh": "Actualizar", + "noChannelsConfigured": "No hay canales configurados. Configure plataformas de mensajería (WhatsApp, Telegram, Discord, Slack, etc.) en los ajustes de la puerta de enlace OpenClaw.", + "gatewayUnreachable": "No se puede acceder a la puerta de enlace OpenClaw. Verifique que esté en funcionamiento.", + "statusConnected": "Conectado", + "statusRunning": "En ejecución", + "statusConfigured": "Configurado", + "statusInactive": "Inactivo", + "probe": "Sondear", + "probing": "Sondeando...", + "showQr": "Mostrar QR", + "relink": "Volver a vincular", + "waitForScan": "Esperar escaneo", + "logout": "Cerrar sesión", + "loggedOut": "Sesión cerrada.", + "profile": "Perfil", + "editProfile": "Editar perfil", + "edit": "Editar", + "noProfileSet": "Sin perfil configurado", + "displayName": "Nombre para mostrar", + "username": "Nombre de usuario", + "about": "Acerca de", + "bio": "Biografía", + "avatarUrl": "URL del avatar", + "bannerUrl": "URL del banner", + "website": "Sitio web", + "lightning": "Lightning", + "saving": "Guardando...", + "saveAndPublish": "Guardar y publicar", + "importFromRelays": "Importar desde relays", + "hideAdvanced": "Ocultar avanzado", + "showAdvanced": "Mostrar avanzado", + "cancel": "Cancelar", + "profilePublished": "Perfil publicado en relays.", + "saveFailed": "Error al guardar.", + "profileImported": "Perfil importado desde relays.", + "importFailed": "Error al importar.", + "accounts": "Cuentas ({count})" + }, + "integrations": { + "title": "Integraciones", + "loading": "Cargando integraciones...", + "connectedCount": "{connected} de {total} conectadas", + "pullAll": "Obtener todo", + "discard": "Descartar", + "save": "Guardar", + "saving": "Guardando...", + "saveChanges": "Guardar cambios", + "cancel": "Cancelar", + "remove": "Eliminar", + "removeTitle": "¿Eliminar integración?", + "removeDescription": "Se eliminará {target} del archivo .env. La puerta de enlace debe reiniciarse para que los cambios surtan efecto.", + "notSet": "no configurado", + "noIntegrationsInCategory": "No hay integraciones en esta categoría" + }, + "execApproval": { + "title": "Aprobaciones de ejecución", + "pendingBadge": "{count} pendiente(s)", + "realtimeLabel": "Tiempo real vía WebSocket", + "viewApprovals": "Aprobaciones", + "viewAllowlist": "Configuración de lista blanca", + "filterAll": "Todas", + "filterPending": "Pendientes", + "filterResolved": "Resueltas", + "noPendingApprovals": "Sin aprobaciones pendientes. Las solicitudes de ejecución de agentes aparecerán aquí como superposición.", + "noApprovals": "Sin aprobaciones que mostrar.", + "loadingAllowlist": "Cargando lista blanca...", + "addAgent": "Agregar agente", + "save": "Guardar", + "saving": "Guardando...", + "reload": "Recargar", + "noAgentsConfigured": "Sin agentes configurados. Ingrese un ID de agente arriba para crear una lista blanca.", + "addPattern": "Agregar patrón", + "noAllowlistPatterns": "Sin patrones en la lista blanca. Los comandos requerirán aprobación manual.", + "previewMatches": "Vista previa: {count} comando(s) reciente(s) coincidirían", + "andMore": "...y {count} más", + "allowOnce": "Permitir una vez", + "alwaysAllow": "Permitir siempre", + "deny": "Denegar", + "statusExpired": "Expirado", + "statusApproved": "Aprobado", + "statusDenied": "Denegado" + }, + "notifications": { + "title": "Notificaciones", + "markAllRead": "Marcar todo como leído", + "recipientLabel": "Destinatario", + "recipientPlaceholder": "Nombre del agente (p. ej., my-agent)", + "noNotifications": "Sin notificaciones", + "markRead": "Marcar como leído" + }, + "localAgentsDoc": { + "title": "AGENTS.md local", + "noPathFound": "No se encontró AGENTS.md local todavía", + "openInVsCode": "Abrir en VS Code", + "copied": "Copiado", + "copyPath": "Copiar ruta", + "collapse": "Contraer", + "expand": "Expandir", + "loading": "Cargando AGENTS.md local...", + "notDetected": "No se detectó AGENTS.md local.", + "checked": "Verificado: {paths}" + }, + "memoryGraph": { + "loading": "Cargando grafo...", + "retry": "Reintentar", + "noMemoryDatabases": "No se encontraron bases de datos de memoria", + "noMemoryDatabasesHint": "No se detectaron archivos SQLite de memoria de OpenClaw", + "allAgents": "todos los agentes", + "filterFiles": "filtrar archivos...", + "statAgents": "agentes", + "statFiles": "archivos", + "statChunks": "fragmentos", + "statSize": "tamaño", + "legendSessions": "sesiones", + "legendMemory": "memoria", + "legendKnowledge": "conocimiento", + "keyboardHint": "desplazar para zoom / arrastrar para mover / clic en nodo para profundizar", + "chunks": "fragmentos", + "text": "texto" + }, + "agentComms": { + "connecting": "Conectando al feed...", + "eventsCount": "{count} eventos", + "connectionGateway": "Puerta de enlace", + "connectionSse": "SSE", + "connectionPolling": "Sondeo", + "sourceLive": "En vivo", + "sourceMixed": "Mixto", + "sourceSeeded": "Sembrado", + "sessions": "{active}/{total} sesiones", + "scrollToLatest": "Ir al más reciente", + "toLabel": "Para:", + "composerPlaceholderTarget": "Mensaje a {name}... (Enter para enviar)", + "composerPlaceholderBroadcast": "Seleccione una sesión o agente arriba, o escriba para difundir...", + "send": "Enviar", + "noFeedEvents": "Sin eventos de feed todavía", + "noFilterEvents": "Sin eventos de {filter}", + "noFeedEventsHint": "Conéctese a la puerta de enlace o espere actividad del agente. Los eventos de sesiones, herramientas, chat y trazas se transmitirán en tiempo real.", + "noFilterEventsHint": "Cambie a \"Todas\" para ver eventos de otras categorías, o espere eventos de {filter}." + }, + "agentDetail": { + "configTab": "Configuración", + "filesTab": "Archivos", + "toolsTab": "Herramientas", + "channelsTab": "Canales", + "cronTab": "Cron", + "modelsTab": "Modelos", + "workspaceFiles": "Archivos del área de trabajo", + "refresh": "Actualizar", + "charCount": "{count} caracteres", + "missing": "faltante", + "selectFileToView": "Selecciona un archivo para ver o editar", + "reset": "Restablecer", + "saving": "Guardando...", + "save": "Guardar", + "fileNotExistYet": "Este archivo aún no existe. Puedes crearlo escribiendo contenido y guardando.", + "toolConfiguration": "Configuración de herramientas", + "profile": "Perfil:", + "saved": "Guardado", + "allowListCount": "Lista de permitidos ({count})", + "noAllowList": "Sin lista de permitidos explícita (usando los valores predeterminados del perfil)", + "addToolAllowList": "Agregar herramienta a la lista de permitidos", + "add": "Agregar", + "alsoAllowCount": "Permitir también ({count})", + "alsoAllowDesc": "Herramientas adicionales permitidas además de los valores predeterminados del perfil.", + "none": "Ninguno", + "denyListCount": "Lista de denegados ({count})", + "noDeniedTools": "Sin herramientas denegadas", + "addToolDenyList": "Agregar herramienta a la lista de denegados", + "channelStatus": "Estado de canales", + "channelStatusDesc": "Canales disponibles para {agent}", + "noChannelsFound": "No se encontraron canales...", + "connectedOf": "{connected}/{total} conectados", + "noAccounts": "Sin cuentas", + "configuredCount": "{count} configurados", + "notConfigured": "No configurado", + "enabledCount": "{count} habilitados", + "disabled": "Deshabilitado", + "cronJobs": "Trabajos cron", + "allCronJobsCount": "{count} de {total} trabajos", + "agentCronJobsCount": "{count} de {total} trabajos", + "agentOnly": "Solo agente", + "showAll": "Mostrar todos", + "noCronJobsFound": "No se encontraron trabajos cron", + "noCronJobsAssigned": "No hay trabajos cron asignados a {agent}", + "noSchedule": "sin horario", + "enabled": "habilitado", + "lastRun": "Último:", + "nextRun": "Siguiente:", + "modelConfiguration": "Configuración de modelos", + "modelConfigDesc": "Configura los modelos principal y de respaldo para este agente.", + "primaryModel": "Modelo principal", + "defaultModel": "Predeterminado", + "fallbackChainCount": "Cadena de respaldo ({count})", + "fallbackChainDesc": "Modelos probados en orden si el modelo principal falla o no está disponible.", + "noFallbackModels": "No hay modelos de respaldo configurados.", + "moveUp": "Subir", + "moveDown": "Bajar", + "remove": "Eliminar", + "addFallbackPlaceholder": "Agregar modelo de respaldo", + "sandboxMode": "Modo", + "sandboxWorkspace": "Área de trabajo", + "sandboxNetwork": "Red", + "sandboxNetworkPlaceholder": "ej., none, host", + "toolsSection": "Herramientas", + "subAgentsSection": "Sub-agentes", + "addSubAgentPlaceholder": "Agregar sub-agente", + "addSubAgent": "Agregar", + "subAgentModelOverride": "Anulación de modelo de sub-agente", + "defaultInherit": "Predeterminado (heredar)", + "modelLabel": "Modelo:", + "noSubAgents": "No hay sub-agentes configurados.", + "memorySearch": "Búsqueda en memoria", + "cancel": "Cancelar" + }, + "taskBoard": { + "title": "Tablero de tareas", + "allProjects": "Todos los proyectos", + "projects": "Proyectos", + "close": "Cerrar", + "spawnSubAgent": "Crear sub-agente", + "newTask": "Nueva tarea", + "refresh": "Actualizar", + "spawnAgentPlaceholder": "Nombre del agente", + "spawnTaskPlaceholder": "Descripción de la tarea", + "timeoutTitle": "Tiempo de espera (minutos)", + "spawning": "Creando...", + "spawn": "Crear", + "noActiveSpawnRequests": "Sin solicitudes de creación activas", + "dismissError": "Cerrar error", + "taskBoardAriaLabel": "Tablero de tareas", + "columnAriaLabel": "Columna {title}, {count} tareas", + "colInbox": "Bandeja de entrada", + "colAssigned": "Asignado", + "colInProgress": "En progreso", + "colReview": "Revisión", + "colQualityReview": "Revisión de calidad", + "colDone": "Hecho", + "recurring": "RECURRENTE", + "spawned": "GENERADO", + "spawnedFromTask": "Generado desde la tarea #{id}", + "unassigned": "Sin asignar", + "due": "Vence:", + "dropTasksHere": "Suelta tareas aquí", + "priority_low": "Baja", + "priority_medium": "Media", + "priority_high": "Alta", + "priority_critical": "Crítica", + "claudeCodeTasks": "Tareas de Claude Code", + "collapse": "Contraer", + "expand": "Expandir", + "loading": "Cargando...", + "noTeamTasksFound": "No se encontraron tareas de equipo", + "noTeamTasksDesc": "No hay tareas de equipo de Claude Code activas actualmente.", + "taskCount": "{count} {count, plural, one {tarea} other {tareas}}", + "blocked": "bloqueado", + "hermesScheduledTasks": "Tareas programadas de Hermes", + "noScheduledTasksFound": "No se encontraron tareas programadas", + "noScheduledTasksDesc": "No hay tareas programadas de Hermes activas actualmente.", + "noSchedule": "sin horario", + "enabled": "habilitado", + "disabled": "deshabilitado", + "createNewTask": "Crear nueva tarea", + "fieldTitle": "Título", + "fieldDescription": "Descripción", + "fieldPriority": "Prioridad", + "fieldProject": "Proyecto", + "fieldAssignTo": "Asignar a", + "fieldTags": "Etiquetas", + "makeRecurring": "Hacer recurrente", + "createRecurringTask": "Crear tarea recurrente", + "createTask": "Crear tarea", + "cancel": "Cancelar", + "editTask": "Editar tarea", + "fieldStatus": "Estado", + "saveChanges": "Guardar cambios", + "edit": "Editar", + "deleteTaskConfirm": "¿Eliminar \"{title}\"?", + "delete": "Eliminar", + "closeTaskDetails": "Cerrar detalles de tarea", + "noDescription": "Sin descripción", + "taskDetailTabs": "Pestañas de detalles de tarea", + "tabDetails": "Detalles", + "tabComments": "Comentarios", + "tabQualityReview": "Revisión de calidad", + "tabSession": "Sesión", + "ticket": "Ticket", + "project": "Proyecto", + "status": "Estado", + "priority": "Prioridad", + "assignedTo": "Asignado a", + "created": "Creado", + "issue": "Issue", + "branch": "Rama", + "pr": "PR", + "live": "En vivo", + "postingAs": "Publicando como", + "newComment": "Nuevo comentario...", + "addComment": "Agregar comentario", + "broadcastToSubscribers": "Difundir a suscriptores", + "broadcastPlaceholder": "Difundir mensaje a todos los suscriptores...", + "broadcast": "Difundir", + "broadcastSent": "Difusión enviada a {count} suscriptores", + "loadingComments": "Cargando comentarios...", + "noComments": "Sin comentarios aún", + "aegisQualityReview": "Revisión de calidad de Aegis", + "noReviews": "Sin revisiones aún", + "reviewerPlaceholder": "Nombre del revisor", + "reviewNotesPlaceholder": "Notas de revisión...", + "submit": "Enviar", + "loadingTranscript": "Cargando transcripción...", + "noSessionMessages": "Sin mensajes de sesión" + }, + "cronManagement": { + "title": "Gestión de cron", + "subtitle": "Programar y gestionar trabajos recurrentes", + "loading": "Cargando...", + "refresh": "Actualizar", + "addJob": "Agregar trabajo", + "calendarView": "Vista de calendario", + "calendarViewDescLocal": "Los tiempos se muestran en tu zona horaria local", + "calendarViewDesc": "Los tiempos se muestran en UTC", + "prev": "Anterior", + "today": "Hoy", + "next": "Siguiente", + "calMode_agenda": "Agenda", + "calMode_week": "Semana", + "calMode_month": "Mes", + "searchPlaceholder": "Buscar trabajos...", + "allAgents": "Todos los agentes", + "allStates": "Todos los estados", + "enabled": "Habilitado", + "disabled": "Deshabilitado", + "all": "Todos", + "sortName": "Nombre", + "sortSchedule": "Horario", + "sortLastRun": "Última ejecución", + "sortNextRun": "Próxima ejecución", + "ascending": "Asc", + "descending": "Desc", + "noJobsMatchFilters": "Ningún trabajo coincide con los filtros actuales.", + "uniqueJobs": "{count} {count, plural, one {trabajo único} other {trabajos únicos}}", + "noJobsForDay": "No hay trabajos programados para esta fecha.", + "jobCount": "{count} {count, plural, one {trabajo} other {trabajos}}", + "runsCount": "{count} {count, plural, one {ejecución} other {ejecuciones}}", + "totalRunsCount": "{count} {count, plural, one {ejecución} other {ejecuciones}} en total", + "moreJobs": "+{count} más", + "firstRun": "primera {time}", + "scheduledJobs": "Trabajos programados", + "jobsCount": "{count} de {total} trabajos", + "loadingJobs": "Cargando trabajos...", + "noCronJobsFound": "No se encontraron trabajos cron.", + "colJobName": "Nombre del trabajo", + "colAgent": "Agente", + "colSchedule": "Horario", + "colModel": "Modelo", + "colStatus": "Estado", + "colLastRun": "Última ejecución", + "colNextRun": "Próxima ejecución", + "colActions": "Acciones", + "enable": "Habilitar", + "disable": "Deshabilitar", + "run": "Ejecutar", + "runNowForce": "Ejecutar ahora (forzar)", + "runNowIfDue": "Ejecutar ahora (si toca)", + "clone": "Clonar", + "history": "Historial", + "configuration": "Configuración", + "delivery": "Entrega", + "source": "Fuente", + "localSchedulerAutomation": "Programador local / Automatización", + "command": "Comando", + "timing": "Temporización", + "recentLogs": "Registros recientes", + "lastRun": "Última ejecución", + "nextRun": "Próxima ejecución", + "timezone": "Zona horaria", + "remove": "Eliminar", + "close": "Cerrar", + "noLogsAvailable": "No hay registros disponibles.", + "runHistoryTitle": "Historial de ejecuciones: {name}", + "totalRuns": "{count} {count, plural, one {ejecución} other {ejecuciones}} en total", + "filterRunsPlaceholder": "Filtrar ejecuciones...", + "timestamp": "Marca de tiempo", + "duration": "Duración", + "error": "Error", + "noRunHistoryAvailable": "No hay historial de ejecuciones disponible.", + "loadMore": "Cargar más", + "addNewCronJob": "Agregar nuevo trabajo cron", + "fieldJobName": "Nombre del trabajo", + "fieldSchedule": "Horario (formato cron)", + "quickSelect": "Selección rápida...", + "scheduleFormatHint": "Formato: minuto hora día mes díaDeLaSemana", + "fieldCommand": "Comando", + "fieldModelOptional": "Modelo (opcional)", + "modelHint": "Déjalo vacío para usar el modelo predeterminado del agente o la puerta de enlace.", + "fieldStaggerOptional": "Desplazamiento escalonado (opcional)", + "seconds": "segundos", + "staggerHint": "Retrasa la ejecución para evitar solapamientos con otros trabajos en el mismo horario.", + "fieldDescriptionOptional": "Descripción (opcional)", + "descriptionPlaceholder": "¿Qué hace este trabajo?", + "cancel": "Cancelar", + "claudeCodeTeams": "Equipos de Claude Code", + "teamsCount": "{count} {count, plural, one {equipo} other {equipos}}", + "collapse": "Contraer", + "expand": "Expandir", + "noClaudeCodeTeams": "No se encontraron equipos de Claude Code en ~/.claude/teams/", + "membersCount": "{count} {count, plural, one {miembro} other {miembros}}" + }, + "sessionDetails": { + "title": "Gestión de sesiones", + "subtitle": "Monitorea y gestiona las sesiones activas de agentes", + "filter": "Filtrar", + "filterAll": "Todas las sesiones", + "filterActive": "Solo activas", + "filterIdle": "Solo inactivas", + "sortBy": "Ordenar por", + "sortAge": "Antigüedad", + "sortTokens": "Uso de tokens", + "sortModel": "Modelo", + "timeWindow": "Ventana de tiempo", + "last1h": "Última hora", + "last6h": "Últimas 6h", + "last24h": "Últimas 24h", + "last7d": "Últimos 7d", + "allTime": "Todo", + "global": "Global", + "unknown": "Desconocido", + "sessionCount": "{filtered} de {total} sesiones", + "activeCount": "{count} activas", + "noSessionsMatch": "Ninguna sesión coincide con el filtro actual", + "model": "Modelo", + "tokenUsage": "Uso de tokens", + "sessionDetails": "Detalles de sesión", + "kind": "Tipo", + "id": "ID", + "lastActivity": "Última actividad", + "messages": "Mensajes", + "label": "Etiqueta", + "addLabel": "Haz clic para añadir etiqueta...", + "sessionControls": "Controles de sesión", + "thinking": "Pensamiento", + "verbose": "Detallado", + "reasoning": "Razonamiento", + "off": "Apagado", + "on": "Encendido", + "minimal": "Mínimo", + "low": "Bajo", + "medium": "Medio", + "high": "Alto", + "xhigh": "Muy alto", + "full": "Completo", + "stream": "Stream", + "modelInformation": "Información del modelo", + "fullName": "Nombre completo", + "provider": "Proveedor", + "description": "Descripción", + "monitor": "Monitorear", + "pause": "Pausar", + "terminate": "Terminar", + "working": "Procesando...", + "delete": "Eliminar", + "deleteConfirm": "¿Eliminar?", + "yes": "Sí", + "no": "No", + "confirmTerminate": "¿Seguro que quieres terminar esta sesión?", + "failedMonitor": "Error al monitorear la sesión", + "failedPause": "Error al pausar la sesión", + "failedTerminate": "Error al terminar la sesión", + "sessionOverview": "Resumen de sesiones", + "totalSessions": "Total de sesiones", + "active": "Activas", + "idle": "Inactivas", + "subAgents": "Subagentes", + "cronJobs": "Tareas cron", + "modelDistribution": "Distribución de modelos", + "highTokenUsage": "Alto uso de tokens", + "highTokenUsageDesc": "{count} sesiones están usando más del 80% de su límite de tokens." + }, + "costTracker": { + "title": "Rastreador de costos", + "subtitle": "Análisis de uso de tokens, costos y gasto entre agentes, modelos y sesiones", + "loadingCostData": "Cargando datos de costo", + "noUsageData": "Sin datos de uso aún", + "noUsageDataDesc": "Los datos de uso aparecen cuando los agentes ejecutan sesiones y consumen tokens. Inicia una sesión o conecta un agente para comenzar a rastrear costos.", + "refresh": "Actualizar", + "totalCost": "Costo total ({timeframe})", + "totalTokens": "Total de tokens", + "apiRequests": "Solicitudes API", + "activeAgents": "Agentes activos", + "taskAttributed": "Atribuido a tareas", + "usageTrends": "Tendencias de uso", + "perTurn": "Por turno", + "cumulative": "Acumulado", + "noTrendData": "Sin datos de tendencia para este período", + "tokenUsageByModel": "Uso de tokens por modelo", + "noModelData": "Sin datos de modelo", + "costDistributionByModel": "Distribución de costos por modelo", + "noCostData": "Sin datos de costo", + "performanceInsights": "Análisis de rendimiento", + "mostEfficientModel": "Modelo más eficiente", + "avgTokensPerRequest": "Tokens promedio/solicitud", + "optimizationPotential": "Potencial de optimización", + "savingsPossible": "ahorro posible", + "exportData": "Exportar datos", + "exportDataDesc": "Descarga registros de uso de tokens, estadísticas de modelos y desglose de costos", + "exporting": "Exportando...", + "noAgentData": "Sin datos por agente", + "noAgentDataDesc": "Los registros de uso de tokens aparecerán cuando los agentes comiencen a reportar", + "agents": "Agentes", + "totalCostDays": "Costo total ({days}d)", + "avgPer1kTokens": "Promedio $/1K tokens", + "perAgentCost": "Costo por agente", + "agentBreakdown": "Desglose por agente", + "inputTokens": "Tokens de entrada", + "outputTokens": "Tokens de salida", + "ioRatio": "Ratio E/S", + "lastActive": "Última actividad", + "noTaskCosts": "Sin costos atribuidos a tareas", + "tokens": "tokens", + "sortBy": "Ordenar", + "noSessionCostData": "Sin datos de costo de sesión", + "noSessionCostDataDesc": "Los desgloses por sesión aparecen una vez que se registra el uso.", + "activeStatus": "Activa", + "inactiveStatus": "Inactiva", + "requests": "solicitudes", + "inShort": "entrada", + "outShort": "salida", + "avgPerReq": "promedio/solicitud", + "noTaskCostData": "Sin datos de costo de tareas", + "noTaskCostDataDesc": "Los costos se atribuirán a tareas cuando los agentes trabajen en ellas", + "tasksWithCosts": "Tareas con costos", + "attributedCost": "Costo atribuido", + "attributedTokens": "Tokens atribuidos", + "unattributed": "No atribuido", + "tasksByCost": "Tareas por costo", + "reqs": "solicitudes" + }, + "superAdmin": { + "accessDenied": "Acceso denegado", + "accessDeniedDesc": "El control avanzado requiere privilegios de administrador.", + "loading": "Cargando datos de super administración...", + "title": "Super control", + "subtitleLocal": "Vista del plano de control local sobre automatizaciones del planificador y estado en tiempo de ejecución.", + "subtitleMultiTenant": "Plano de control de aprovisionamiento multi-inquilino con puertas de aprobación y acciones destructivas más seguras.", + "addWorkspace": "+ Añadir espacio de trabajo", + "refresh": "Actualizar", + "activeOrgs": "Organizaciones activas", + "pendingInProgress": "Pendiente / En progreso", + "erroredOrgs": "Organizaciones con error", + "queuedApprovals": "Aprobaciones en cola", + "createNewWorkspace": "Crear nuevo espacio de trabajo", + "createWorkspaceHint": "Rellena los detalles del espacio de trabajo y haz clic en Crear + Cola para aprovisionar una nueva instancia de cliente.", + "slugPlaceholder": "Slug (ej. acme)", + "displayNamePlaceholder": "Nombre para mostrar", + "linuxUserPlaceholder": "Usuario Linux (opcional)", + "planStandard": "Estándar", + "planPro": "Pro", + "planEnterprise": "Empresarial", + "gatewayPortPlaceholder": "Puerto de gateway", + "dashboardPortPlaceholder": "Puerto de panel", + "dryRun": "Simulacro", + "live": "(real)", + "createAndQueue": "Crear + Cola", + "tabOrganizations": "Organizaciones", + "tabJobs": "trabajos", + "tabEvents": "eventos", + "searchOrganizations": "Buscar organizaciones", + "showing": "Mostrando {shown} de {total}", + "colTenant": "Inquilino", + "colSystemUser": "Usuario del sistema", + "colOwner": "Propietario", + "colStatus": "Estado", + "colLatestJob": "Último trabajo", + "colAction": "Acción", + "unassigned": "sin asignar", + "by": "por", + "unknownCreator": "desconocido", + "localReadOnly": "Local solo lectura", + "queueDecommission": "Poner en cola retiro", + "noMatchingOrgs": "No hay organizaciones coincidentes.", + "prev": "Anterior", + "next": "Siguiente", + "page": "Página {page} / {total}", + "searchJobs": "Buscar trabajos", + "colJob": "Trabajo", + "colRequestedApproved": "Solicitado/Aprobado", + "reqShort": "Solic.", + "apprShort": "Aprob.", + "view": "Ver", + "viewEvents": "Ver eventos", + "approveAndRun": "Aprobar + Ejecutar", + "approve": "Aprobar", + "reject": "Rechazar", + "running": "Ejecutando...", + "run": "Ejecutar", + "noMatchingJobs": "No hay trabajos coincidentes.", + "showingEventsForJob": "Mostrando eventos del trabajo #{jobId}", + "selectJobForEvents": "Selecciona un trabajo para inspeccionar el registro de eventos de aprovisionamiento.", + "noEventsYet": "Aún no hay eventos para este trabajo.", + "queueDecommissionTitle": "Poner en cola retiro: {name}", + "reviewImpact": "Revisa el impacto antes de crear el trabajo.", + "dryRunRecommended": "Simulacro (recomendado)", + "dryRunDesc": "Sin cambios en el sistema, valida comandos y registra una ejecución completa del plan.", + "liveExecution": "Ejecución real", + "liveExecutionDesc": "Detendrá servicios y aplicará cambios de desmontaje tras aprobación + ejecución.", + "removeLinuxUser": "Eliminar usuario Linux", + "removeLinuxUserDesc": "Ejecuta `userdel -r` y elimina el directorio personal.", + "removeStateDirs": "Eliminar dirs. de estado/espacio de trabajo", + "removeStateDirsDesc": "Elimina las rutas `.openclaw` y `workspace` cuando se conserva el usuario.", + "impactSummary": "Resumen de impacto", + "impactStopsService": "Detiene y deshabilita `openclaw-gateway@{user}.service`.", + "impactRemovesEnv": "Elimina `/etc/openclaw-tenants/{user}.env`.", + "impactLinuxUserRemoved": "Se eliminará el usuario Linux.", + "impactStateDirsRemoved": "Se eliminarán los directorios de estado/espacio de trabajo.", + "impactRetained": "El usuario Linux y los directorios se conservan.", + "reasonOptional": "Motivo (opcional)", + "typeSlugLabel": "Escribe", + "toConfirmLive": "para confirmar el retiro real", + "cancel": "Cancelar", + "queueing": "Encolando...", + "queueDryRunDecommission": "Encolar retiro simulacro", + "queueLiveDecommission": "Encolar retiro real", + "slugAndNameRequired": "El slug y el nombre para mostrar son obligatorios", + "tenantCreated": "Inquilino {slug} creado. Trabajo de arranque encolado.", + "jobExecuted": "Trabajo #{jobId} ejecutado", + "jobApprovedExecuted": "Trabajo #{jobId} aprobado y ejecutado", + "typeToConfirm": "Escribe {slug} para confirmar el retiro real", + "decommissionQueuedDryRun": "Retiro simulacro encolado para {slug}", + "decommissionQueued": "Retiro encolado para {slug}", + "optionalReason": "Motivo opcional para {action}:", + "jobActioned": "Trabajo #{jobId} {action}" + }, + "auditTrail": { + "title": "Registro de auditoría", + "eventsLogged": "{count, plural, one {# evento} other {# eventos}} registrados", + "refresh": "Actualizar", + "allActions": "Todas las acciones", + "groupAuth": "Autenticación", + "groupUsers": "Usuarios", + "groupAgents": "Agentes", + "groupSystem": "Sistema", + "groupConfig": "Configuración", + "groupWorkspaces": "Espacios de trabajo", + "actionLogin": "Inicio de sesión", + "actionLoginFailed": "Error de inicio de sesión", + "actionLogout": "Cierre de sesión", + "actionLoginGoogle": "Inicio de sesión con Google", + "actionGoogleDisconnect": "Google desconectado", + "actionPasswordChange": "Cambio de contraseña", + "actionProfileUpdate": "Actualización de perfil", + "actionUserCreate": "Usuario creado", + "actionUserUpdate": "Usuario actualizado", + "actionUserDelete": "Usuario eliminado", + "actionRoleDenied": "Acceso denegado", + "actionAccessRequest": "Acceso solicitado", + "actionAccessApprove": "Acceso aprobado", + "actionAccessDeny": "Acceso denegado", + "actionAgentRegister": "Agente registrado", + "actionAgentCreate": "Agente creado", + "actionAgentUpdate": "Agente actualizado", + "actionAgentDelete": "Agente eliminado", + "actionAgentConfigSync": "Configuración sincronizada", + "actionLocalAgentSync": "Agentes locales sincronizados", + "actionSettingsUpdate": "Configuración actualizada", + "actionAutoBackup": "Copia de seguridad automática", + "actionBackupCreate": "Copia de seguridad creada", + "actionBackupDelete": "Copia de seguridad eliminada", + "actionHeartbeatCheck": "Verificación de latido", + "actionIntegrationTest": "Prueba de integración", + "actionCleanup": "Limpieza", + "actionExport": "Exportación", + "actionTokenRotate": "Token rotado", + "actionGatewayConfigUpdate": "Configuración de gateway actualizada", + "actionWorkspaceCreate": "Espacio de trabajo creado", + "actionWorkspaceUpdate": "Espacio de trabajo actualizado", + "actionWorkspaceDelete": "Espacio de trabajo eliminado", + "filterByActor": "Filtrar por actor...", + "noEvents": "No se encontraron eventos de auditoría", + "userRef": "usuario #{id}", + "previous": "Anterior", + "next": "Siguiente", + "pageOf": "Página {page} de {total}", + "adminRequired": "Se requieren permisos de administrador para ver los registros de auditoría", + "failedFetch": "Error al obtener el registro de auditoría", + "detailUsername": "usuario", + "detailRole": "rol", + "detailName": "nombre", + "detailPasswordReset": "contraseña restablecida", + "detailChanged": "cambiado", + "detailSize": "tamaño", + "detailMarkedOffline": "marcado sin conexión", + "detailAgent": "agente", + "detailSessions": "sesiones", + "detailEvents": "eventos", + "detailRemoved": "eliminado", + "detailType": "tipo" + }, + "securityAudit": { + "title": "Auditoría de Seguridad", + "subtitle": "Postura de seguridad, eventos de autenticación, puntuaciones de confianza y detección de amenazas", + "timeframeHour": "Hora", + "timeframeDay": "Día", + "timeframeWeek": "Semana", + "timeframeMonth": "Mes", + "loadingSecurityData": "Cargando datos de seguridad", + "securityPosture": "Postura de Seguridad", + "blendedScore": "Puntuación combinada: 70% configuración de infraestructura, 30% historial de eventos.", + "infrastructureScan": "Escaneo de Infraestructura", + "scanCredentials": "Credenciales", + "scanNetwork": "Red", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "Tiempo de Ejecución", + "scanOs": "Seguridad del SO", + "authEvents": "Eventos de Autenticación", + "noAuthEvents": "No hay eventos de autenticación en este período", + "colType": "Tipo", + "colActor": "Actor", + "colIP": "IP", + "colTime": "Hora", + "agentTrustScores": "Puntuaciones de Confianza de Agentes", + "noAgentTrustData": "No hay datos de confianza de agentes", + "flagged": "marcado", + "secretExposureAlerts": "Alertas de Exposición de Secretos", + "noSecretsDetected": "No se detectaron secretos", + "colFile": "Archivo", + "colPreview": "Vista previa", + "colStatus": "Estado", + "colDetected": "Detectado", + "statusResolved": "resuelto", + "statusActive": "activo", + "mcpToolAudit": "Auditoría de Herramientas MCP", + "noToolUsageData": "No hay datos de uso de herramientas", + "chartSuccess": "Éxito", + "chartFailure": "Fallo", + "rateLimitAbuseSignals": "Señales de Límite de Tasa / Abuso", + "noRateLimitSignals": "No hay señales de límite de tasa", + "hits": "{hits} solicitudes", + "injectionAttempts": "Intentos de Inyección", + "noInjectionAttempts": "No se detectaron intentos de inyección", + "colSource": "Fuente", + "colInput": "Entrada", + "statusBlocked": "bloqueado", + "statusPassed": "pasado", + "securityTimeline": "Línea de Tiempo de Seguridad ({timeframe})", + "noTimelineData": "No hay datos de línea de tiempo", + "chartAuthEvents": "Eventos de Auth", + "chartInjections": "Inyecciones", + "chartSecrets": "Secretos", + "chartToolCalls": "Llamadas de Herramientas", + "agentEvalDashboard": "Panel de Evaluación de Agentes", + "overallConvergence": "Convergencia General", + "crossAgentAlignment": "Alineación entre agentes en capas de evaluación", + "noEvalData": "No hay datos de evaluación", + "convergence": "Convergencia:", + "drift": "deriva", + "fixPrefix": "Solución: {fix}", + "issueCount": "{count, plural, one {# problema} other {# problemas}}" + }, + "office": { + "title": "Puente de Mando", + "subtitle": "Monitorea tu tripulación en tiempo real", + "loadingLocalSessions": "Escaneando sesiones locales...", + "loadingOffice": "Cargando oficina...", + "activeCount": "{count} activos", + "standbyCount": "{count} en espera", + "alertCount": "{count} alertas", + "offlineCount": "{count} sin conexión", + "buttonDeck": "Puente", + "buttonCrewChart": "Organigrama", + "refresh": "Actualizar", + "emptyDeck": "El puente está vacío", + "emptyDeckSubtitle": "Despliega agentes para verlos aquí", + "crewHeader": "TRIPULACIÓN", + "onlineCount": "{count} en línea", + "filterAll": "Todos", + "filterWorking": "Trabajando", + "filterIdle": "Inactivo", + "filterNeedsAttention": "Necesita Atención", + "filterRunning": "Ejecutando", + "filterNotRunning": "Sin Ejecutar", + "noWorkersInFilter": "No hay trabajadores con este filtro.", + "noRecentActivity": "Sin actividad reciente", + "activeStatus": "activo", + "idleMinutes": "{minutes}m inactivo", + "mainDeck": "PUENTE PRINCIPAL", + "radarLabel": "Radar", + "resetView": "Restablecer", + "showCrewButton": "Mostrar Tripulación", + "hideCrewButton": "Ocultar Tripulación", + "showRadarButton": "Mostrar Radar", + "hideRadarButton": "Ocultar Radar", + "showLogButton": "Mostrar Registro", + "hideLogButton": "Ocultar Registro", + "resetLayout": "Restablecer Diseño", + "deckLog": "Registro del Puente", + "noEventsYet": "Sin eventos aún. Haz clic en una zona o ejecuta una acción.", + "legendActive": "Activo", + "legendStandby": "En espera", + "legendOther": "Otro", + "hotspotUp": "Arriba", + "hotspotDown": "Abajo", + "hotspotLeft": "Izquierda", + "hotspotRight": "Derecha", + "hotspotFineMinusX": "Fino -X", + "hotspotFinePlusX": "Fino +X", + "hotspotWider": "Más ancho", + "hotspotNarrower": "Más estrecho", + "hotspotTaller": "Más alto", + "hotspotShorter": "Más bajo", + "segmentedBy": "Segmentado por", + "segmentCategory": "Categoría", + "segmentRole": "Rol", + "segmentStatus": "Estado", + "currentActivity": "Actividad Actual", + "taskStatTotal": "Total", + "taskStatAssigned": "Asignados", + "taskStatActive": "Activos", + "taskStatDone": "Completados", + "sessionLabel": "Sesión:", + "quickActions": "Acciones Rápidas", + "actionFocus": "Enfocar", + "actionPair": "Emparejar", + "actionBreak": "Descanso", + "openFlightDeck": "Abrir en Flight Deck", + "openingFlightDeck": "Abriendo Flight Deck...", + "flightDeckCompanion": "Aplicación compañera privada/pro para análisis profundo de sesiones", + "flightDeckRequired": "Se Requiere Flight Deck", + "flightDeckDescription": "Flight Deck es la aplicación compañera privada/pro de Mission Control.", + "flightDeckNotInstalled": "Parece que Flight Deck no está instalado en este equipo. Instálalo para abrir sesiones de agentes con controles y diagnósticos más ricos.", + "maybeLater": "Quizás después", + "downloadFlightDeck": "Descargar Flight Deck", + "moving": "en movimiento", + "neverSeen": "Nunca visto", + "justNow": "Ahora mismo", + "minutesAgo": "hace {minutes}m", + "hoursAgo": "hace {hours}h", + "daysAgo": "hace {days}d" + }, + "githubSync": { + "title": "Sincronización de Issues de GitHub", + "subtitle": "Importa Issues de GitHub como tareas de Mission Control", + "loading": "Cargando sincronización de GitHub...", + "connectedAs": "GitHub: {user}", + "notConfigured": "GitHub: no configurado", + "tokenNotConfigured": "Token de GitHub no configurado", + "tokenNotConfiguredDesc": "Configura GITHUB_TOKEN en Integraciones para habilitar la sincronización de issues. Aún puedes navegar el historial de sincronización y las tareas vinculadas.", + "importIssues": "Importar Issues", + "labelRepository": "Repositorio", + "placeholderRepo": "propietario/repositorio", + "labelLabels": "Etiquetas (opcional)", + "placeholderLabels": "bug,mejora", + "labelState": "Estado", + "stateOpen": "Abierto", + "stateClosed": "Cerrado", + "stateAll": "Todos", + "labelAssignAgent": "Asignar a Agente (opcional)", + "unassigned": "Sin asignar", + "buttonPreview": "Vista previa", + "buttonImport": "Importar", + "twoWaySync": "Sincronización Bidireccional", + "syncAll": "Sincronizar Todo", + "enableSync": "Activar", + "disableSync": "Desactivar", + "syncButton": "Sincronizar", + "noProjectsLinked": "No hay proyectos vinculados a repositorios de GitHub. Configura un repositorio en Gestión de Proyectos.", + "previewTitle": "Vista previa ({count} issues)", + "colNumber": "#", + "colTitle": "Título", + "colLabels": "Etiquetas", + "colState": "Estado", + "colCreated": "Creado", + "syncHistory": "Historial de Sincronización", + "colRepo": "Repositorio", + "colIssues": "Issues", + "colStatus": "Estado", + "colSyncedAt": "Sincronizado", + "noSyncHistory": "Sin historial de sincronización. Importa issues arriba para comenzar.", + "linkedTasks": "Tareas Vinculadas", + "linkedTasksWithCount": "Tareas Vinculadas ({count})", + "colTask": "Tarea", + "colPriority": "Prioridad", + "colGitHub": "GitHub", + "colSynced": "Sincronizado", + "noLinkedTasks": "No hay tareas vinculadas a issues de GitHub aún.", + "syncResultImported": "Importados: {count}", + "syncResultSkipped": "Omitidos: {count}", + "syncResultErrors": "Errores: {count}", + "enterRepo": "Ingresa un repositorio (propietario/repo)", + "noIssuesFound": "No se encontraron issues con los filtros actuales", + "failedFetchIssues": "Error al obtener issues", + "networkError": "Error de red", + "syncFailed": "Error de sincronización", + "failedToggleSync": "Error al cambiar sincronización", + "importedFeedback": "Se importaron {imported} {imported, plural, one {issue} other {issues}}, se omitieron {skipped}" + }, + "agentCost": { + "title": "Desglose de Costos por Agente", + "subtitle": "Análisis de uso de tokens y gasto por agente", + "loadingAgentCosts": "Cargando costos de agentes", + "viewOverview": "Resumen", + "viewPerAgentDB": "Por Agente (BD)", + "timeframeHour": "Hora", + "timeframeDay": "Día", + "timeframeWeek": "Semana", + "timeframeMonth": "Mes", + "noAgentCostData": "No hay datos de costos de agentes", + "noAgentCostSubtitle": "Los datos de costos aparecerán cuando los agentes comiencen a usar tokens", + "refresh": "Actualizar", + "activeAgents": "Agentes Activos", + "totalCost": "Costo Total ({timeframe})", + "mostExpensive": "Más Costoso", + "mostEfficient": "Más Eficiente", + "taskAttributed": "Atribuido a Tarea", + "unattributed": "{cost} sin atribuir", + "costDistributionByAgent": "Distribución de Costos por Agente", + "noCostData": "Sin datos de costos", + "costTrends": "Tendencias de Costos (Top 5 Agentes)", + "noTrendData": "Sin datos de tendencias", + "costComparison": "Comparación de Costos", + "costEfficiency": "Eficiencia de Costos ($/1K Tokens por Agente)", + "agentCostRanking": "Ranking de Costos por Agente", + "noTaskCosts": "Sin costos atribuidos a tareas para este agente", + "tasksTab": "Tareas ({count})", + "modelsTab": "Modelos ({count})", + "sessionCount": "{count, plural, one {# sesión} other {# sesiones}}", + "requestCount": "{count, plural, one {# solicitud} other {# solicitudes}}", + "tokens": "tokens", + "ofTotal": "{pct}% del total", + "reqs": "{count} solicitudes", + "inputTokens": "Tokens de Entrada", + "outputTokens": "Tokens de Salida", + "ioRatio": "Ratio E/S", + "lastActive": "Última Actividad", + "modelBreakdown": "Desglose por Modelo", + "inSuffix": "entrada", + "outSuffix": "salida", + "noPerAgentData": "No hay datos por agente en la base de datos", + "noPerAgentDataSubtitle": "Los registros de uso de tokens aparecerán cuando los agentes comiencen a enviar heartbeats", + "agentCountDB": "Agentes (BD)", + "totalCostDays": "Costo Total ({days}d)", + "totalTokens": "Tokens Totales", + "avgPer1kTokens": "Promedio $/1K Tokens", + "perAgentCostDB": "Costo por Agente (BD)", + "agentTokenBreakdown": "Desglose de Tokens por Agente", + "chartCost": "Costo ($)" + }, + "tokenDashboard": { + "title": "Panel de Tokens y Costos", + "subtitle": "Monitorea el uso de tokens y costos en modelos y sesiones", + "viewOverview": "Resumen", + "viewSessions": "Sesiones", + "timeframeHour": "Hora", + "timeframeDay": "Día", + "timeframeWeek": "Semana", + "timeframeMonth": "Mes", + "filtersLabel": "Filtros:", + "clearAll": "Limpiar todo", + "timezoneLabel": "Zona horaria:", + "sortByLabel": "Ordenar por:", + "noSessionCostData": "Sin datos de costos de sesión", + "noSessionCostSubtitle": "Los detalles por sesión aparecerán cuando se registre el uso.", + "sessionActive": "Activo", + "sessionInactive": "Inactivo", + "requests": "solicitudes", + "inSuffix": "entrada", + "outSuffix": "salida", + "avgPerRequest": "promedio/solicitud", + "loadingUsageData": "Cargando datos de uso", + "totalTokens": "Tokens Totales ({timeframe})", + "totalCost": "Costo Total ({timeframe})", + "apiRequests": "Solicitudes API", + "avgTokensPerRequest": "Tokens Promedio/Solicitud", + "cacheReadTokens": "Tokens de Lectura de Caché", + "cacheWriteTokens": "Tokens de Escritura de Caché", + "usageTrends": "Tendencias de Uso ({timeframe})", + "peakLabel": "Pico:", + "perTurnButton": "Por Turno", + "cumulativeButton": "Acumulativo", + "noTrendData": "Sin datos de tendencias para este período", + "chartTokens": "Tokens", + "chartRequests": "Solicitudes", + "tokenUsageByModel": "Uso de Tokens por Modelo", + "noModelUsageData": "Sin datos de uso de modelos", + "costDistributionByModel": "Distribución de Costos por Modelo", + "noCostData": "Sin datos de costos", + "costByProvider": "Costos por Proveedor", + "noProviderData": "Sin datos de proveedor", + "exportData": "Exportar Datos", + "exportCsvFiltered": "Exportar CSV (Filtrado)", + "exportCsvFull": "Exportar CSV (Completo)", + "exportJson": "Exportar JSON", + "exporting": "Exportando...", + "exportDescription": "Exporta datos de uso de tokens para análisis. \"Filtrado\" exporta solo los datos mostrados actualmente; \"Completo\" exporta todos los registros del servidor.", + "performanceInsights": "Análisis de Rendimiento", + "mostEfficientModel": "Modelo Más Eficiente", + "mostUsedModel": "Modelo Más Usado", + "optimizationPotential": "Potencial de Optimización", + "savingsPossible": "{pct}% de ahorro posible", + "modelEfficiencyComparison": "Comparación de Eficiencia de Modelos", + "modelPerformance": "Rendimiento del Modelo", + "topSessionsByCost": "Sesiones Principales por Costo", + "requestsLabel": "Solicitudes", + "avgCost": "Costo Promedio", + "avgTokens": "Tokens Promedio", + "noUsageData": "Sin datos de uso disponibles", + "noUsageDataSubtitle": "El uso de tokens aparecerá aquí cuando los agentes comiencen a ejecutarse", + "refresh": "Actualizar" + }, + "memoryBrowser": { + "hideSidebar": "Ocultar barra lateral", + "showSidebar": "Mostrar barra lateral", + "fileCountSize": "{count} archivos / {size}", + "indexing": "indexando…", + "newFile": "+ nuevo", + "searchPlaceholder": "Buscar archivos...", + "searchResults": "{count} resultados", + "noFiles": "sin archivos", + "refresh": "actualizar", + "toggleBacklinks": "Alternar panel de backlinks", + "links": "enlaces", + "edit": "editar", + "delete": "eliminar", + "save": "guardar", + "saving": "guardando...", + "cancel": "cancelar", + "selectFilePrompt": "seleccionar un archivo para ver", + "orSwitchView": "o cambiar a vista de salud / pipeline", + "schemaWarnings": "Advertencias de esquema:", + "editPlaceholder": "Editar contenido del archivo...", + "loadingHermes": "Cargando memoria Hermes", + "noHermesData": "Sin datos de memoria Hermes", + "hermesMemoryTitle": "Memoria Hermes", + "hermesMemoryDesc": "Vista de solo lectura de los archivos de memoria persistente del agente Hermes", + "noAgentMemory": "No se encontró archivo de memoria del agente", + "noUserMemory": "No se encontró archivo de memoria del usuario", + "runningDiagnostics": "Ejecutando diagnósticos", + "noHealthData": "Sin datos de salud", + "runDiagnostics": "Ejecutar diagnósticos", + "healthCategories": "8 categorías / {time}", + "pipelineTitle": "Pipeline de procesamiento", + "pipelineDesc": "Operaciones de mantenimiento del conocimiento inspiradas en las 6 R de Ars Contexta", + "pipelineReflect": "Reflejar", + "pipelineReflectDesc": "Encontrar oportunidades de conexión entre archivos", + "pipelineReweave": "Retejer", + "pipelineReweaveDesc": "Encontrar archivos obsoletos que necesitan actualizaciones de archivos más nuevos", + "pipelineGenerateMoc": "Generar MOC", + "pipelineGenerateMocDesc": "Generar automáticamente Mapas de Contenido desde clústeres de archivos", + "processing": "Procesando", + "filesProcessed": "{count} archivos procesados", + "noSuggestions": "Sin sugerencias — la base de conocimiento está bien conectada", + "mapsOfContent": "Mapas de Contenido ({count} grupos)", + "newFileTitle": "nuevo archivo", + "directory": "directorio", + "fileName": "nombre", + "fileType": "tipo", + "content": "contenido", + "contentOptional": "opcional...", + "create": "Crear", + "deleteFileTitle": "eliminar archivo", + "permanentlyDelete": "eliminar permanentemente:", + "outgoing": "Salientes ({count})", + "backlinks": "Backlinks ({count})", + "wikiLinks": "Wiki-links ({count})" + }, + "userManagement": { + "adminAccessRequired": "Se requiere acceso de administrador", + "failedToLoadUsers": "Error al cargar usuarios", + "failedToCreate": "Error al crear usuario", + "networkError": "Error de red", + "userUpdated": "Usuario actualizado", + "failedToUpdate": "Error al actualizar", + "deletedUser": "Usuario \"{username}\" eliminado", + "failedToDelete": "Error al eliminar", + "failedToAction": "Error al {action} la solicitud", + "requestActioned": "Solicitud {action} para {email}", + "user": "usuario", + "accessDenied": "Acceso denegado", + "adminRequired": "La gestión de usuarios requiere privilegios de administrador.", + "loadingUsers": "Cargando usuarios...", + "usersTitle": "Usuarios", + "usersSummary": "{count} usuarios registrados · {pending} aprobaciones pendientes", + "addLocalUser": "+ Agregar usuario local", + "cancel": "Cancelar", + "pendingRequests": "{count, plural, one {# solicitud de acceso pendiente} other {# solicitudes de acceso pendientes}}", + "identity": "Identidad", + "attempts": "Intentos", + "lastAttempt": "Último intento", + "action": "Acción", + "roleViewer": "Lector", + "roleOperator": "Operador", + "roleAdmin": "Administrador", + "noteOptional": "Nota (opcional)", + "confirm": "Confirmar", + "reject": "Rechazar", + "review": "Revisar", + "newLocalUser": "Nuevo usuario local", + "username": "Nombre de usuario", + "password": "Contraseña", + "displayName": "Nombre para mostrar", + "creating": "Creando...", + "createUser": "Crear usuario", + "colUser": "Usuario", + "colProvider": "Proveedor", + "colRole": "Rol", + "colLastLogin": "Último acceso", + "colActions": "Acciones", + "newPasswordOptional": "Nueva contraseña (opcional)", + "save": "Guardar", + "edit": "Editar", + "delete": "Eliminar", + "never": "Nunca", + "createdUser": "Usuario \"{username}\" creado" + }, + "alertRules": { + "title": "Reglas de alerta", + "description": "Configurar alertas automáticas para eventos de agentes, tareas y sistema", + "evaluating": "Evaluando...", + "evaluateNow": "Evaluar ahora", + "newRule": "+ Nueva regla", + "statTotalRules": "Total de reglas", + "statActive": "Activas", + "statTotalTriggers": "Total de activaciones", + "evalResultsTitle": "Resultados de evaluación", + "dismiss": "Descartar", + "triggered": "ACTIVADO", + "noRulesToEvaluate": "No hay reglas para evaluar", + "loadingRules": "Cargando reglas...", + "noRulesConfigured": "No hay reglas de alerta configuradas", + "createRuleHint": "Crear una regla para recibir notificaciones sobre eventos del sistema", + "never": "Nunca", + "cooldown": "Enfriamiento: {minutes}m", + "triggerCount": "Activado: {count}x", + "lastTriggered": "Último: {time}", + "deleteRule": "Eliminar regla", + "newRuleTitle": "Nueva regla de alerta", + "ruleName": "Nombre de la regla", + "ruleNamePlaceholder": "p. ej., Alerta de agente desconectado", + "ruleDescription": "Descripción", + "optionalDescription": "Descripción opcional", + "entity": "Entidad", + "entityAgent": "Agente", + "entityTask": "Tarea", + "entitySession": "Sesión", + "entityActivity": "Actividad", + "field": "Campo", + "operator": "Operador", + "value": "Valor", + "valuePlaceholder": "p. ej., error", + "cooldownMinutes": "Enfriamiento (minutos)", + "notifyRecipient": "Notificar (destinatario)", + "cancel": "Cancelar", + "creating": "Creando...", + "createRule": "Crear regla", + "failedToCreate": "Error al crear la regla", + "networkError": "Error de red" + }, + "agentSquad": { + "failedToFetch": "Error al obtener agentes", + "errorOccurred": "Ocurrió un error", + "failedToUpdateStatus": "Error al actualizar el estado del agente", + "loadingAgents": "Cargando agentes", + "title": "Equipo de agentes", + "live": "En vivo", + "manual": "Manual", + "addAgent": "+ Agregar agente", + "refresh": "Actualizar", + "noAgents": "No se encontraron agentes", + "addFirstAgent": "Agrega tu primer agente para comenzar", + "session": "Sesión", + "totalTasks": "Tareas totales", + "inProgress": "En progreso", + "lastSeen": "Última vez visto", + "activity": "Actividad", + "wake": "Despertar", + "busy": "Ocupado", + "sleep": "Dormir", + "statusControl": "Control de estado", + "role": "Rol", + "sessionKey": "Clave de sesión", + "notSet": "No establecido", + "soulContent": "Contenido SOUL", + "soulPlaceholder": "Personalidad e instrucciones del agente...", + "taskStatistics": "Estadísticas de tareas", + "total": "Total", + "assigned": "Asignadas", + "done": "Completadas", + "created": "Creado", + "lastUpdated": "Última actualización", + "saveChanges": "Guardar cambios", + "cancel": "Cancelar", + "editAgent": "Editar agente", + "createNewAgent": "Crear nuevo agente", + "name": "Nombre", + "rolePlaceholder": "p. ej., investigador, desarrollador, analista", + "sessionKeyOptional": "Clave de sesión (opcional)", + "sessionKeyPlaceholder": "Identificador de sesión ClawdBot", + "soulContentOptional": "Contenido SOUL (opcional)", + "createAgent": "Crear agente", + "failedToUpdate": "Error al actualizar el agente", + "failedToCreate": "Error al crear el agente", + "never": "Nunca", + "justNow": "Ahora mismo", + "minutesAgo": "hace {count}m", + "hoursAgo": "hace {count}h", + "daysAgo": "hace {count}d" + }, + "multiGateway": { + "title": "Gestor de puertas de enlace", + "description": "Gestionar múltiples conexiones de puertas de enlace OpenClaw", + "probeAll": "Sondear todo", + "addGateway": "+ Agregar puerta de enlace", + "connected": "Conectado", + "disconnected": "Desconectado", + "noActiveConnection": "Sin conexión activa", + "loadingGateways": "Cargando puertas de enlace...", + "noGateways": "No hay puertas de enlace configuradas", + "addGatewayHint": "Agrega una puerta de enlace para comenzar a gestionar conexiones", + "discoveredGateways": "Puertas de enlace descubiertas", + "discoveredGatewaysDesc": "Puertas de enlace OpenClaw encontradas en esta máquina", + "refresh": "Actualizar", + "running": "EN EJECUCIÓN", + "stopped": "DETENIDO", + "bind": "Enlace", + "mode": "Modo", + "register": "Registrar", + "directCliConnections": "Conexiones CLI directas", + "directCliDesc": "Herramientas CLI conectadas directamente sin una puerta de enlace", + "noDirectConnections": "Sin conexiones CLI directas", + "useApiConnect": "Usar", + "toRegisterCli": "para registrar una herramienta CLI", + "role": "Rol", + "heartbeat": "Latido", + "never": "Nunca", + "disconnect": "Desconectar", + "neverProbed": "Nunca sondeado", + "primary": "PRIMARIO", + "connectedBadge": "CONECTADO", + "token": "Token", + "tokenSet": "Establecido", + "tokenNone": "Ninguno", + "latency": "Latencia", + "last": "Último", + "gatewayVersion": "Versión de puerta de enlace", + "noHistory": "Sin historial aún", + "colorKey": "Clave de colores", + "colorKeyTitle": "Verde = en línea; ámbar = error; rojo = fuera de línea", + "lastLatency": "Última latencia: {ms}ms", + "probeGateway": "Sondear puerta de enlace", + "probing": "Sondeando...", + "probe": "Sondear", + "connectToGateway": "Conectarse a esta puerta de enlace", + "connect": "Conectar", + "setPrimaryTitle": "Establecer como principal", + "setPrimary": "Establecer como principal", + "removeGateway": "Eliminar puerta de enlace", + "addGatewayTitle": "Agregar puerta de enlace", + "name": "Nombre", + "namePlaceholder": "p. ej., primary", + "host": "Host", + "port": "Puerto", + "tokenField": "Token", + "optional": "Opcional", + "cancel": "Cancelar", + "adding": "Agregando...", + "addGatewaySubmit": "Agregar puerta de enlace", + "failedToAdd": "Error al agregar la puerta de enlace", + "networkError": "Error de red" + }, + "nodes": { + "title": "Nodos / Instancias", + "gatewayConnected": "Puerta de enlace conectada", + "gatewayUnreachable": "Puerta de enlace inalcanzable", + "tabInstances": "Instancias ({count})", + "tabDevices": "Dispositivos ({count})", + "loading": "Cargando...", + "noInstances": "No hay instancias activas. Los nodos aparecen aquí cuando se conectan a la puerta de enlace.", + "colName": "Nombre", + "colClientId": "ID de cliente", + "colPlatform": "Plataforma", + "colVersion": "Versión", + "colRoles": "Roles", + "colStatus": "Estado", + "colConnected": "Conectado", + "colLastActivity": "Última actividad", + "colHostIp": "Host / IP", + "colDeviceId": "ID de dispositivo", + "colPaired": "Emparejado", + "colLastSeen": "Última vez visto", + "colTrust": "Confianza", + "colActions": "Acciones", + "pendingPairingRequests": "Solicitudes de emparejamiento pendientes ({count})", + "approve": "Aprobar", + "approving": "Aprobando...", + "reject": "Rechazar", + "rejecting": "Rechazando...", + "noPairedDevices": "No hay dispositivos emparejados.", + "pairedDevices": "Dispositivos emparejados ({count})", + "trusted": "de confianza", + "untrusted": "no confiable", + "rotateToken": "Rotar token", + "revokeConfirm": "¿Revocar?", + "yes": "Sí", + "no": "No", + "revoke": "Revocar", + "hideTokens": "Ocultar tokens", + "tokens": "Tokens ({count})", + "tokenUsed": "usado {time}", + "revoked": "revocado", + "rotate": "Rotar" + }, + "activityFeed": { + "title": "Actividad", + "live": "En vivo", + "paused": "Pausado", + "refresh": "Actualizar", + "filterAgent": "Agente", + "filterAll": "Todos", + "filterType": "Tipo", + "allTypes": "Todos los tipos", + "filterLimit": "Límite", + "loadingActivities": "Cargando actividades", + "noActivities": "No se encontraron actividades", + "noActivityForAgent": "No hay actividad registrada para {agent}", + "tryAdjustingFilters": "Intenta ajustar los filtros", + "entityTask": "Tarea:", + "entityCommentOn": "Comentario en:", + "entityAgent": "Agente:", + "showDetails": "Mostrar detalles", + "activeSessions": "Sesiones activas", + "agentStatus": "Estado", + "lastSeen": "Última vez visto", + "lastAction": "Última acción", + "tasksAssigned": "Tareas asignadas", + "inProgress": "En progreso", + "completed": "Completado", + "events": "{count} eventos", + "newer": "Más reciente", + "older": "Más antiguo", + "pageOf": "Página {page} de {total}", + "footerAgentEvents": "{total} eventos para {agent}", + "footerShowing": "Mostrando {count} actividades{filtered}", + "filtered": " (filtrado)", + "lastUpdated": "Última actualización: {time}" + }, + "standup": { + "title": "Standup diario", + "viewCurrent": "Actual", + "viewHistory": "Historial", + "generating": "Generando...", + "generate": "Generar", + "export": "Exportar", + "standupFor": "Standup del {date}", + "generatedOn": "Generado el {date}", + "statCompleted": "Completado", + "statInProgress": "En progreso", + "statBlocked": "Bloqueado", + "statOverdue": "Vencido", + "teamAccomplishments": "Logros del equipo", + "teamBlockers": "Bloqueadores del equipo", + "overdueTasks": "Tareas vencidas", + "unassigned": "Sin asignar", + "individualReports": "Informes individuales", + "activitySummary": "Actividad: {actions} acciones, {comments} comentarios", + "sectionCompleted": "Completado ({count})", + "sectionInProgress": "En progreso ({count})", + "sectionAssigned": "Asignado ({count})", + "sectionBlocked": "Bloqueado ({count})", + "none": "Ninguno", + "noStandupGenerated": "No se ha generado standup", + "selectDatePrompt": "Selecciona una fecha y genera un informe", + "generateToday": "Generar standup de hoy", + "noHistory": "No se encontró historial de standups", + "historyGenerated": "Generado: {date}", + "historyAgentsParticipated": "{count} agentes participaron", + "historyCompleted": "Completado: {count}", + "historyInProgress": "En progreso: {count}", + "historyBlocked": "Bloqueado: {count}" + }, + "webhooks": { + "title": "Webhooks", + "configured": "{count, plural, one {# webhook configurado} other {# webhooks configurados}}", + "addWebhook": "+ Agregar webhook", + "secretLabel": "Secreto del webhook (guárdelo ahora, se muestra solo una vez)", + "dismiss": "Descartar", + "testSuccessful": "Prueba exitosa", + "testFailed": "Prueba fallida", + "testStatus": "Estado:", + "testDuration": "Duración:", + "testError": "Error:", + "localAutomations": "Automatizaciones de webhook locales", + "localAutomationsDesc": "Tareas del programador local que admiten entrega y reintentos de webhook", + "nextRun": "Próxima ejecución {time}", + "noNextRun": "Sin próxima ejecución programada", + "running": "Ejecutando...", + "run": "Ejecutar", + "noWebhooks": "No hay webhooks configurados", + "noWebhooksDesc": "Agrega un webhook para recibir notificaciones HTTP de eventos", + "allEvents": "Todos los eventos", + "eventCount": "{count, plural, one {# evento} other {# eventos}}", + "deliveries": "{count} entregas", + "failed": "{count} fallidos", + "lastFired": "Último disparo {time}", + "sendTestEvent": "Enviar evento de prueba", + "testing": "Probando...", + "test": "Probar", + "disable": "Deshabilitar", + "enable": "Habilitar", + "delete": "Eliminar", + "recentDeliveries": "Entregas recientes", + "noDeliveries": "No hay entregas registradas aún", + "newWebhook": "Nuevo webhook", + "formName": "Nombre", + "formUrl": "URL", + "formEvents": "Eventos", + "cancel": "Cancelar", + "createWebhook": "Crear webhook" + }, + "skills": { + "title": "Centro de habilidades", + "subtitle": "Administra habilidades localmente y explora registros externos.", + "localMode": "Modo local", + "gatewayMode": "Modo de puerta de enlace", + "tabInstalled": "Instalado", + "tabRegistry": "Registro", + "searchPlaceholder": "Buscar habilidades instaladas...", + "searchResults": "Mostrando {count} de {total} habilidades que coinciden con \"{query}\"", + "diskSyncActive": "Sincronización de disco bidireccional activa (programador cada 60s)", + "scanAll": "Escanear todo", + "scanningProgress": "Escaneando {done}/{total}...", + "refreshNow": "Actualizar ahora", + "scanning": "Escaneando:", + "skillsScanned": "{count} habilidades escaneadas", + "dismiss": "descartar", + "addSkill": "Agregar habilidad", + "initialContent": "Contenido inicial de SKILL.md", + "loadingSkills": "Cargando habilidades...", + "skillCount": "{count} de {total} habilidades", + "noMatch": "No hay habilidades que coincidan con este filtro.", + "scan": "Escanear", + "view": "Ver", + "registrySearchPlaceholder": "Buscar habilidades...", + "searching": "Buscando...", + "search": "Buscar", + "installTo": "Instalar en:", + "installing": "Instalando...", + "install": "Instalar", + "noRegistryResults": "No se encontraron resultados para \"{query}\" en {registry}. Intenta una consulta diferente o cambia de registro.", + "registryPrompt": "Busca en ClawdHub, skills.sh o Awesome OpenClaw para descubrir e instalar habilidades de agentes.", + "skillInstalled": "Habilidad instalada", + "installFailed": "Instalación fallida", + "installingSkill": "Instalando habilidad", + "stepFetching": "Obteniendo SKILL.md del registro", + "stepScanning": "Ejecutando análisis de seguridad", + "stepWriting": "Escribiendo en disco y registrando", + "security": "Seguridad", + "viewInstalled": "Ver instalado", + "done": "Hecho", + "close": "Cerrar", + "delete": "Eliminar", + "save": "Guardar", + "loadingSkillContent": "Cargando SKILL.md...", + "noContent": "Sin contenido." + }, + "orchestration": { + "tabCommand": "Comando", + "tabWorkflows": "Flujos de trabajo", + "tabPipelines": "Pipelines", + "tabFleet": "Flota", + "selectAgent": "Seleccionar agente...", + "commandPlaceholder": "Enviar comando o mensaje al agente...", + "send": "Enviar", + "noTemplates": "No hay plantillas de flujo de trabajo aún", + "createFirstTemplate": "Crear tu primera plantilla", + "cancel": "Cancelar", + "new": "+ Nuevo", + "editTemplate": "Editar plantilla", + "newTemplate": "Nueva plantilla", + "templateName": "Nombre de la plantilla", + "templateDescription": "Descripción (opcional)", + "taskPromptPlaceholder": "Prompt de tarea para el agente...", + "timeout": "Tiempo de espera", + "role": "Rol", + "lastRun": "Última ejecución", + "update": "Actualizar", + "save": "Guardar", + "totalAgents": "Total de agentes", + "online": "En línea", + "busy": "Ocupado", + "errors": "Errores" + } +} diff --git a/messages/fr.json b/messages/fr.json new file mode 100644 index 0000000000000000000000000000000000000000..5df21f8ca315517cda81162cab8d8bae20befebe --- /dev/null +++ b/messages/fr.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "Enregistrer", + "cancel": "Annuler", + "loading": "Chargement...", + "error": "Erreur", + "search": "Rechercher", + "confirm": "Confirmer", + "delete": "Supprimer", + "edit": "Modifier", + "close": "Fermer", + "back": "Retour", + "next": "Suivant", + "retry": "Réessayer", + "or": "ou", + "optional": "facultatif", + "language": "Langue", + "dismiss": "Ignorer", + "continue": "Continuer", + "selected": "Sélectionné", + "detected": "Détecté", + "now": "maintenant", + "tryAgain": "Réessayer", + "skipToMainContent": "Aller au contenu principal", + "builtWithCareBy": "Conçu avec soin par", + "viewRelease": "Voir la version", + "updateNow": "Mettre à jour maintenant", + "showDetails": "Afficher les détails", + "hideDetails": "Masquer les détails", + "moreIssues": "+ {count} {count, plural, one {problème supplémentaire} other {problèmes supplémentaires}}" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "Connectez-vous pour continuer", + "username": "Nom d'utilisateur", + "password": "Mot de passe", + "signIn": "Se connecter", + "signingIn": "Connexion en cours...", + "signInWithGoogle": "Se connecter avec Google", + "loadingGoogleSignIn": "Chargement de la connexion Google...", + "googleSignInFailed": "Échec de la connexion Google", + "networkError": "Erreur réseau", + "loginFailed": "Échec de la connexion", + "enterUsername": "Entrez le nom d'utilisateur", + "enterPassword": "Entrez le mot de passe", + "orchestrationTagline": "Orchestration d'agents OpenClaw", + "accessRequestSubmitted": "Demande d'accès soumise", + "accessRequestDescription": "Votre demande a été envoyée à un administrateur pour examen. Vous pourrez vous connecter une fois approuvée.", + "tryAgain": "Réessayer", + "noAdminAccount": "Aucun compte administrateur créé", + "noAdminDescription": "Configurez votre compte administrateur pour commencer avec Mission Control.", + "createAdminAccount": "Créer un compte administrateur", + "welcomeToMC": "Bienvenue sur Mission Control", + "settingUpMC": "Configuration de Mission Control", + "createAdminToStart": "Créez votre compte administrateur pour commencer", + "creatingAdmin": "Création de votre compte administrateur...", + "displayName": "Nom d'affichage", + "confirmPassword": "Confirmer le mot de passe", + "atLeast12Chars": "Au moins 12 caractères", + "repeatPassword": "Répétez votre mot de passe", + "passwordsDoNotMatch": "Les mots de passe ne correspondent pas", + "passwordTooShort": "Le mot de passe doit contenir au moins 12 caractères", + "moreCharsNeeded": "Encore {count} {count, plural, one {caractère nécessaire} other {caractères nécessaires}}", + "firstTimeSetupOnly": "Cette page n'est disponible que lors de la configuration initiale.", + "checkingSetupStatus": "Vérification de l'état de configuration...", + "setupFailed": "Échec de la configuration", + "failedToCheckSetup": "Impossible de vérifier l'état de configuration", + "validatingCredentials": "Validation des identifiants", + "creatingAdminAccount": "Création du compte administrateur", + "configuringSession": "Configuration de la session", + "launchingDashboard": "Lancement du tableau de bord", + "usernameHint": "Lettres minuscules, chiffres, points, tirets et underscores uniquement" + }, + "nav": { + "overview": "Aperçu", + "agents": "Agents", + "tasks": "Tâches", + "chat": "Chat", + "channels": "Canaux", + "skills": "Compétences", + "memory": "Mémoire", + "activity": "Activité", + "logs": "Journaux", + "costTracker": "Suivi des coûts", + "nodes": "Nœuds", + "approvals": "Approbations", + "office": "Bureau", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "Alertes", + "github": "GitHub", + "security": "Sécurité", + "users": "Utilisateurs", + "audit": "Audit", + "gateway": "Passerelle", + "gateways": "Passerelles", + "config": "Configuration", + "integrations": "Intégrations", + "debug": "Débogage", + "settings": "Paramètres", + "group": { + "observe": "OBSERVER", + "automate": "AUTOMATISER", + "admin": "ADMIN" + }, + "collapseSidebar": "Réduire la barre latérale", + "expandSidebar": "Développer la barre latérale", + "more": "Plus" + }, + "settings": { + "language": "Langue", + "languageDescription": "Choisissez votre langue d'affichage préférée", + "general": "Général", + "security": "Sécurité", + "dataRetention": "Conservation des données", + "chatSettings": "Chat", + "gatewaySettings": "Passerelle", + "title": "Paramètres", + "description": "Configurez le comportement de Mission Control et les politiques de rétention", + "discard": "Ignorer", + "save": "Enregistrer", + "saving": "Enregistrement...", + "saveChanges": "Enregistrer les modifications", + "workspaceManagementLabel": "Gestion de l'espace de travail :", + "workspaceManagementDesc1": "Pour créer ou gérer des espaces de travail (instances locataires), accédez au panneau", + "superAdmin": "Super Admin", + "workspaceManagementDesc2": "sous Admin > Super Admin dans la barre latérale. Vous pouvez y créer de nouvelles instances client, gérer les locataires et surveiller les tâches d'approvisionnement.", + "securityDescription": "Analysez la posture de sécurité de votre station", + "securityScan": "Analyse de sécurité", + "hideScan": "Masquer l'analyse", + "backups": "Sauvegardes", + "backupsDescription": "Créez des sauvegardes à la demande de la base de données MC ou de l'état de la passerelle", + "backupMcDatabase": "Sauvegarder la BD MC", + "backupGatewayState": "Sauvegarder l'état de la passerelle", + "backingUp": "Sauvegarde en cours...", + "onboarding": "Intégration", + "onboardingDescription": "Relancez l'assistant de configuration et réinitialisez la liste de vérification du tableau de bord", + "replayOnboarding": "Relancer l'intégration", + "resetting": "Réinitialisation..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "Orchestration d'agents", + "authenticatingOperator": "Authentification de l'opérateur", + "detectingStationMode": "Détection du mode station", + "loadingControlConfig": "Chargement de la configuration de contrôle", + "connectingRuntimeLinks": "Connexion des liens d'exécution", + "syncingAgentRegistry": "Synchronisation du registre d'agents", + "loadingActiveSessions": "Chargement des sessions actives", + "hydratingWorkspaceBoard": "Initialisation du tableau de bord", + "mappingMemoryGraph": "Cartographie du graphe de mémoire", + "indexingSkillCatalog": "Indexation du catalogue de compétences" + }, + "header": { + "workspace": "Espace de travail", + "sessions": "Sessions", + "events": "Événements", + "live": "En direct", + "off": "Désactivé", + "local": "Local", + "connected": "Connecté", + "disconnected": "Déconnecté", + "reconnecting": "Reconnexion", + "offline": "Hors ligne", + "retry": "Tentative {count}", + "jumpToSearch": "Aller à une page, tâche, agent...", + "searchPlaceholder": "Rechercher des tâches, agents, activité ou saisir une commande de page...", + "searching": "Recherche...", + "noResults": "Aucun résultat trouvé", + "typeToSearch": "Tapez pour rechercher des entités ou accéder instantanément aux pages", + "gatewayConnection": "Connexion à la passerelle", + "status": "Statut", + "host": "Hôte", + "latency": "Latence", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "Tentatives", + "clickToReconnect": "Cliquez pour reconnecter", + "down": "Indisponible", + "goToOverview": "Aller à l'aperçu", + "goToChat": "Aller au chat", + "goToTasks": "Aller aux tâches", + "goToAgents": "Aller aux agents", + "goToActivityFeed": "Aller au fil d'activité", + "goToNotifications": "Aller aux notifications", + "goToTokenUsage": "Aller à l'utilisation des tokens", + "goToLogs": "Aller aux journaux", + "goToMemoryBrowser": "Aller à l'explorateur de mémoire", + "goToIntegrations": "Aller aux intégrations", + "goToSettings": "Aller aux paramètres", + "goToGateways": "Aller aux passerelles", + "goToGithubSync": "Aller à la synchronisation GitHub", + "goToOffice": "Aller au bureau", + "goToSkills": "Aller aux compétences", + "quickNavigation": "Navigation rapide" + }, + "contextSwitcher": { + "localMode": "Mode local", + "connected": "Connecté", + "disconnected": "Déconnecté", + "interface": "Interface", + "essential": "Essentiel", + "full": "Complet", + "organizations": "ORGANISATIONS", + "all": "Tous", + "noTools": "aucun outil", + "unlinked": "non lié", + "newOrganization": "Nouvelle organisation...", + "usernamePlaceholder": "Nom d'utilisateur (utilisateur OS)", + "displayNamePlaceholder": "Nom d'affichage", + "gatewayPortPlaceholder": "Port de la passerelle (obligatoire)", + "installTools": "INSTALLER LES OUTILS", + "usernameAndDisplayRequired": "Le nom d'utilisateur et le nom d'affichage sont obligatoires", + "invalidUsernameFormat": "Format de nom d'utilisateur invalide", + "gatewayPortRequired": "Le port de la passerelle est obligatoire", + "creating": "Création...", + "createUser": "Créer un utilisateur", + "createAndQueue": "Créer + Mettre en file" + }, + "localModeBanner": { + "noGatewayDetected": "Aucune passerelle OpenClaw détectée", + "runningInLocalMode": " — en mode local. Surveillance des sessions Claude Code, tâches et données locales.", + "configureGateway": "Configurer la passerelle" + }, + "updateBanner": { + "updating": "Mise à jour...", + "restartingServer": "Redémarrage du serveur...", + "updateAvailable": "Mise à jour disponible : v{version}", + "newerVersionAvailable": " — une version plus récente de Mission Control est disponible.", + "updateFailed": "Échec de la mise à jour", + "networkError": "Erreur réseau — impossible de joindre le serveur." + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "Mise à jour d'OpenClaw...", + "openclawUpdated": "OpenClaw mis à jour en v{version}", + "openclawUpdateAvailable": "Mise à jour OpenClaw : v{version} disponible", + "installed": "installé : v{version}", + "changelog": "Journal des modifications", + "copied": "Copié !", + "copyCommand": "Copier la commande", + "updateFailed": "Échec de la mise à jour", + "networkError": "Erreur réseau — impossible de joindre le serveur." + }, + "doctorBanner": { + "fixCompleted": "Correction du docteur OpenClaw terminée", + "configDrift": "Dérive de configuration OpenClaw détectée", + "stateIntegrity": "Avertissement d'intégrité d'état OpenClaw", + "securityWarning": "Avertissement de sécurité OpenClaw", + "doctorWarnings": "Avertissements du docteur OpenClaw", + "runningFixes": "Exécution des corrections du docteur OpenClaw...", + "cleaningSessionStores": "Nettoyage des magasins de sessions...", + "archivingOrphanTranscripts": "Archivage des transcriptions orphelines...", + "recheckingHealth": "Revérification de l'état de l'instance actuelle...", + "fixFailed": "Échec de la correction du docteur OpenClaw", + "networkError": "Erreur réseau — impossible de joindre le serveur.", + "runningFix": "Correction en cours...", + "runDoctorFix": "Lancer la correction du docteur" + }, + "liveFeed": { + "liveFeed": "Fil en direct", + "showLiveFeed": "Afficher le fil en direct", + "collapseFeed": "Réduire le fil", + "closeFeed": "Fermer le fil", + "noActivityYet": "Aucune activité pour le moment", + "eventsAppearLocal": "Les événements apparaissent lorsque vous créez des tâches ou que les agents se mettent à jour", + "eventsStreamGateway": "Les événements sont diffusés ici depuis la passerelle et la base de données locale", + "activeSessions": "Sessions actives", + "noActiveSessions": "Aucune session active", + "activeSession": "Active", + "idleSession": "Inactive" + }, + "errorBoundary": { + "somethingWentWrong": "Une erreur est survenue", + "unexpectedError": "Une erreur inattendue s'est produite dans ce panneau." + }, + "page": { + "showLiveFeed": "Afficher le fil en direct", + "availableInFullMode": "{panel} est disponible en mode Complet.", + "switchToFull": "Passer en mode Complet", + "goToOverview": "Aller à l'aperçu", + "requiresGateway": "{panel} nécessite une connexion à la passerelle OpenClaw.", + "configureGateway": "Configurez une passerelle pour activer ce panneau." + }, + "onboarding": { + "stationOnline": "Station en ligne", + "stationReady": "Votre station est prête pour les agents.", + "welcome": { + "title": "Bienvenue sur Mission Control", + "description": "Votre station pour les agents IA. Lorsque les agents s'amarrent ici, ils obtiennent une mémoire persistante, la gestion des tâches, des flux de travail coordonnés et une observabilité complète. Nous avons scanné votre configuration — voici ce qui est en ligne.", + "availableModes": "Modes disponibles", + "localMode": "Mode local", + "gatewayMode": "Mode passerelle", + "monitorClaude": "Surveiller les sessions Claude Code sur cette machine", + "taskTracking": "Suivi des tâches et surveillance des coûts", + "sessionHistory": "Historique des sessions", + "singlePilot": "Opérations en solo", + "orchestrateAgents": "Orchestrer plusieurs agents sur différentes machines", + "memorySkills": "Mémoire, compétences et communication inter-agents", + "webhookIntegrations": "Intégrations Webhook", + "requiresGateway": "Nécessite une passerelle", + "activeSessionsDetected": "{count} {count, plural, one {session active détectée} other {sessions actives détectées}}", + "noActiveSessions": "Aucune session Claude active", + "gatewayConnected": "Passerelle connectée", + "localModeNoGateway": "Mode local — sans passerelle", + "agentsRegistered": "{count} {count, plural, one {agent enregistré} other {agents enregistrés}}", + "noAgentsYet": "Aucun agent pour le moment", + "gatewayRegistered": "Passerelle : Mission Control enregistré", + "gatewayRegistrationPending": "Enregistrement de la passerelle en attente", + "skipSetup": "Passer la configuration", + "getStarted": "Commencer" + }, + "interfaceMode": { + "title": "Choisissez la disposition de votre station", + "description": "Essentiel affiche les panneaux principaux dont les opérateurs ont le plus besoin. Complet déverrouille tous les systèmes de la station — mémoire, automatisation, audit de sécurité et plus. Vous pouvez changer à tout moment.", + "essential": "Essentiel", + "full": "Complet", + "essentialDescription": "Opérations simplifiées — les panneaux que vous utiliserez au quotidien : aperçu de la flotte, agents, tâches, chat, fil d'activité, journaux et paramètres.", + "essentialPanels1": "Aperçu de la flotte, Agents, Tâches, Chat", + "essentialPanels2": "Fil d'activité, Journaux, Paramètres", + "essentialTotal": "7 panneaux au total", + "fullDescription": "Accès complet à la station — ajoute l'explorateur de mémoire, la planification Cron, les Webhooks, les alertes, l'audit de sécurité, le suivi des coûts et la configuration de la passerelle.", + "fullIncludes": "Tout ce qui est dans Essentiel plus", + "fullPanels": "Mémoire, Cron, Webhooks, Audit", + "fullTotal": "Tous les systèmes de la station déverrouillés" + }, + "gatewayLink": { + "title": "Lien de la passerelle", + "description": "Mission Control enregistre son origine auprès de la passerelle OpenClaw pour se connecter via WebSocket et gérer les agents à distance.", + "originRegistered": "Origine de la passerelle enregistrée", + "originAdded": "Origine de Mission Control ajoutée aux allowedOrigins de la passerelle", + "registrationPending": "Enregistrement en attente — sera configuré lors de la prochaine vérification des capacités", + "deviceAuthConfigured": "Authentification de l'appareil configurée", + "deviceAuthDisabled": "Authentification de l'appareil désactivée — MC s'authentifie via le token de la passerelle", + "deviceAuthWillConfigure": "Sera configuré en même temps que l'enregistrement de l'origine", + "testing": "Test...", + "testConnection": "Tester la connexion", + "gatewayReachable": "Passerelle accessible", + "gatewayUnreachable": "Passerelle inaccessible" + }, + "credentials": { + "title": "Sécurisez votre station", + "description": "Le mot de passe administrateur protège la console de votre station. La clé API est un identifiant d'amarrage — les agents la présentent lors de l'enregistrement, seuls les agents autorisés peuvent s'amarrer.", + "checkingCredentials": "Vérification des identifiants...", + "adminPassword": "Mot de passe administrateur", + "passwordStrong": "Le mot de passe est fort et non par défaut", + "passwordWeak": "Utilisation d'un mot de passe par défaut ou faible — changez AUTH_PASS dans .env", + "apiKey": "Clé API", + "apiKeyConfigured": "Configurée — les agents peuvent s'amarrer avec cette clé", + "apiKeyNotSet": "Non définie — les agents ne pourront pas s'amarrer sans clé configurée. Exécutez : bash scripts/generate-env.sh --force", + "openSettings": "Ouvrir les paramètres", + "securityScan": "Scan de sécurité", + "securityScanDescription": "Vérifiez le réseau, l'environnement d'exécution et le renforcement d'OpenClaw avant de lancer la station.", + "launchStation": "Lancer la station", + "launchAnyway": "Lancer quand même" + } + }, + "channels": { + "title": "Canaux", + "loadingChannels": "Chargement des canaux...", + "gatewayConnected": "Passerelle connectée", + "gatewayDisconnected": "Passerelle déconnectée", + "refresh": "Actualiser", + "noChannelsConfigured": "Aucun canal configuré. Configurez des plateformes de messagerie (WhatsApp, Telegram, Discord, Slack, etc.) dans les paramètres de la passerelle OpenClaw.", + "gatewayUnreachable": "Impossible d'atteindre la passerelle OpenClaw. Vérifiez qu'elle est en cours d'exécution et accessible.", + "statusConnected": "Connecté", + "statusRunning": "En cours d'exécution", + "statusConfigured": "Configuré", + "statusInactive": "Inactif", + "probe": "Sonder", + "probing": "Sondage...", + "showQr": "Afficher QR", + "relink": "Relier à nouveau", + "waitForScan": "Attendre le scan", + "logout": "Se déconnecter", + "loggedOut": "Déconnecté.", + "profile": "Profil", + "editProfile": "Modifier le profil", + "edit": "Modifier", + "noProfileSet": "Aucun profil défini", + "displayName": "Nom d'affichage", + "username": "Nom d'utilisateur", + "about": "À propos", + "bio": "Biographie", + "avatarUrl": "URL de l'avatar", + "bannerUrl": "URL de la bannière", + "website": "Site web", + "lightning": "Lightning", + "saving": "Enregistrement...", + "saveAndPublish": "Enregistrer et publier", + "importFromRelays": "Importer depuis les relais", + "hideAdvanced": "Masquer les options avancées", + "showAdvanced": "Afficher les options avancées", + "cancel": "Annuler", + "profilePublished": "Profil publié sur les relais.", + "saveFailed": "Échec de l'enregistrement.", + "profileImported": "Profil importé depuis les relais.", + "importFailed": "Échec de l'importation.", + "accounts": "Comptes ({count})" + }, + "integrations": { + "title": "Intégrations", + "loading": "Chargement des intégrations...", + "connectedCount": "{connected} sur {total} connectées", + "pullAll": "Tout récupérer", + "discard": "Ignorer", + "save": "Enregistrer", + "saving": "Enregistrement...", + "saveChanges": "Enregistrer les modifications", + "cancel": "Annuler", + "remove": "Supprimer", + "removeTitle": "Supprimer l'intégration ?", + "removeDescription": "Cela supprimera {target} du fichier .env. La passerelle doit être redémarrée pour que les modifications prennent effet.", + "notSet": "non défini", + "noIntegrationsInCategory": "Aucune intégration dans cette catégorie" + }, + "execApproval": { + "title": "Approbations d'exécution", + "pendingBadge": "{count} en attente", + "realtimeLabel": "Temps réel via WebSocket", + "viewApprovals": "Approbations", + "viewAllowlist": "Configuration de la liste blanche", + "filterAll": "Toutes", + "filterPending": "En attente", + "filterResolved": "Résolues", + "noPendingApprovals": "Aucune approbation en attente. Les demandes d'exécution des agents apparaîtront ici en superposition.", + "noApprovals": "Aucune approbation à afficher.", + "loadingAllowlist": "Chargement de la liste blanche...", + "addAgent": "Ajouter un agent", + "save": "Enregistrer", + "saving": "Enregistrement...", + "reload": "Recharger", + "noAgentsConfigured": "Aucun agent configuré. Entrez un ID d'agent ci-dessus pour créer une liste blanche.", + "addPattern": "Ajouter un modèle", + "noAllowlistPatterns": "Aucun modèle dans la liste blanche. Les commandes nécessiteront une approbation manuelle.", + "previewMatches": "Aperçu : {count} commande(s) récente(s) correspondrait(ent)", + "andMore": "...et {count} de plus", + "allowOnce": "Autoriser une fois", + "alwaysAllow": "Toujours autoriser", + "deny": "Refuser", + "statusExpired": "Expiré", + "statusApproved": "Approuvé", + "statusDenied": "Refusé" + }, + "notifications": { + "title": "Notifications", + "markAllRead": "Tout marquer comme lu", + "recipientLabel": "Destinataire", + "recipientPlaceholder": "Nom de l'agent (ex. : my-agent)", + "noNotifications": "Aucune notification", + "markRead": "Marquer comme lu" + }, + "localAgentsDoc": { + "title": "AGENTS.md local", + "noPathFound": "Aucun AGENTS.md local trouvé pour l'instant", + "openInVsCode": "Ouvrir dans VS Code", + "copied": "Copié", + "copyPath": "Copier le chemin", + "collapse": "Réduire", + "expand": "Développer", + "loading": "Chargement du AGENTS.md local...", + "notDetected": "Aucun AGENTS.md local détecté.", + "checked": "Vérifié : {paths}" + }, + "memoryGraph": { + "loading": "Chargement du graphe...", + "retry": "Réessayer", + "noMemoryDatabases": "Aucune base de données de mémoire trouvée", + "noMemoryDatabasesHint": "Fichiers SQLite de mémoire OpenClaw non détectés", + "allAgents": "tous les agents", + "filterFiles": "filtrer les fichiers...", + "statAgents": "agents", + "statFiles": "fichiers", + "statChunks": "fragments", + "statSize": "taille", + "legendSessions": "sessions", + "legendMemory": "mémoire", + "legendKnowledge": "connaissances", + "keyboardHint": "défiler pour zoomer / glisser pour déplacer / cliquer sur un nœud pour approfondir", + "chunks": "fragments", + "text": "texte" + }, + "agentComms": { + "connecting": "Connexion au flux...", + "eventsCount": "{count} événement(s)", + "connectionGateway": "Passerelle", + "connectionSse": "SSE", + "connectionPolling": "Interrogation", + "sourceLive": "En direct", + "sourceMixed": "Mixte", + "sourceSeeded": "Amorcé", + "sessions": "{active}/{total} sessions", + "scrollToLatest": "Faire défiler vers le dernier", + "toLabel": "À :", + "composerPlaceholderTarget": "Message à {name}... (Entrée pour envoyer)", + "composerPlaceholderBroadcast": "Sélectionnez une session ou un agent ci-dessus, ou tapez pour diffuser...", + "send": "Envoyer", + "noFeedEvents": "Aucun événement de flux pour l'instant", + "noFilterEvents": "Aucun événement {filter}", + "noFeedEventsHint": "Connectez-vous à la passerelle ou attendez l'activité de l'agent. Les événements des sessions, outils, chat et traces seront diffusés en temps réel.", + "noFilterEventsHint": "Passez à « Toutes » pour voir les événements d'autres catégories, ou attendez les événements {filter}." + }, + "agentDetail": { + "configTab": "Configuration", + "filesTab": "Fichiers", + "toolsTab": "Outils", + "channelsTab": "Canaux", + "cronTab": "Cron", + "modelsTab": "Modèles", + "workspaceFiles": "Fichiers de l'espace de travail", + "refresh": "Actualiser", + "charCount": "{count} caractères", + "missing": "manquant", + "selectFileToView": "Sélectionnez un fichier à afficher ou modifier", + "reset": "Réinitialiser", + "saving": "Enregistrement...", + "save": "Enregistrer", + "fileNotExistYet": "Ce fichier n'existe pas encore. Vous pouvez le créer en saisissant du contenu et en enregistrant.", + "toolConfiguration": "Configuration des outils", + "profile": "Profil :", + "saved": "Enregistré", + "allowListCount": "Liste autorisée ({count})", + "noAllowList": "Aucune liste autorisée explicite (utilisation des valeurs par défaut du profil)", + "addToolAllowList": "Ajouter un outil à la liste autorisée", + "add": "Ajouter", + "alsoAllowCount": "Autoriser aussi ({count})", + "alsoAllowDesc": "Outils supplémentaires autorisés en plus des valeurs par défaut du profil.", + "none": "Aucun", + "denyListCount": "Liste refusée ({count})", + "noDeniedTools": "Aucun outil refusé", + "addToolDenyList": "Ajouter un outil à la liste refusée", + "channelStatus": "État des canaux", + "channelStatusDesc": "Canaux disponibles pour {agent}", + "noChannelsFound": "Aucun canal trouvé...", + "connectedOf": "{connected}/{total} connectés", + "noAccounts": "Aucun compte", + "configuredCount": "{count} configurés", + "notConfigured": "Non configuré", + "enabledCount": "{count} activés", + "disabled": "Désactivé", + "cronJobs": "Tâches cron", + "allCronJobsCount": "{count} sur {total} tâches", + "agentCronJobsCount": "{count} sur {total} tâches", + "agentOnly": "Agent seulement", + "showAll": "Tout afficher", + "noCronJobsFound": "Aucune tâche cron trouvée", + "noCronJobsAssigned": "Aucune tâche cron assignée à {agent}", + "noSchedule": "sans planification", + "enabled": "activé", + "lastRun": "Dernier :", + "nextRun": "Prochain :", + "modelConfiguration": "Configuration des modèles", + "modelConfigDesc": "Configurez les modèles principal et de secours pour cet agent.", + "primaryModel": "Modèle principal", + "defaultModel": "Par défaut", + "fallbackChainCount": "Chaîne de secours ({count})", + "fallbackChainDesc": "Modèles essayés dans l'ordre si le modèle principal échoue ou n'est pas disponible.", + "noFallbackModels": "Aucun modèle de secours configuré.", + "moveUp": "Monter", + "moveDown": "Descendre", + "remove": "Supprimer", + "addFallbackPlaceholder": "Ajouter un modèle de secours", + "sandboxMode": "Mode", + "sandboxWorkspace": "Espace de travail", + "sandboxNetwork": "Réseau", + "sandboxNetworkPlaceholder": "ex. : none, host", + "toolsSection": "Outils", + "subAgentsSection": "Sous-agents", + "addSubAgentPlaceholder": "Ajouter un sous-agent", + "addSubAgent": "Ajouter", + "subAgentModelOverride": "Remplacement du modèle du sous-agent", + "defaultInherit": "Par défaut (hériter)", + "modelLabel": "Modèle :", + "noSubAgents": "Aucun sous-agent configuré.", + "memorySearch": "Recherche en mémoire", + "cancel": "Annuler" + }, + "taskBoard": { + "title": "Tableau des tâches", + "allProjects": "Tous les projets", + "projects": "Projets", + "close": "Fermer", + "spawnSubAgent": "Créer un sous-agent", + "newTask": "Nouvelle tâche", + "refresh": "Actualiser", + "spawnAgentPlaceholder": "Nom de l'agent", + "spawnTaskPlaceholder": "Description de la tâche", + "timeoutTitle": "Délai d'expiration (minutes)", + "spawning": "Création...", + "spawn": "Créer", + "noActiveSpawnRequests": "Aucune demande de création active", + "dismissError": "Fermer l'erreur", + "taskBoardAriaLabel": "Tableau des tâches", + "columnAriaLabel": "Colonne {title}, {count} tâches", + "colInbox": "Boîte de réception", + "colAssigned": "Assigné", + "colInProgress": "En cours", + "colReview": "Révision", + "colQualityReview": "Révision qualité", + "colDone": "Terminé", + "recurring": "RÉCURRENT", + "spawned": "GÉNÉRÉ", + "spawnedFromTask": "Généré depuis la tâche #{id}", + "unassigned": "Non assigné", + "due": "Échéance :", + "dropTasksHere": "Déposez les tâches ici", + "priority_low": "Faible", + "priority_medium": "Moyenne", + "priority_high": "Haute", + "priority_critical": "Critique", + "claudeCodeTasks": "Tâches Claude Code", + "collapse": "Réduire", + "expand": "Développer", + "loading": "Chargement...", + "noTeamTasksFound": "Aucune tâche d'équipe trouvée", + "noTeamTasksDesc": "Aucune tâche d'équipe Claude Code n'est actuellement active.", + "taskCount": "{count} {count, plural, one {tâche} other {tâches}}", + "blocked": "bloqué", + "hermesScheduledTasks": "Tâches planifiées Hermes", + "noScheduledTasksFound": "Aucune tâche planifiée trouvée", + "noScheduledTasksDesc": "Aucune tâche planifiée Hermes n'est actuellement active.", + "noSchedule": "sans planification", + "enabled": "activé", + "disabled": "désactivé", + "createNewTask": "Créer une nouvelle tâche", + "fieldTitle": "Titre", + "fieldDescription": "Description", + "fieldPriority": "Priorité", + "fieldProject": "Projet", + "fieldAssignTo": "Assigner à", + "fieldTags": "Étiquettes", + "makeRecurring": "Rendre récurrent", + "createRecurringTask": "Créer une tâche récurrente", + "createTask": "Créer la tâche", + "cancel": "Annuler", + "editTask": "Modifier la tâche", + "fieldStatus": "Statut", + "saveChanges": "Enregistrer les modifications", + "edit": "Modifier", + "deleteTaskConfirm": "Supprimer \"{title}\" ?", + "delete": "Supprimer", + "closeTaskDetails": "Fermer les détails de la tâche", + "noDescription": "Aucune description", + "taskDetailTabs": "Onglets de détails de la tâche", + "tabDetails": "Détails", + "tabComments": "Commentaires", + "tabQualityReview": "Révision qualité", + "tabSession": "Session", + "ticket": "Ticket", + "project": "Projet", + "status": "Statut", + "priority": "Priorité", + "assignedTo": "Assigné à", + "created": "Créé", + "issue": "Issue", + "branch": "Branche", + "pr": "PR", + "live": "En direct", + "postingAs": "Publication en tant que", + "newComment": "Nouveau commentaire...", + "addComment": "Ajouter un commentaire", + "broadcastToSubscribers": "Diffuser aux abonnés", + "broadcastPlaceholder": "Diffuser un message à tous les abonnés...", + "broadcast": "Diffuser", + "broadcastSent": "Diffusion envoyée à {count} abonnés", + "loadingComments": "Chargement des commentaires...", + "noComments": "Aucun commentaire pour l'instant", + "aegisQualityReview": "Révision qualité Aegis", + "noReviews": "Aucune révision pour l'instant", + "reviewerPlaceholder": "Nom du réviseur", + "reviewNotesPlaceholder": "Notes de révision...", + "submit": "Soumettre", + "loadingTranscript": "Chargement de la transcription...", + "noSessionMessages": "Aucun message de session" + }, + "cronManagement": { + "title": "Gestion des crons", + "subtitle": "Planifier et gérer les tâches récurrentes", + "loading": "Chargement...", + "refresh": "Actualiser", + "addJob": "Ajouter une tâche", + "calendarView": "Vue calendrier", + "calendarViewDescLocal": "Les heures sont affichées dans votre fuseau horaire local", + "calendarViewDesc": "Les heures sont affichées en UTC", + "prev": "Précédent", + "today": "Aujourd'hui", + "next": "Suivant", + "calMode_agenda": "Agenda", + "calMode_week": "Semaine", + "calMode_month": "Mois", + "searchPlaceholder": "Rechercher des tâches...", + "allAgents": "Tous les agents", + "allStates": "Tous les états", + "enabled": "Activé", + "disabled": "Désactivé", + "all": "Tous", + "sortName": "Nom", + "sortSchedule": "Planification", + "sortLastRun": "Dernière exécution", + "sortNextRun": "Prochaine exécution", + "ascending": "Croissant", + "descending": "Décroissant", + "noJobsMatchFilters": "Aucune tâche ne correspond aux filtres actuels.", + "uniqueJobs": "{count} {count, plural, one {tâche unique} other {tâches uniques}}", + "noJobsForDay": "Aucune tâche planifiée pour cette date.", + "jobCount": "{count} {count, plural, one {tâche} other {tâches}}", + "runsCount": "{count} {count, plural, one {exécution} other {exécutions}}", + "totalRunsCount": "{count} {count, plural, one {exécution} other {exécutions}} au total", + "moreJobs": "+{count} autres", + "firstRun": "première {time}", + "scheduledJobs": "Tâches planifiées", + "jobsCount": "{count} sur {total} tâches", + "loadingJobs": "Chargement des tâches...", + "noCronJobsFound": "Aucune tâche cron trouvée.", + "colJobName": "Nom de la tâche", + "colAgent": "Agent", + "colSchedule": "Planification", + "colModel": "Modèle", + "colStatus": "Statut", + "colLastRun": "Dernière exécution", + "colNextRun": "Prochaine exécution", + "colActions": "Actions", + "enable": "Activer", + "disable": "Désactiver", + "run": "Exécuter", + "runNowForce": "Exécuter maintenant (forcer)", + "runNowIfDue": "Exécuter maintenant (si dû)", + "clone": "Cloner", + "history": "Historique", + "configuration": "Configuration", + "delivery": "Livraison", + "source": "Source", + "localSchedulerAutomation": "Planificateur local / Automatisation", + "command": "Commande", + "timing": "Temporisation", + "recentLogs": "Journaux récents", + "lastRun": "Dernière exécution", + "nextRun": "Prochaine exécution", + "timezone": "Fuseau horaire", + "remove": "Supprimer", + "close": "Fermer", + "noLogsAvailable": "Aucun journal disponible.", + "runHistoryTitle": "Historique des exécutions : {name}", + "totalRuns": "{count} {count, plural, one {exécution} other {exécutions}} au total", + "filterRunsPlaceholder": "Filtrer les exécutions...", + "timestamp": "Horodatage", + "duration": "Durée", + "error": "Erreur", + "noRunHistoryAvailable": "Aucun historique d'exécution disponible.", + "loadMore": "Charger plus", + "addNewCronJob": "Ajouter une nouvelle tâche cron", + "fieldJobName": "Nom de la tâche", + "fieldSchedule": "Planification (format cron)", + "quickSelect": "Sélection rapide...", + "scheduleFormatHint": "Format : minute heure jour mois jourDeLaSemaine", + "fieldCommand": "Commande", + "fieldModelOptional": "Modèle (facultatif)", + "modelHint": "Laissez vide pour utiliser le modèle par défaut de l'agent ou de la passerelle.", + "fieldStaggerOptional": "Décalage échelonné (facultatif)", + "seconds": "secondes", + "staggerHint": "Retardez l'exécution pour éviter les chevauchements avec d'autres tâches sur le même horaire.", + "fieldDescriptionOptional": "Description (facultatif)", + "descriptionPlaceholder": "Que fait cette tâche ?", + "cancel": "Annuler", + "claudeCodeTeams": "Équipes Claude Code", + "teamsCount": "{count} {count, plural, one {équipe} other {équipes}}", + "collapse": "Réduire", + "expand": "Développer", + "noClaudeCodeTeams": "Aucune équipe Claude Code trouvée dans ~/.claude/teams/", + "membersCount": "{count} {count, plural, one {membre} other {membres}}" + }, + "sessionDetails": { + "title": "Gestion des sessions", + "subtitle": "Surveiller et gérer les sessions d'agents actives", + "filter": "Filtrer", + "filterAll": "Toutes les sessions", + "filterActive": "Actives uniquement", + "filterIdle": "Inactives uniquement", + "sortBy": "Trier par", + "sortAge": "Ancienneté", + "sortTokens": "Utilisation de tokens", + "sortModel": "Modèle", + "timeWindow": "Fenêtre temporelle", + "last1h": "Dernière heure", + "last6h": "6 dernières heures", + "last24h": "24 dernières heures", + "last7d": "7 derniers jours", + "allTime": "Tout", + "global": "Global", + "unknown": "Inconnu", + "sessionCount": "{filtered} sur {total} sessions", + "activeCount": "{count} actives", + "noSessionsMatch": "Aucune session ne correspond au filtre actuel", + "model": "Modèle", + "tokenUsage": "Utilisation de tokens", + "sessionDetails": "Détails de la session", + "kind": "Type", + "id": "ID", + "lastActivity": "Dernière activité", + "messages": "Messages", + "label": "Étiquette", + "addLabel": "Cliquer pour ajouter une étiquette...", + "sessionControls": "Contrôles de session", + "thinking": "Réflexion", + "verbose": "Verbeux", + "reasoning": "Raisonnement", + "off": "Désactivé", + "on": "Activé", + "minimal": "Minimal", + "low": "Bas", + "medium": "Moyen", + "high": "Élevé", + "xhigh": "Très élevé", + "full": "Complet", + "stream": "Flux", + "modelInformation": "Informations sur le modèle", + "fullName": "Nom complet", + "provider": "Fournisseur", + "description": "Description", + "monitor": "Surveiller", + "pause": "Mettre en pause", + "terminate": "Terminer", + "working": "En cours...", + "delete": "Supprimer", + "deleteConfirm": "Supprimer ?", + "yes": "Oui", + "no": "Non", + "confirmTerminate": "Êtes-vous sûr de vouloir terminer cette session ?", + "failedMonitor": "Échec de la surveillance de la session", + "failedPause": "Échec de la mise en pause de la session", + "failedTerminate": "Échec de la terminaison de la session", + "sessionOverview": "Aperçu des sessions", + "totalSessions": "Total des sessions", + "active": "Actives", + "idle": "Inactives", + "subAgents": "Sous-agents", + "cronJobs": "Tâches cron", + "modelDistribution": "Distribution des modèles", + "highTokenUsage": "Utilisation élevée de tokens", + "highTokenUsageDesc": "{count} sessions utilisent plus de 80 % de leur limite de tokens." + }, + "costTracker": { + "title": "Suivi des coûts", + "subtitle": "Analyse de l'utilisation des tokens, des coûts et des dépenses par agents, modèles et sessions", + "loadingCostData": "Chargement des données de coût", + "noUsageData": "Aucune donnée d'utilisation pour l'instant", + "noUsageDataDesc": "Les données d'utilisation apparaissent lorsque les agents exécutent des sessions et consomment des tokens.", + "refresh": "Actualiser", + "totalCost": "Coût total ({timeframe})", + "totalTokens": "Total des tokens", + "apiRequests": "Requêtes API", + "activeAgents": "Agents actifs", + "taskAttributed": "Attribué aux tâches", + "usageTrends": "Tendances d'utilisation", + "perTurn": "Par tour", + "cumulative": "Cumulatif", + "noTrendData": "Aucune donnée de tendance pour cette période", + "tokenUsageByModel": "Utilisation des tokens par modèle", + "noModelData": "Aucune donnée de modèle", + "costDistributionByModel": "Distribution des coûts par modèle", + "noCostData": "Aucune donnée de coût", + "performanceInsights": "Analyses de performance", + "mostEfficientModel": "Modèle le plus efficace", + "avgTokensPerRequest": "Tokens moyens/requête", + "optimizationPotential": "Potentiel d'optimisation", + "savingsPossible": "d'économies possibles", + "exportData": "Exporter les données", + "exportDataDesc": "Télécharger les enregistrements d'utilisation des tokens, les statistiques des modèles et les ventilations des coûts", + "exporting": "Exportation...", + "noAgentData": "Aucune donnée par agent", + "noAgentDataDesc": "Les enregistrements d'utilisation des tokens apparaîtront une fois que les agents commenceront à rapporter", + "agents": "Agents", + "totalCostDays": "Coût total ({days}j)", + "avgPer1kTokens": "Moy. $/1K tokens", + "perAgentCost": "Coût par agent", + "agentBreakdown": "Détail par agent", + "inputTokens": "Tokens d'entrée", + "outputTokens": "Tokens de sortie", + "ioRatio": "Ratio E/S", + "lastActive": "Dernière activité", + "noTaskCosts": "Aucun coût attribué aux tâches", + "tokens": "tokens", + "sortBy": "Trier", + "noSessionCostData": "Aucune donnée de coût de session", + "noSessionCostDataDesc": "Les ventilations par session apparaissent une fois l'utilisation enregistrée.", + "activeStatus": "Active", + "inactiveStatus": "Inactive", + "requests": "requêtes", + "inShort": "entrée", + "outShort": "sortie", + "avgPerReq": "moy./requête", + "noTaskCostData": "Aucune donnée de coût de tâche", + "noTaskCostDataDesc": "Les coûts seront attribués aux tâches une fois que les agents travailleront dessus", + "tasksWithCosts": "Tâches avec coûts", + "attributedCost": "Coût attribué", + "attributedTokens": "Tokens attribués", + "unattributed": "Non attribué", + "tasksByCost": "Tâches par coût", + "reqs": "req." + }, + "superAdmin": { + "accessDenied": "Accès refusé", + "accessDeniedDesc": "Le super contrôle nécessite des privilèges d'administrateur.", + "loading": "Chargement des données super admin...", + "title": "Super contrôle", + "subtitleLocal": "Vue du plan de contrôle local sur les automatisations du planificateur et l'état d'exécution.", + "subtitleMultiTenant": "Plan de contrôle de provisionnement multi-tenant avec portes d'approbation et actions destructrices sécurisées.", + "addWorkspace": "+ Ajouter un espace de travail", + "refresh": "Actualiser", + "activeOrgs": "Organisations actives", + "pendingInProgress": "En attente / En cours", + "erroredOrgs": "Organisations en erreur", + "queuedApprovals": "Approbations en file", + "createNewWorkspace": "Créer un nouvel espace de travail", + "createWorkspaceHint": "Remplissez les détails ci-dessous et cliquez sur Créer + File pour provisionner une nouvelle instance client.", + "slugPlaceholder": "Identifiant (ex. acme)", + "displayNamePlaceholder": "Nom d'affichage", + "linuxUserPlaceholder": "Utilisateur Linux (optionnel)", + "planStandard": "Standard", + "planPro": "Pro", + "planEnterprise": "Entreprise", + "gatewayPortPlaceholder": "Port de passerelle", + "dashboardPortPlaceholder": "Port du tableau de bord", + "dryRun": "Simulation", + "live": "(réel)", + "createAndQueue": "Créer + File", + "tabOrganizations": "Organisations", + "tabJobs": "travaux", + "tabEvents": "événements", + "searchOrganizations": "Rechercher des organisations", + "showing": "Affichage de {shown} sur {total}", + "colTenant": "Locataire", + "colSystemUser": "Utilisateur système", + "colOwner": "Propriétaire", + "colStatus": "Statut", + "colLatestJob": "Dernier travail", + "colAction": "Action", + "unassigned": "non assigné", + "by": "par", + "unknownCreator": "inconnu", + "localReadOnly": "Local en lecture seule", + "queueDecommission": "Mettre en file de désaffectation", + "noMatchingOrgs": "Aucune organisation correspondante.", + "prev": "Préc.", + "next": "Suiv.", + "page": "Page {page} / {total}", + "searchJobs": "Rechercher des travaux", + "colJob": "Travail", + "colRequestedApproved": "Demandé/Approuvé", + "reqShort": "Dem.", + "apprShort": "Appr.", + "view": "Voir", + "viewEvents": "Voir les événements", + "approveAndRun": "Approuver + Exécuter", + "approve": "Approuver", + "reject": "Rejeter", + "running": "En cours...", + "run": "Exécuter", + "noMatchingJobs": "Aucun travail correspondant.", + "showingEventsForJob": "Affichage des événements du travail #{jobId}", + "selectJobForEvents": "Sélectionnez un travail pour inspecter le journal d'événements de provisionnement.", + "noEventsYet": "Aucun événement pour ce travail pour l'instant.", + "queueDecommissionTitle": "Mettre en file de désaffectation : {name}", + "reviewImpact": "Vérifiez l'impact avant de créer le travail.", + "dryRunRecommended": "Simulation (recommandée)", + "dryRunDesc": "Aucun changement système, valide les commandes et enregistre une exécution complète du plan.", + "liveExecution": "Exécution réelle", + "liveExecutionDesc": "Arrêtera les services et appliquera les changements de désaffectation après approbation + exécution.", + "removeLinuxUser": "Supprimer l'utilisateur Linux", + "removeLinuxUserDesc": "Exécute `userdel -r` et supprime le répertoire personnel.", + "removeStateDirs": "Supprimer les répert. d'état/espace de travail", + "removeStateDirsDesc": "Supprime les chemins `.openclaw` et `workspace` lorsque l'utilisateur est conservé.", + "impactSummary": "Résumé de l'impact", + "impactStopsService": "Arrête et désactive `openclaw-gateway@{user}.service`.", + "impactRemovesEnv": "Supprime `/etc/openclaw-tenants/{user}.env`.", + "impactLinuxUserRemoved": "L'utilisateur Linux sera supprimé.", + "impactStateDirsRemoved": "Les répertoires d'état/espace de travail seront supprimés.", + "impactRetained": "L'utilisateur Linux et les répertoires sont conservés.", + "reasonOptional": "Raison (optionnelle)", + "typeSlugLabel": "Tapez", + "toConfirmLive": "pour confirmer la désaffectation réelle", + "cancel": "Annuler", + "queueing": "Mise en file...", + "queueDryRunDecommission": "Mettre en file la simulation de désaffectation", + "queueLiveDecommission": "Mettre en file la désaffectation réelle", + "slugAndNameRequired": "L'identifiant et le nom d'affichage sont obligatoires", + "tenantCreated": "Locataire {slug} créé. Travail d'amorçage mis en file.", + "jobExecuted": "Travail #{jobId} exécuté", + "jobApprovedExecuted": "Travail #{jobId} approuvé et exécuté", + "typeToConfirm": "Tapez {slug} pour confirmer la désaffectation réelle", + "decommissionQueuedDryRun": "Simulation de désaffectation mise en file pour {slug}", + "decommissionQueued": "Désaffectation mise en file pour {slug}", + "optionalReason": "Raison optionnelle pour {action} :", + "jobActioned": "Travail #{jobId} {action}" + }, + "auditTrail": { + "title": "Journal d'audit", + "eventsLogged": "{count, plural, one {# événement} other {# événements}} enregistrés", + "refresh": "Actualiser", + "allActions": "Toutes les actions", + "groupAuth": "Authentification", + "groupUsers": "Utilisateurs", + "groupAgents": "Agents", + "groupSystem": "Système", + "groupConfig": "Configuration", + "groupWorkspaces": "Espaces de travail", + "actionLogin": "Connexion", + "actionLoginFailed": "Échec de connexion", + "actionLogout": "Déconnexion", + "actionLoginGoogle": "Connexion Google", + "actionGoogleDisconnect": "Google déconnecté", + "actionPasswordChange": "Changement de mot de passe", + "actionProfileUpdate": "Mise à jour du profil", + "actionUserCreate": "Utilisateur créé", + "actionUserUpdate": "Utilisateur mis à jour", + "actionUserDelete": "Utilisateur supprimé", + "actionRoleDenied": "Accès refusé", + "actionAccessRequest": "Accès demandé", + "actionAccessApprove": "Accès approuvé", + "actionAccessDeny": "Accès refusé", + "actionAgentRegister": "Agent enregistré", + "actionAgentCreate": "Agent créé", + "actionAgentUpdate": "Agent mis à jour", + "actionAgentDelete": "Agent supprimé", + "actionAgentConfigSync": "Configuration synchronisée", + "actionLocalAgentSync": "Agents locaux synchronisés", + "actionSettingsUpdate": "Paramètres mis à jour", + "actionAutoBackup": "Sauvegarde automatique", + "actionBackupCreate": "Sauvegarde créée", + "actionBackupDelete": "Sauvegarde supprimée", + "actionHeartbeatCheck": "Vérification du signal", + "actionIntegrationTest": "Test d'intégration", + "actionCleanup": "Nettoyage", + "actionExport": "Exportation", + "actionTokenRotate": "Token renouvelé", + "actionGatewayConfigUpdate": "Configuration de passerelle mise à jour", + "actionWorkspaceCreate": "Espace de travail créé", + "actionWorkspaceUpdate": "Espace de travail mis à jour", + "actionWorkspaceDelete": "Espace de travail supprimé", + "filterByActor": "Filtrer par acteur...", + "noEvents": "Aucun événement d'audit trouvé", + "userRef": "utilisateur #{id}", + "previous": "Précédent", + "next": "Suivant", + "pageOf": "Page {page} sur {total}", + "adminRequired": "Accès administrateur requis pour consulter les journaux d'audit", + "failedFetch": "Échec du chargement du journal d'audit", + "detailUsername": "nom d'utilisateur", + "detailRole": "rôle", + "detailName": "nom", + "detailPasswordReset": "mot de passe réinitialisé", + "detailChanged": "modifié", + "detailSize": "taille", + "detailMarkedOffline": "marqué hors ligne", + "detailAgent": "agent", + "detailSessions": "sessions", + "detailEvents": "événements", + "detailRemoved": "supprimé", + "detailType": "type" + }, + "securityAudit": { + "title": "Audit de Sécurité", + "subtitle": "Posture de sécurité, événements d'authentification, scores de confiance et détection des menaces", + "timeframeHour": "Heure", + "timeframeDay": "Jour", + "timeframeWeek": "Semaine", + "timeframeMonth": "Mois", + "loadingSecurityData": "Chargement des données de sécurité", + "securityPosture": "Posture de Sécurité", + "blendedScore": "Score combiné : 70% configuration de l'infrastructure, 30% historique des événements.", + "infrastructureScan": "Analyse de l'Infrastructure", + "scanCredentials": "Identifiants", + "scanNetwork": "Réseau", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "Exécution", + "scanOs": "Sécurité OS", + "authEvents": "Événements d'Authentification", + "noAuthEvents": "Aucun événement d'authentification sur cette période", + "colType": "Type", + "colActor": "Acteur", + "colIP": "IP", + "colTime": "Heure", + "agentTrustScores": "Scores de Confiance des Agents", + "noAgentTrustData": "Aucune donnée de confiance d'agent", + "flagged": "signalé", + "secretExposureAlerts": "Alertes d'Exposition de Secrets", + "noSecretsDetected": "Aucun secret détecté", + "colFile": "Fichier", + "colPreview": "Aperçu", + "colStatus": "Statut", + "colDetected": "Détecté", + "statusResolved": "résolu", + "statusActive": "actif", + "mcpToolAudit": "Audit des Outils MCP", + "noToolUsageData": "Aucune donnée d'utilisation des outils", + "chartSuccess": "Succès", + "chartFailure": "Échec", + "rateLimitAbuseSignals": "Signaux de Limite de Débit / Abus", + "noRateLimitSignals": "Aucun signal de limite de débit", + "hits": "{hits} requêtes", + "injectionAttempts": "Tentatives d'Injection", + "noInjectionAttempts": "Aucune tentative d'injection détectée", + "colSource": "Source", + "colInput": "Entrée", + "statusBlocked": "bloqué", + "statusPassed": "passé", + "securityTimeline": "Chronologie de Sécurité ({timeframe})", + "noTimelineData": "Aucune donnée de chronologie", + "chartAuthEvents": "Événements Auth", + "chartInjections": "Injections", + "chartSecrets": "Secrets", + "chartToolCalls": "Appels d'Outils", + "agentEvalDashboard": "Tableau de Bord d'Évaluation des Agents", + "overallConvergence": "Convergence Globale", + "crossAgentAlignment": "Alignement inter-agents sur les couches d'évaluation", + "noEvalData": "Aucune donnée d'évaluation", + "convergence": "Convergence :", + "drift": "dérive", + "fixPrefix": "Correction : {fix}", + "issueCount": "{count, plural, one {# problème} other {# problèmes}}" + }, + "office": { + "title": "Pont de Commandement", + "subtitle": "Surveillez votre équipe en temps réel", + "loadingLocalSessions": "Analyse des sessions locales...", + "loadingOffice": "Chargement du bureau...", + "activeCount": "{count} actifs", + "standbyCount": "{count} en attente", + "alertCount": "{count} alertes", + "offlineCount": "{count} hors ligne", + "buttonDeck": "Pont", + "buttonCrewChart": "Organigramme", + "refresh": "Actualiser", + "emptyDeck": "Le pont est vide", + "emptyDeckSubtitle": "Déployez des agents pour les voir apparaître ici", + "crewHeader": "ÉQUIPAGE", + "onlineCount": "{count} en ligne", + "filterAll": "Tous", + "filterWorking": "En travail", + "filterIdle": "Inactif", + "filterNeedsAttention": "Attention requise", + "filterRunning": "En cours", + "filterNotRunning": "Arrêté", + "noWorkersInFilter": "Aucun membre dans ce filtre.", + "noRecentActivity": "Aucune activité récente", + "activeStatus": "actif", + "idleMinutes": "{minutes}m inactif", + "mainDeck": "PONT PRINCIPAL", + "radarLabel": "Radar", + "resetView": "Réinitialiser", + "showCrewButton": "Afficher l'Équipage", + "hideCrewButton": "Masquer l'Équipage", + "showRadarButton": "Afficher le Radar", + "hideRadarButton": "Masquer le Radar", + "showLogButton": "Afficher le Journal", + "hideLogButton": "Masquer le Journal", + "resetLayout": "Réinitialiser la Disposition", + "deckLog": "Journal du Pont", + "noEventsYet": "Aucun événement. Cliquez sur une zone ou exécutez une action.", + "legendActive": "Actif", + "legendStandby": "En attente", + "legendOther": "Autre", + "hotspotUp": "Haut", + "hotspotDown": "Bas", + "hotspotLeft": "Gauche", + "hotspotRight": "Droite", + "hotspotFineMinusX": "Fin -X", + "hotspotFinePlusX": "Fin +X", + "hotspotWider": "Plus large", + "hotspotNarrower": "Plus étroit", + "hotspotTaller": "Plus haut", + "hotspotShorter": "Plus bas", + "segmentedBy": "Segmenté par", + "segmentCategory": "Catégorie", + "segmentRole": "Rôle", + "segmentStatus": "Statut", + "currentActivity": "Activité Actuelle", + "taskStatTotal": "Total", + "taskStatAssigned": "Assignés", + "taskStatActive": "Actifs", + "taskStatDone": "Terminés", + "sessionLabel": "Session :", + "quickActions": "Actions Rapides", + "actionFocus": "Concentration", + "actionPair": "Pairage", + "actionBreak": "Pause", + "openFlightDeck": "Ouvrir dans Flight Deck", + "openingFlightDeck": "Ouverture de Flight Deck...", + "flightDeckCompanion": "Application compagnon privée/pro pour l'analyse approfondie des sessions", + "flightDeckRequired": "Flight Deck Requis", + "flightDeckDescription": "Flight Deck est l'application compagnon privée/pro de Mission Control.", + "flightDeckNotInstalled": "Il semble que Flight Deck ne soit pas installé sur cet appareil. Installez-le pour ouvrir les sessions d'agents avec des contrôles et diagnostics plus riches.", + "maybeLater": "Plus tard", + "downloadFlightDeck": "Télécharger Flight Deck", + "moving": "en déplacement", + "neverSeen": "Jamais vu", + "justNow": "À l'instant", + "minutesAgo": "il y a {minutes}m", + "hoursAgo": "il y a {hours}h", + "daysAgo": "il y a {days}j" + }, + "githubSync": { + "title": "Synchronisation des Issues GitHub", + "subtitle": "Importez des Issues GitHub comme tâches Mission Control", + "loading": "Chargement de la synchronisation GitHub...", + "connectedAs": "GitHub : {user}", + "notConfigured": "GitHub : non configuré", + "tokenNotConfigured": "Token GitHub non configuré", + "tokenNotConfiguredDesc": "Configurez GITHUB_TOKEN dans les Intégrations pour activer la synchronisation des issues. Vous pouvez toujours consulter l'historique de synchronisation et les tâches liées.", + "importIssues": "Importer des Issues", + "labelRepository": "Dépôt", + "placeholderRepo": "propriétaire/dépôt", + "labelLabels": "Étiquettes (optionnel)", + "placeholderLabels": "bug,amélioration", + "labelState": "État", + "stateOpen": "Ouvert", + "stateClosed": "Fermé", + "stateAll": "Tous", + "labelAssignAgent": "Assigner à un Agent (optionnel)", + "unassigned": "Non assigné", + "buttonPreview": "Aperçu", + "buttonImport": "Importer", + "twoWaySync": "Synchronisation Bidirectionnelle", + "syncAll": "Tout Synchroniser", + "enableSync": "Activer", + "disableSync": "Désactiver", + "syncButton": "Synchroniser", + "noProjectsLinked": "Aucun projet lié à des dépôts GitHub. Configurez un dépôt GitHub dans la Gestion de Projets.", + "previewTitle": "Aperçu ({count} issues)", + "colNumber": "#", + "colTitle": "Titre", + "colLabels": "Étiquettes", + "colState": "État", + "colCreated": "Créé", + "syncHistory": "Historique de Synchronisation", + "colRepo": "Dépôt", + "colIssues": "Issues", + "colStatus": "Statut", + "colSyncedAt": "Synchronisé le", + "noSyncHistory": "Aucun historique de synchronisation. Importez des issues ci-dessus pour commencer.", + "linkedTasks": "Tâches Liées", + "linkedTasksWithCount": "Tâches Liées ({count})", + "colTask": "Tâche", + "colPriority": "Priorité", + "colGitHub": "GitHub", + "colSynced": "Synchronisé", + "noLinkedTasks": "Aucune tâche liée à des issues GitHub pour le moment.", + "syncResultImported": "Importés : {count}", + "syncResultSkipped": "Ignorés : {count}", + "syncResultErrors": "Erreurs : {count}", + "enterRepo": "Entrez un dépôt (propriétaire/dépôt)", + "noIssuesFound": "Aucune issue trouvée correspondant aux filtres", + "failedFetchIssues": "Échec de la récupération des issues", + "networkError": "Erreur réseau", + "syncFailed": "Échec de la synchronisation", + "failedToggleSync": "Échec du basculement de la synchronisation", + "importedFeedback": "{imported} {imported, plural, one {issue importée} other {issues importées}}, {skipped} ignorées" + }, + "agentCost": { + "title": "Répartition des Coûts par Agent", + "subtitle": "Analyse de l'utilisation des tokens et des dépenses par agent", + "loadingAgentCosts": "Chargement des coûts des agents", + "viewOverview": "Vue d'ensemble", + "viewPerAgentDB": "Par Agent (BD)", + "timeframeHour": "Heure", + "timeframeDay": "Jour", + "timeframeWeek": "Semaine", + "timeframeMonth": "Mois", + "noAgentCostData": "Aucune donnée de coût d'agent", + "noAgentCostSubtitle": "Les données de coût apparaîtront lorsque les agents commenceront à utiliser des tokens", + "refresh": "Actualiser", + "activeAgents": "Agents Actifs", + "totalCost": "Coût Total ({timeframe})", + "mostExpensive": "Plus Coûteux", + "mostEfficient": "Plus Efficace", + "taskAttributed": "Attribué aux Tâches", + "unattributed": "{cost} non attribué", + "costDistributionByAgent": "Distribution des Coûts par Agent", + "noCostData": "Aucune donnée de coût", + "costTrends": "Tendances des Coûts (Top 5 Agents)", + "noTrendData": "Aucune donnée de tendance", + "costComparison": "Comparaison des Coûts", + "costEfficiency": "Efficacité des Coûts ($/1K Tokens par Agent)", + "agentCostRanking": "Classement des Coûts par Agent", + "noTaskCosts": "Aucun coût attribué aux tâches pour cet agent", + "tasksTab": "Tâches ({count})", + "modelsTab": "Modèles ({count})", + "sessionCount": "{count, plural, one {# session} other {# sessions}}", + "requestCount": "{count, plural, one {# requête} other {# requêtes}}", + "tokens": "tokens", + "ofTotal": "{pct}% du total", + "reqs": "{count} requêtes", + "inputTokens": "Tokens d'Entrée", + "outputTokens": "Tokens de Sortie", + "ioRatio": "Ratio E/S", + "lastActive": "Dernière Activité", + "modelBreakdown": "Répartition par Modèle", + "inSuffix": "entrée", + "outSuffix": "sortie", + "noPerAgentData": "Aucune donnée par agent dans la base de données", + "noPerAgentDataSubtitle": "Les enregistrements d'utilisation des tokens apparaîtront lorsque les agents commenceront à envoyer des heartbeats", + "agentCountDB": "Agents (BD)", + "totalCostDays": "Coût Total ({days}j)", + "totalTokens": "Tokens Totaux", + "avgPer1kTokens": "Moyenne $/1K Tokens", + "perAgentCostDB": "Coût par Agent (BD)", + "agentTokenBreakdown": "Répartition des Tokens par Agent", + "chartCost": "Coût ($)" + }, + "tokenDashboard": { + "title": "Tableau de Bord Tokens & Coûts", + "subtitle": "Surveiller l'utilisation des tokens et les coûts sur les modèles et sessions", + "viewOverview": "Vue d'ensemble", + "viewSessions": "Sessions", + "timeframeHour": "Heure", + "timeframeDay": "Jour", + "timeframeWeek": "Semaine", + "timeframeMonth": "Mois", + "filtersLabel": "Filtres :", + "clearAll": "Tout effacer", + "timezoneLabel": "Fuseau horaire :", + "sortByLabel": "Trier par :", + "noSessionCostData": "Aucune donnée de coût de session", + "noSessionCostSubtitle": "Les détails par session apparaîtront lorsque l'utilisation sera enregistrée.", + "sessionActive": "Actif", + "sessionInactive": "Inactif", + "requests": "requêtes", + "inSuffix": "entrée", + "outSuffix": "sortie", + "avgPerRequest": "moy./requête", + "loadingUsageData": "Chargement des données d'utilisation", + "totalTokens": "Tokens Totaux ({timeframe})", + "totalCost": "Coût Total ({timeframe})", + "apiRequests": "Requêtes API", + "avgTokensPerRequest": "Tokens Moy./Requête", + "cacheReadTokens": "Tokens de Lecture en Cache", + "cacheWriteTokens": "Tokens d'Écriture en Cache", + "usageTrends": "Tendances d'Utilisation ({timeframe})", + "peakLabel": "Pic :", + "perTurnButton": "Par Tour", + "cumulativeButton": "Cumulatif", + "noTrendData": "Aucune donnée de tendance pour cette période", + "chartTokens": "Tokens", + "chartRequests": "Requêtes", + "tokenUsageByModel": "Utilisation des Tokens par Modèle", + "noModelUsageData": "Aucune donnée d'utilisation de modèle", + "costDistributionByModel": "Distribution des Coûts par Modèle", + "noCostData": "Aucune donnée de coût", + "costByProvider": "Coûts par Fournisseur", + "noProviderData": "Aucune donnée de fournisseur", + "exportData": "Exporter les Données", + "exportCsvFiltered": "Exporter CSV (Filtré)", + "exportCsvFull": "Exporter CSV (Complet)", + "exportJson": "Exporter JSON", + "exporting": "Exportation...", + "exportDescription": "Exportez les données d'utilisation des tokens pour analyse. \"Filtré\" exporte uniquement les données affichées ; \"Complet\" exporte tous les enregistrements du serveur.", + "performanceInsights": "Analyses de Performance", + "mostEfficientModel": "Modèle le Plus Efficace", + "mostUsedModel": "Modèle le Plus Utilisé", + "optimizationPotential": "Potentiel d'Optimisation", + "savingsPossible": "{pct}% d'économies possibles", + "modelEfficiencyComparison": "Comparaison d'Efficacité des Modèles", + "modelPerformance": "Performance des Modèles", + "topSessionsByCost": "Meilleures Sessions par Coût", + "requestsLabel": "Requêtes", + "avgCost": "Coût Moyen", + "avgTokens": "Tokens Moyens", + "noUsageData": "Aucune donnée d'utilisation", + "noUsageDataSubtitle": "L'utilisation des tokens apparaîtra ici lorsque les agents commenceront à s'exécuter", + "refresh": "Actualiser" + }, + "memoryBrowser": { + "hideSidebar": "Masquer la barre latérale", + "showSidebar": "Afficher la barre latérale", + "fileCountSize": "{count} fichiers / {size}", + "indexing": "indexation…", + "newFile": "+ nouveau", + "searchPlaceholder": "Rechercher des fichiers...", + "searchResults": "{count} résultats", + "noFiles": "aucun fichier", + "refresh": "actualiser", + "toggleBacklinks": "Basculer le panneau de rétroliens", + "links": "liens", + "edit": "modifier", + "delete": "supprimer", + "save": "enregistrer", + "saving": "enregistrement...", + "cancel": "annuler", + "selectFilePrompt": "sélectionner un fichier pour afficher", + "orSwitchView": "ou basculer vers la vue santé / pipeline", + "schemaWarnings": "Avertissements de schéma :", + "editPlaceholder": "Modifier le contenu du fichier...", + "loadingHermes": "Chargement de la mémoire Hermes", + "noHermesData": "Pas de données de mémoire Hermes", + "hermesMemoryTitle": "Mémoire Hermes", + "hermesMemoryDesc": "Vue en lecture seule des fichiers de mémoire persistante de l'agent Hermes", + "noAgentMemory": "Fichier de mémoire d'agent introuvable", + "noUserMemory": "Fichier de mémoire utilisateur introuvable", + "runningDiagnostics": "Exécution des diagnostics", + "noHealthData": "Pas de données de santé", + "runDiagnostics": "Exécuter les diagnostics", + "healthCategories": "8 catégories / {time}", + "pipelineTitle": "Pipeline de traitement", + "pipelineDesc": "Opérations de maintenance des connaissances inspirées des 6 R d'Ars Contexta", + "pipelineReflect": "Réfléchir", + "pipelineReflectDesc": "Trouver des opportunités de connexion entre les fichiers", + "pipelineReweave": "Rétisser", + "pipelineReweaveDesc": "Trouver les fichiers obsolètes nécessitant des mises à jour depuis des fichiers plus récents", + "pipelineGenerateMoc": "Générer MOC", + "pipelineGenerateMocDesc": "Générer automatiquement des Cartes de Contenu depuis des clusters de fichiers", + "processing": "Traitement", + "filesProcessed": "{count} fichiers traités", + "noSuggestions": "Aucune suggestion — la base de connaissances est bien connectée", + "mapsOfContent": "Cartes de Contenu ({count} groupes)", + "newFileTitle": "nouveau fichier", + "directory": "répertoire", + "fileName": "nom", + "fileType": "type", + "content": "contenu", + "contentOptional": "optionnel...", + "create": "Créer", + "deleteFileTitle": "supprimer le fichier", + "permanentlyDelete": "supprimer définitivement :", + "outgoing": "Sortants ({count})", + "backlinks": "Rétroliens ({count})", + "wikiLinks": "Wiki-liens ({count})" + }, + "userManagement": { + "adminAccessRequired": "Accès administrateur requis", + "failedToLoadUsers": "Échec du chargement des utilisateurs", + "failedToCreate": "Échec de la création de l'utilisateur", + "networkError": "Erreur réseau", + "userUpdated": "Utilisateur mis à jour", + "failedToUpdate": "Échec de la mise à jour", + "deletedUser": "Utilisateur \"{username}\" supprimé", + "failedToDelete": "Échec de la suppression", + "failedToAction": "Échec de la {action} de la demande", + "requestActioned": "Demande {action} pour {email}", + "user": "utilisateur", + "accessDenied": "Accès refusé", + "adminRequired": "La gestion des utilisateurs nécessite des privilèges d'administrateur.", + "loadingUsers": "Chargement des utilisateurs...", + "usersTitle": "Utilisateurs", + "usersSummary": "{count} utilisateurs enregistrés · {pending} approbations en attente", + "addLocalUser": "+ Ajouter un utilisateur local", + "cancel": "Annuler", + "pendingRequests": "{count, plural, one {# demande d'accès en attente} other {# demandes d'accès en attente}}", + "identity": "Identité", + "attempts": "Tentatives", + "lastAttempt": "Dernière tentative", + "action": "Action", + "roleViewer": "Lecteur", + "roleOperator": "Opérateur", + "roleAdmin": "Administrateur", + "noteOptional": "Note (optionnel)", + "confirm": "Confirmer", + "reject": "Rejeter", + "review": "Examiner", + "newLocalUser": "Nouvel utilisateur local", + "username": "Nom d'utilisateur", + "password": "Mot de passe", + "displayName": "Nom d'affichage", + "creating": "Création...", + "createUser": "Créer un utilisateur", + "colUser": "Utilisateur", + "colProvider": "Fournisseur", + "colRole": "Rôle", + "colLastLogin": "Dernière connexion", + "colActions": "Actions", + "newPasswordOptional": "Nouveau mot de passe (optionnel)", + "save": "Enregistrer", + "edit": "Modifier", + "delete": "Supprimer", + "never": "Jamais", + "createdUser": "Utilisateur \"{username}\" créé" + }, + "alertRules": { + "title": "Règles d'alerte", + "description": "Configurer des alertes automatiques pour les événements d'agents, de tâches et de système", + "evaluating": "Évaluation...", + "evaluateNow": "Évaluer maintenant", + "newRule": "+ Nouvelle règle", + "statTotalRules": "Total des règles", + "statActive": "Actives", + "statTotalTriggers": "Total des déclenchements", + "evalResultsTitle": "Résultats d'évaluation", + "dismiss": "Fermer", + "triggered": "DÉCLENCHÉ", + "noRulesToEvaluate": "Aucune règle à évaluer", + "loadingRules": "Chargement des règles...", + "noRulesConfigured": "Aucune règle d'alerte configurée", + "createRuleHint": "Créer une règle pour être notifié des événements système", + "never": "Jamais", + "cooldown": "Délai : {minutes}m", + "triggerCount": "Déclenché : {count}x", + "lastTriggered": "Dernier : {time}", + "deleteRule": "Supprimer la règle", + "newRuleTitle": "Nouvelle règle d'alerte", + "ruleName": "Nom de la règle", + "ruleNamePlaceholder": "ex. : Alerte agent hors ligne", + "ruleDescription": "Description", + "optionalDescription": "Description optionnelle", + "entity": "Entité", + "entityAgent": "Agent", + "entityTask": "Tâche", + "entitySession": "Session", + "entityActivity": "Activité", + "field": "Champ", + "operator": "Opérateur", + "value": "Valeur", + "valuePlaceholder": "ex. : error", + "cooldownMinutes": "Délai (minutes)", + "notifyRecipient": "Notifier (destinataire)", + "cancel": "Annuler", + "creating": "Création...", + "createRule": "Créer la règle", + "failedToCreate": "Échec de la création de la règle", + "networkError": "Erreur réseau" + }, + "agentSquad": { + "failedToFetch": "Échec de la récupération des agents", + "errorOccurred": "Une erreur s'est produite", + "failedToUpdateStatus": "Échec de la mise à jour du statut de l'agent", + "loadingAgents": "Chargement des agents", + "title": "Équipe d'agents", + "live": "En direct", + "manual": "Manuel", + "addAgent": "+ Ajouter un agent", + "refresh": "Actualiser", + "noAgents": "Aucun agent trouvé", + "addFirstAgent": "Ajoutez votre premier agent pour commencer", + "session": "Session", + "totalTasks": "Tâches totales", + "inProgress": "En cours", + "lastSeen": "Dernière vue", + "activity": "Activité", + "wake": "Réveiller", + "busy": "Occupé", + "sleep": "Veille", + "statusControl": "Contrôle du statut", + "role": "Rôle", + "sessionKey": "Clé de session", + "notSet": "Non défini", + "soulContent": "Contenu SOUL", + "soulPlaceholder": "Personnalité et instructions de l'agent...", + "taskStatistics": "Statistiques des tâches", + "total": "Total", + "assigned": "Assignées", + "done": "Terminées", + "created": "Créé", + "lastUpdated": "Dernière mise à jour", + "saveChanges": "Enregistrer les modifications", + "cancel": "Annuler", + "editAgent": "Modifier l'agent", + "createNewAgent": "Créer un nouvel agent", + "name": "Nom", + "rolePlaceholder": "ex. : chercheur, développeur, analyste", + "sessionKeyOptional": "Clé de session (optionnel)", + "sessionKeyPlaceholder": "Identifiant de session ClawdBot", + "soulContentOptional": "Contenu SOUL (optionnel)", + "createAgent": "Créer l'agent", + "failedToUpdate": "Échec de la mise à jour de l'agent", + "failedToCreate": "Échec de la création de l'agent", + "never": "Jamais", + "justNow": "À l'instant", + "minutesAgo": "il y a {count}m", + "hoursAgo": "il y a {count}h", + "daysAgo": "il y a {count}j" + }, + "multiGateway": { + "title": "Gestionnaire de passerelles", + "description": "Gérer plusieurs connexions de passerelles OpenClaw", + "probeAll": "Sonder tout", + "addGateway": "+ Ajouter une passerelle", + "connected": "Connecté", + "disconnected": "Déconnecté", + "noActiveConnection": "Aucune connexion active", + "loadingGateways": "Chargement des passerelles...", + "noGateways": "Aucune passerelle configurée", + "addGatewayHint": "Ajouter une passerelle pour commencer à gérer les connexions", + "discoveredGateways": "Passerelles découvertes", + "discoveredGatewaysDesc": "Passerelles OpenClaw trouvées sur cette machine", + "refresh": "Actualiser", + "running": "EN COURS", + "stopped": "ARRÊTÉ", + "bind": "Liaison", + "mode": "Mode", + "register": "Enregistrer", + "directCliConnections": "Connexions CLI directes", + "directCliDesc": "Outils CLI connectés directement sans passerelle", + "noDirectConnections": "Aucune connexion CLI directe", + "useApiConnect": "Utiliser", + "toRegisterCli": "pour enregistrer un outil CLI", + "role": "Rôle", + "heartbeat": "Battement", + "never": "Jamais", + "disconnect": "Déconnecter", + "neverProbed": "Jamais sondé", + "primary": "PRINCIPAL", + "connectedBadge": "CONNECTÉ", + "token": "Jeton", + "tokenSet": "Défini", + "tokenNone": "Aucun", + "latency": "Latence", + "last": "Dernier", + "gatewayVersion": "Version de la passerelle", + "noHistory": "Pas encore d'historique", + "colorKey": "Légende des couleurs", + "colorKeyTitle": "Vert = en ligne ; ambre = erreur ; rouge = hors ligne", + "lastLatency": "Dernière latence : {ms}ms", + "probeGateway": "Sonder la passerelle", + "probing": "Sondage...", + "probe": "Sonder", + "connectToGateway": "Se connecter à cette passerelle", + "connect": "Connecter", + "setPrimaryTitle": "Définir comme principal", + "setPrimary": "Définir comme principal", + "removeGateway": "Supprimer la passerelle", + "addGatewayTitle": "Ajouter une passerelle", + "name": "Nom", + "namePlaceholder": "ex. : primary", + "host": "Hôte", + "port": "Port", + "tokenField": "Jeton", + "optional": "Optionnel", + "cancel": "Annuler", + "adding": "Ajout...", + "addGatewaySubmit": "Ajouter la passerelle", + "failedToAdd": "Échec de l'ajout de la passerelle", + "networkError": "Erreur réseau" + }, + "nodes": { + "title": "Nœuds / Instances", + "gatewayConnected": "Passerelle connectée", + "gatewayUnreachable": "Passerelle inaccessible", + "tabInstances": "Instances ({count})", + "tabDevices": "Appareils ({count})", + "loading": "Chargement...", + "noInstances": "Aucune instance active. Les nœuds apparaissent ici lorsqu'ils se connectent à la passerelle.", + "colName": "Nom", + "colClientId": "ID client", + "colPlatform": "Plateforme", + "colVersion": "Version", + "colRoles": "Rôles", + "colStatus": "Statut", + "colConnected": "Connecté", + "colLastActivity": "Dernière activité", + "colHostIp": "Hôte / IP", + "colDeviceId": "ID appareil", + "colPaired": "Appairé", + "colLastSeen": "Vu pour la dernière fois", + "colTrust": "Confiance", + "colActions": "Actions", + "pendingPairingRequests": "Demandes d'appairage en attente ({count})", + "approve": "Approuver", + "approving": "Approbation...", + "reject": "Rejeter", + "rejecting": "Rejet...", + "noPairedDevices": "Aucun appareil appairé.", + "pairedDevices": "Appareils appairés ({count})", + "trusted": "approuvé", + "untrusted": "non approuvé", + "rotateToken": "Renouveler le jeton", + "revokeConfirm": "Révoquer ?", + "yes": "Oui", + "no": "Non", + "revoke": "Révoquer", + "hideTokens": "Masquer les jetons", + "tokens": "Jetons ({count})", + "tokenUsed": "utilisé {time}", + "revoked": "révoqué", + "rotate": "Renouveler" + }, + "activityFeed": { + "title": "Activité", + "live": "En direct", + "paused": "Pausé", + "refresh": "Actualiser", + "filterAgent": "Agent", + "filterAll": "Tous", + "filterType": "Type", + "allTypes": "Tous les types", + "filterLimit": "Limite", + "loadingActivities": "Chargement des activités", + "noActivities": "Aucune activité trouvée", + "noActivityForAgent": "Aucune activité enregistrée pour {agent}", + "tryAdjustingFilters": "Essayez d'ajuster vos filtres", + "entityTask": "Tâche :", + "entityCommentOn": "Commentaire sur :", + "entityAgent": "Agent :", + "showDetails": "Afficher les détails", + "activeSessions": "Sessions actives", + "agentStatus": "Statut", + "lastSeen": "Vu pour la dernière fois", + "lastAction": "Dernière action", + "tasksAssigned": "Tâches assignées", + "inProgress": "En cours", + "completed": "Terminé", + "events": "{count} événements", + "newer": "Plus récent", + "older": "Plus ancien", + "pageOf": "Page {page} sur {total}", + "footerAgentEvents": "{total} événements pour {agent}", + "footerShowing": "Affichage de {count} activités{filtered}", + "filtered": " (filtré)", + "lastUpdated": "Dernière mise à jour : {time}" + }, + "standup": { + "title": "Standup quotidien", + "viewCurrent": "Actuel", + "viewHistory": "Historique", + "generating": "Génération...", + "generate": "Générer", + "export": "Exporter", + "standupFor": "Standup du {date}", + "generatedOn": "Généré le {date}", + "statCompleted": "Terminé", + "statInProgress": "En cours", + "statBlocked": "Bloqué", + "statOverdue": "En retard", + "teamAccomplishments": "Réalisations de l'équipe", + "teamBlockers": "Blocages de l'équipe", + "overdueTasks": "Tâches en retard", + "unassigned": "Non assigné", + "individualReports": "Rapports individuels", + "activitySummary": "Activité : {actions} actions, {comments} commentaires", + "sectionCompleted": "Terminé ({count})", + "sectionInProgress": "En cours ({count})", + "sectionAssigned": "Assigné ({count})", + "sectionBlocked": "Bloqué ({count})", + "none": "Aucun", + "noStandupGenerated": "Aucun standup généré", + "selectDatePrompt": "Sélectionnez une date et générez un rapport", + "generateToday": "Générer le standup d'aujourd'hui", + "noHistory": "Aucun historique de standup trouvé", + "historyGenerated": "Généré : {date}", + "historyAgentsParticipated": "{count} agents ont participé", + "historyCompleted": "Terminé : {count}", + "historyInProgress": "En cours : {count}", + "historyBlocked": "Bloqué : {count}" + }, + "webhooks": { + "title": "Webhooks", + "configured": "{count, plural, one {# webhook configuré} other {# webhooks configurés}}", + "addWebhook": "+ Ajouter un webhook", + "secretLabel": "Secret du webhook (enregistrez-le maintenant - affiché une seule fois)", + "dismiss": "Ignorer", + "testSuccessful": "Test réussi", + "testFailed": "Test échoué", + "testStatus": "Statut :", + "testDuration": "Durée :", + "testError": "Erreur :", + "localAutomations": "Automatisations webhook locales", + "localAutomationsDesc": "Tâches du planificateur local prenant en charge la livraison et les tentatives webhook", + "nextRun": "Prochaine exécution {time}", + "noNextRun": "Aucune prochaine exécution planifiée", + "running": "En cours...", + "run": "Exécuter", + "noWebhooks": "Aucun webhook configuré", + "noWebhooksDesc": "Ajoutez un webhook pour recevoir des notifications HTTP pour les événements", + "allEvents": "Tous les événements", + "eventCount": "{count, plural, one {# événement} other {# événements}}", + "deliveries": "{count} livraisons", + "failed": "{count} échoués", + "lastFired": "Dernier déclenchement {time}", + "sendTestEvent": "Envoyer un événement de test", + "testing": "Test en cours...", + "test": "Tester", + "disable": "Désactiver", + "enable": "Activer", + "delete": "Supprimer", + "recentDeliveries": "Livraisons récentes", + "noDeliveries": "Aucune livraison enregistrée", + "newWebhook": "Nouveau webhook", + "formName": "Nom", + "formUrl": "URL", + "formEvents": "Événements", + "cancel": "Annuler", + "createWebhook": "Créer le webhook" + }, + "skills": { + "title": "Hub de compétences", + "subtitle": "Gérez les compétences localement et parcourez les registres externes.", + "localMode": "Mode local", + "gatewayMode": "Mode passerelle", + "tabInstalled": "Installé", + "tabRegistry": "Registre", + "searchPlaceholder": "Recherche rapide des compétences installées...", + "searchResults": "Affichage de {count} sur {total} compétences correspondant à \"{query}\"", + "diskSyncActive": "Synchronisation disque bidirectionnelle active (planificateur toutes les 60s)", + "scanAll": "Tout analyser", + "scanningProgress": "Analyse {done}/{total}...", + "refreshNow": "Actualiser maintenant", + "scanning": "Analyse :", + "skillsScanned": "{count} compétences analysées", + "dismiss": "ignorer", + "addSkill": "Ajouter une compétence", + "initialContent": "Contenu initial du SKILL.md", + "loadingSkills": "Chargement des compétences...", + "skillCount": "{count} sur {total} compétences", + "noMatch": "Aucune compétence ne correspond à ce filtre.", + "scan": "Analyser", + "view": "Voir", + "registrySearchPlaceholder": "Rechercher des compétences...", + "searching": "Recherche...", + "search": "Rechercher", + "installTo": "Installer dans :", + "installing": "Installation...", + "install": "Installer", + "noRegistryResults": "Aucun résultat pour \"{query}\" sur {registry}. Essayez une autre requête ou changez de registre.", + "registryPrompt": "Recherchez sur ClawdHub, skills.sh ou Awesome OpenClaw pour découvrir et installer des compétences d'agents.", + "skillInstalled": "Compétence installée", + "installFailed": "Échec de l'installation", + "installingSkill": "Installation de la compétence", + "stepFetching": "Récupération du SKILL.md depuis le registre", + "stepScanning": "Exécution de l'analyse de sécurité", + "stepWriting": "Écriture sur le disque et enregistrement", + "security": "Sécurité", + "viewInstalled": "Voir les installés", + "done": "Terminé", + "close": "Fermer", + "delete": "Supprimer", + "save": "Enregistrer", + "loadingSkillContent": "Chargement du SKILL.md...", + "noContent": "Aucun contenu." + }, + "orchestration": { + "tabCommand": "Commande", + "tabWorkflows": "Flux de travail", + "tabPipelines": "Pipelines", + "tabFleet": "Flotte", + "selectAgent": "Sélectionner un agent...", + "commandPlaceholder": "Envoyer une commande ou un message à l'agent...", + "send": "Envoyer", + "noTemplates": "Aucun modèle de flux de travail", + "createFirstTemplate": "Créer votre premier modèle", + "cancel": "Annuler", + "new": "+ Nouveau", + "editTemplate": "Modifier le modèle", + "newTemplate": "Nouveau modèle", + "templateName": "Nom du modèle", + "templateDescription": "Description (optionnel)", + "taskPromptPlaceholder": "Invite de tâche pour l'agent...", + "timeout": "Délai d'expiration", + "role": "Rôle", + "lastRun": "Dernière exécution", + "update": "Mettre à jour", + "save": "Enregistrer", + "totalAgents": "Total des agents", + "online": "En ligne", + "busy": "Occupé", + "errors": "Erreurs" + } +} diff --git a/messages/ja.json b/messages/ja.json new file mode 100644 index 0000000000000000000000000000000000000000..20426f802614c3dd6014fbbaabefa46d0d43a3a2 --- /dev/null +++ b/messages/ja.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "保存", + "cancel": "キャンセル", + "loading": "読み込み中...", + "error": "エラー", + "search": "検索", + "confirm": "確認", + "delete": "削除", + "edit": "編集", + "close": "閉じる", + "back": "戻る", + "next": "次へ", + "retry": "再試行", + "or": "または", + "optional": "任意", + "language": "言語", + "dismiss": "閉じる", + "continue": "続行", + "selected": "選択済み", + "detected": "検出済み", + "now": "今", + "tryAgain": "再試行", + "skipToMainContent": "メインコンテンツへスキップ", + "builtWithCareBy": "丁寧に構築", + "viewRelease": "リリースを見る", + "updateNow": "今すぐ更新", + "showDetails": "詳細を表示", + "hideDetails": "詳細を非表示", + "moreIssues": "+ {count} 件の問題" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "続行するにはサインインしてください", + "username": "ユーザー名", + "password": "パスワード", + "signIn": "サインイン", + "signingIn": "サインイン中...", + "signInWithGoogle": "Google でサインイン", + "loadingGoogleSignIn": "Google サインインを読み込み中...", + "googleSignInFailed": "Google サインインに失敗しました", + "networkError": "ネットワークエラー", + "loginFailed": "ログインに失敗しました", + "enterUsername": "ユーザー名を入力", + "enterPassword": "パスワードを入力", + "orchestrationTagline": "OpenClaw エージェントオーケストレーション", + "accessRequestSubmitted": "アクセスリクエストが送信されました", + "accessRequestDescription": "リクエストは管理者に送信されました。承認後にサインインできるようになります。", + "tryAgain": "再試行", + "noAdminAccount": "管理者アカウントがまだ作成されていません", + "noAdminDescription": "Mission Control を使い始めるために管理者アカウントを設定してください。", + "createAdminAccount": "管理者アカウントを作成", + "welcomeToMC": "Mission Control へようこそ", + "settingUpMC": "Mission Control をセットアップ中", + "createAdminToStart": "管理者アカウントを作成して始めましょう", + "creatingAdmin": "管理者アカウントを作成中...", + "displayName": "表示名", + "confirmPassword": "パスワードの確認", + "atLeast12Chars": "12文字以上", + "repeatPassword": "パスワードを再入力", + "passwordsDoNotMatch": "パスワードが一致しません", + "passwordTooShort": "パスワードは12文字以上必要です", + "moreCharsNeeded": "あと {count} 文字必要です", + "firstTimeSetupOnly": "このページは初回セットアップ時のみ利用可能です。", + "checkingSetupStatus": "セットアップ状態を確認中...", + "setupFailed": "セットアップに失敗しました", + "failedToCheckSetup": "セットアップ状態の確認に失敗しました", + "validatingCredentials": "資格情報を検証中", + "creatingAdminAccount": "管理者アカウントを作成中", + "configuringSession": "セッションを構成中", + "launchingDashboard": "ダッシュボードを起動中", + "usernameHint": "小文字の英字、数字、ドット、ハイフン、アンダースコアのみ" + }, + "nav": { + "overview": "概要", + "agents": "エージェント", + "tasks": "タスク", + "chat": "チャット", + "channels": "チャンネル", + "skills": "スキル", + "memory": "メモリ", + "activity": "アクティビティ", + "logs": "ログ", + "costTracker": "コストトラッカー", + "nodes": "ノード", + "approvals": "承認", + "office": "オフィス", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "アラート", + "github": "GitHub", + "security": "セキュリティ", + "users": "ユーザー", + "audit": "監査", + "gateway": "ゲートウェイ", + "gateways": "ゲートウェイ", + "config": "設定", + "integrations": "インテグレーション", + "debug": "デバッグ", + "settings": "設定", + "group": { + "observe": "監視", + "automate": "自動化", + "admin": "管理" + }, + "collapseSidebar": "サイドバーを折りたたむ", + "expandSidebar": "サイドバーを展開", + "more": "その他" + }, + "settings": { + "language": "言語", + "languageDescription": "表示言語を選択してください", + "general": "一般", + "security": "セキュリティ", + "dataRetention": "データ保持", + "chatSettings": "チャット", + "gatewaySettings": "ゲートウェイ", + "title": "設定", + "description": "Mission Control の動作とデータ保持ポリシーを設定する", + "discard": "破棄", + "save": "保存", + "saving": "保存中...", + "saveChanges": "変更を保存", + "workspaceManagementLabel": "ワークスペース管理:", + "workspaceManagementDesc1": "ワークスペース(テナントインスタンス)を作成・管理するには、", + "superAdmin": "スーパー管理者", + "workspaceManagementDesc2": "パネル(サイドバーの管理者 > スーパー管理者)に移動してください。そこで新しいクライアントインスタンスの作成、テナントの管理、プロビジョニングジョブの監視ができます。", + "securityDescription": "ステーションのセキュリティ体制をスキャンする", + "securityScan": "セキュリティスキャン", + "hideScan": "スキャンを非表示", + "backups": "バックアップ", + "backupsDescription": "MCデータベースまたはゲートウェイ状態のオンデマンドバックアップを作成する", + "backupMcDatabase": "MCデータベースをバックアップ", + "backupGatewayState": "ゲートウェイ状態をバックアップ", + "backingUp": "バックアップ中...", + "onboarding": "オンボーディング", + "onboardingDescription": "セットアップウィザードを再生してダッシュボードチェックリストをリセットする", + "replayOnboarding": "オンボーディングを再生", + "resetting": "リセット中..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "エージェントオーケストレーション", + "authenticatingOperator": "オペレーターを認証中", + "detectingStationMode": "ステーションモードを検出中", + "loadingControlConfig": "制御設定を読み込み中", + "connectingRuntimeLinks": "ランタイムリンクを接続中", + "syncingAgentRegistry": "エージェントレジストリを同期中", + "loadingActiveSessions": "アクティブセッションを読み込み中", + "hydratingWorkspaceBoard": "ワークスペースボードを初期化中", + "mappingMemoryGraph": "メモリグラフをマッピング中", + "indexingSkillCatalog": "スキルカタログをインデックス中" + }, + "header": { + "workspace": "ワークスペース", + "sessions": "セッション", + "events": "イベント", + "live": "ライブ", + "off": "オフ", + "local": "ローカル", + "connected": "接続済み", + "disconnected": "切断済み", + "reconnecting": "再接続中", + "offline": "オフライン", + "retry": "リトライ {count}", + "jumpToSearch": "ページ、タスク、エージェントに移動...", + "searchPlaceholder": "タスク、エージェント、アクティビティを検索、またはページコマンドを入力...", + "searching": "検索中...", + "noResults": "結果が見つかりません", + "typeToSearch": "入力してエンティティを検索、またはページに即座にジャンプ", + "gatewayConnection": "ゲートウェイ接続", + "status": "ステータス", + "host": "ホスト", + "latency": "レイテンシ", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "リトライ回数", + "clickToReconnect": "クリックして再接続", + "down": "ダウン", + "goToOverview": "概要へ移動", + "goToChat": "チャットへ移動", + "goToTasks": "タスクへ移動", + "goToAgents": "エージェントへ移動", + "goToActivityFeed": "アクティビティフィードへ移動", + "goToNotifications": "通知へ移動", + "goToTokenUsage": "トークン使用量へ移動", + "goToLogs": "ログへ移動", + "goToMemoryBrowser": "メモリブラウザへ移動", + "goToIntegrations": "インテグレーションへ移動", + "goToSettings": "設定へ移動", + "goToGateways": "ゲートウェイへ移動", + "goToGithubSync": "GitHub 同期へ移動", + "goToOffice": "オフィスへ移動", + "goToSkills": "スキルへ移動", + "quickNavigation": "クイックナビゲーション" + }, + "contextSwitcher": { + "localMode": "ローカルモード", + "connected": "接続済み", + "disconnected": "切断済み", + "interface": "インターフェース", + "essential": "エッセンシャル", + "full": "フル", + "organizations": "組織", + "all": "すべて", + "noTools": "ツールなし", + "unlinked": "未リンク", + "newOrganization": "新しい組織...", + "usernamePlaceholder": "ユーザー名(OSユーザー)", + "displayNamePlaceholder": "表示名", + "gatewayPortPlaceholder": "ゲートウェイポート(必須)", + "installTools": "ツールをインストール", + "usernameAndDisplayRequired": "ユーザー名と表示名は必須です", + "invalidUsernameFormat": "ユーザー名の形式が無効です", + "gatewayPortRequired": "ゲートウェイポートは必須です", + "creating": "作成中...", + "createUser": "ユーザーを作成", + "createAndQueue": "作成してキューに追加" + }, + "localModeBanner": { + "noGatewayDetected": "OpenClaw ゲートウェイが検出されません", + "runningInLocalMode": " — ローカルモードで動作中。Claude Code セッション、タスク、ローカルデータを監視しています。", + "configureGateway": "ゲートウェイを設定" + }, + "updateBanner": { + "updating": "更新中...", + "restartingServer": "サーバーを再起動中...", + "updateAvailable": "アップデートあり:v{version}", + "newerVersionAvailable": " — Mission Control の新しいバージョンが利用可能です。", + "updateFailed": "更新に失敗しました", + "networkError": "ネットワークエラー — サーバーに接続できません。" + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "OpenClaw を更新中...", + "openclawUpdated": "OpenClaw が v{version} に更新されました", + "openclawUpdateAvailable": "OpenClaw アップデート:v{version} が利用可能", + "installed": "インストール済み:v{version}", + "changelog": "変更履歴", + "copied": "コピーしました!", + "copyCommand": "コマンドをコピー", + "updateFailed": "更新に失敗しました", + "networkError": "ネットワークエラー — サーバーに接続できません。" + }, + "doctorBanner": { + "fixCompleted": "OpenClaw ドクター修復完了", + "configDrift": "OpenClaw 設定のドリフトを検出", + "stateIntegrity": "OpenClaw 状態整合性の警告", + "securityWarning": "OpenClaw セキュリティ警告", + "doctorWarnings": "OpenClaw ドクター警告", + "runningFixes": "OpenClaw ドクター修復を実行中...", + "cleaningSessionStores": "セッションストアをクリーニング中...", + "archivingOrphanTranscripts": "孤立したトランスクリプトをアーカイブ中...", + "recheckingHealth": "現在のインスタンスの健全性を再確認中...", + "fixFailed": "OpenClaw ドクター修復に失敗しました", + "networkError": "ネットワークエラー — サーバーに接続できません。", + "runningFix": "修復を実行中...", + "runDoctorFix": "ドクター修復を実行" + }, + "liveFeed": { + "liveFeed": "ライブフィード", + "showLiveFeed": "ライブフィードを表示", + "collapseFeed": "フィードを折りたたむ", + "closeFeed": "フィードを閉じる", + "noActivityYet": "まだアクティビティはありません", + "eventsAppearLocal": "タスクを作成したりエージェントが更新されると、イベントが表示されます", + "eventsStreamGateway": "ゲートウェイとローカルDBからイベントがストリーミングされます", + "activeSessions": "アクティブセッション", + "noActiveSessions": "アクティブセッションなし", + "activeSession": "アクティブ", + "idleSession": "アイドル" + }, + "errorBoundary": { + "somethingWentWrong": "問題が発生しました", + "unexpectedError": "このパネルで予期しないエラーが発生しました。" + }, + "page": { + "showLiveFeed": "ライブフィードを表示", + "availableInFullMode": "{panel}はフルモードで利用可能です。", + "switchToFull": "フルに切り替え", + "goToOverview": "概要へ移動", + "requiresGateway": "{panel}には OpenClaw ゲートウェイ接続が必要です。", + "configureGateway": "このパネルを有効にするにはゲートウェイを設定してください。" + }, + "onboarding": { + "stationOnline": "ステーションオンライン", + "stationReady": "ステーションはエージェントを受け入れる準備ができています。", + "welcome": { + "title": "Mission Control へようこそ", + "description": "AIエージェントのためのステーション。エージェントがここにドッキングすると、永続メモリ、タスク管理、協調ワークフロー、完全な可観測性を獲得します。セットアップをスキャンしました — オンライン状況はこちらです。", + "availableModes": "利用可能なモード", + "localMode": "ローカルモード", + "gatewayMode": "ゲートウェイモード", + "monitorClaude": "このマシン上の Claude Code セッションを監視", + "taskTracking": "タスク追跡とコスト監視", + "sessionHistory": "セッション履歴", + "singlePilot": "シングルパイロット運用", + "orchestrateAgents": "マシン間で複数のエージェントをオーケストレーション", + "memorySkills": "メモリ、スキル、エージェント間通信", + "webhookIntegrations": "Webhook インテグレーション", + "requiresGateway": "ゲートウェイが必要", + "activeSessionsDetected": "{count} 個のアクティブセッションを検出", + "noActiveSessions": "アクティブな Claude セッションなし", + "gatewayConnected": "ゲートウェイ接続済み", + "localModeNoGateway": "ローカルモード — ゲートウェイなし", + "agentsRegistered": "{count} 個のエージェントが登録済み", + "noAgentsYet": "エージェントはまだいません", + "gatewayRegistered": "ゲートウェイ:Mission Control 登録済み", + "gatewayRegistrationPending": "ゲートウェイ登録保留中", + "skipSetup": "セットアップをスキップ", + "getStarted": "始めましょう" + }, + "interfaceMode": { + "title": "ステーションレイアウトを選択", + "description": "エッセンシャルはオペレーターが最も使うコアパネルを表示します。フルはステーション上のすべてのシステムを解放します — メモリ、自動化、セキュリティ監査など。いつでも切り替えできます。", + "essential": "エッセンシャル", + "full": "フル", + "essentialDescription": "効率的な運用 — 日常的に使うパネル:フリート概要、エージェント、タスク、チャット、アクティビティフィード、ログ、設定。", + "essentialPanels1": "フリート概要、エージェント、タスク、チャット", + "essentialPanels2": "アクティビティフィード、ログ、設定", + "essentialTotal": "合計 7 パネル", + "fullDescription": "フルステーションアクセス — メモリブラウザ、Cron スケジューリング、Webhooks、アラート、セキュリティ監査、コスト追跡、ゲートウェイ設定を追加。", + "fullIncludes": "エッセンシャルのすべてに加えて", + "fullPanels": "メモリ、Cron、Webhooks、監査", + "fullTotal": "すべてのステーションシステムを解放" + }, + "gatewayLink": { + "title": "ゲートウェイリンク", + "description": "Mission Control はそのオリジンを OpenClaw ゲートウェイに登録し、WebSocket 経由で接続してエージェントをリモート管理できるようにします。", + "originRegistered": "ゲートウェイオリジン登録済み", + "originAdded": "Mission Control オリジンがゲートウェイの allowedOrigins に追加されました", + "registrationPending": "登録保留中 — 次の能力チェック時に設定されます", + "deviceAuthConfigured": "デバイス認証が設定済み", + "deviceAuthDisabled": "デバイス認証は無効 — MC はゲートウェイトークンで認証します", + "deviceAuthWillConfigure": "オリジン登録と同時に設定されます", + "testing": "テスト中...", + "testConnection": "接続テスト", + "gatewayReachable": "ゲートウェイに到達可能", + "gatewayUnreachable": "ゲートウェイに到達不可" + }, + "credentials": { + "title": "ステーションを保護", + "description": "管理者パスワードはステーションコンソールを保護します。API キーはドッキング資格情報です — エージェントが登録時に提示し、認可されたエージェントのみがドッキングできます。", + "checkingCredentials": "資格情報を確認中...", + "adminPassword": "管理者パスワード", + "passwordStrong": "パスワードは強力で、デフォルトではありません", + "passwordWeak": "デフォルトまたは弱いパスワードを使用中 — .env で AUTH_PASS を変更してください", + "apiKey": "API キー", + "apiKeyConfigured": "設定済み — エージェントはこのキーでドッキングできます", + "apiKeyNotSet": "未設定 — キーが設定されていないとエージェントはドッキングできません。実行:bash scripts/generate-env.sh --force", + "openSettings": "設定を開く", + "securityScan": "セキュリティスキャン", + "securityScanDescription": "ステーション起動前にネットワーク、ランタイム、OpenClaw の堅牢化を検証します。", + "launchStation": "ステーションを起動", + "launchAnyway": "このまま起動" + } + }, + "channels": { + "title": "チャンネル", + "loadingChannels": "チャンネルを読み込み中...", + "gatewayConnected": "ゲートウェイ接続済み", + "gatewayDisconnected": "ゲートウェイ切断", + "refresh": "更新", + "noChannelsConfigured": "チャンネルが未設定です。OpenClawゲートウェイ設定でメッセージングプラットフォーム(WhatsApp、Telegram、Discord、Slackなど)を設定してください。", + "gatewayUnreachable": "OpenClawゲートウェイに到達できません。稼動しているか確認してください。", + "statusConnected": "接続済み", + "statusRunning": "実行中", + "statusConfigured": "設定済み", + "statusInactive": "非アクティブ", + "probe": "プローブ", + "probing": "プローブ中...", + "showQr": "QRコード表示", + "relink": "再リンク", + "waitForScan": "スキャン待機", + "logout": "ログアウト", + "loggedOut": "ログアウトしました。", + "profile": "プロフィール", + "editProfile": "プロフィール編集", + "edit": "編集", + "noProfileSet": "プロフィール未設定", + "displayName": "表示名", + "username": "ユーザー名", + "about": "自己紹介", + "bio": "プロフィール文", + "avatarUrl": "アバター URL", + "bannerUrl": "バナー URL", + "website": "ウェブサイト", + "lightning": "ライトニング", + "saving": "保存中...", + "saveAndPublish": "保存して公開", + "importFromRelays": "リレーからインポート", + "hideAdvanced": "詳細を非表示", + "showAdvanced": "詳細を表示", + "cancel": "キャンセル", + "profilePublished": "プロフィールをリレーに公開しました。", + "saveFailed": "保存に失敗しました。", + "profileImported": "リレーからプロフィールをインポートしました。", + "importFailed": "インポートに失敗しました。", + "accounts": "アカウント({count})" + }, + "integrations": { + "title": "インテグレーション", + "loading": "インテグレーションを読み込み中...", + "connectedCount": "{total}件中{connected}件接続済み", + "pullAll": "すべて取得", + "discard": "破棄", + "save": "保存", + "saving": "保存中...", + "saveChanges": "変更を保存", + "cancel": "キャンセル", + "remove": "削除", + "removeTitle": "インテグレーションを削除しますか?", + "removeDescription": ".envファイルから{target}を削除します。変更を有効にするにはゲートウェイを再起動する必要があります。", + "notSet": "未設定", + "noIntegrationsInCategory": "このカテゴリにインテグレーションはありません" + }, + "execApproval": { + "title": "実行承認", + "pendingBadge": "{count}件保留中", + "realtimeLabel": "WebSocket経由でリアルタイム更新", + "viewApprovals": "承認", + "viewAllowlist": "許可リスト設定", + "filterAll": "すべて", + "filterPending": "保留中", + "filterResolved": "解決済み", + "noPendingApprovals": "保留中の承認はありません。エージェントからの実行リクエストはここにオーバーレイで表示されます。", + "noApprovals": "表示する承認はありません。", + "loadingAllowlist": "許可リストを読み込み中...", + "addAgent": "エージェントを追加", + "save": "保存", + "saving": "保存中...", + "reload": "再読み込み", + "noAgentsConfigured": "エージェントが設定されていません。上部にエージェントIDを入力して許可リストを作成してください。", + "addPattern": "パターンを追加", + "noAllowlistPatterns": "許可リストのパターンがありません。コマンドは手動承認が必要です。", + "previewMatches": "プレビュー:最近のコマンド{count}件が一致します", + "andMore": "...他{count}件", + "allowOnce": "1回許可", + "alwaysAllow": "常に許可", + "deny": "拒否", + "statusExpired": "期限切れ", + "statusApproved": "承認済み", + "statusDenied": "拒否済み" + }, + "notifications": { + "title": "通知", + "markAllRead": "すべて既読にする", + "recipientLabel": "受信者", + "recipientPlaceholder": "エージェント名(例:my-agent)", + "noNotifications": "通知なし", + "markRead": "既読にする" + }, + "localAgentsDoc": { + "title": "ローカル AGENTS.md", + "noPathFound": "ローカルの AGENTS.md がまだ見つかりません", + "openInVsCode": "VS Code で開く", + "copied": "コピーしました", + "copyPath": "パスをコピー", + "collapse": "折りたたむ", + "expand": "展開する", + "loading": "ローカル AGENTS.md を読み込み中...", + "notDetected": "ローカルの AGENTS.md が検出されませんでした。", + "checked": "確認済み:{paths}" + }, + "memoryGraph": { + "loading": "グラフを読み込み中...", + "retry": "再試行", + "noMemoryDatabases": "メモリデータベースが見つかりません", + "noMemoryDatabasesHint": "OpenClaw メモリ SQLite ファイルが検出されませんでした", + "allAgents": "すべてのエージェント", + "filterFiles": "ファイルを絞り込む...", + "statAgents": "エージェント", + "statFiles": "ファイル", + "statChunks": "チャンク", + "statSize": "サイズ", + "legendSessions": "セッション", + "legendMemory": "メモリ", + "legendKnowledge": "知識", + "keyboardHint": "スクロールでズーム / ドラッグでパン / ノードをクリックして掘り下げる", + "chunks": "チャンク", + "text": "テキスト" + }, + "agentComms": { + "connecting": "フィードに接続中...", + "eventsCount": "{count}件のイベント", + "connectionGateway": "ゲートウェイ", + "connectionSse": "SSE", + "connectionPolling": "ポーリング", + "sourceLive": "ライブ", + "sourceMixed": "混合", + "sourceSeeded": "シード済み", + "sessions": "{active}/{total}セッション", + "scrollToLatest": "最新にスクロール", + "toLabel": "宛先:", + "composerPlaceholderTarget": "{name}へメッセージ...(Enterで送信)", + "composerPlaceholderBroadcast": "上からセッションまたはエージェントを選択するか、ブロードキャストを入力してください...", + "send": "送信", + "noFeedEvents": "フィードイベントがありません", + "noFilterEvents": "{filter}イベントがありません", + "noFeedEventsHint": "ゲートウェイに接続するか、エージェントのアクティビティを待ちます。セッション、ツール、チャット、トレースのイベントがリアルタイムでストリーミングされます。", + "noFilterEventsHint": "「すべて」に切り替えて他のカテゴリのイベントを確認するか、{filter}イベントの到着をお待ちください。" + }, + "agentDetail": { + "configTab": "設定", + "filesTab": "ファイル", + "toolsTab": "ツール", + "channelsTab": "チャンネル", + "cronTab": "Cron", + "modelsTab": "モデル", + "workspaceFiles": "ワークスペースファイル", + "refresh": "更新", + "charCount": "{count}文字", + "missing": "見つからない", + "selectFileToView": "ファイルを選択して表示または編集", + "reset": "リセット", + "saving": "保存中...", + "save": "保存", + "fileNotExistYet": "このファイルはまだ存在しません。内容を入力して保存することで作成できます。", + "toolConfiguration": "ツール設定", + "profile": "プロファイル:", + "saved": "保存済み", + "allowListCount": "許可リスト ({count})", + "noAllowList": "明示的な許可リストなし(プロファイルのデフォルトを使用)", + "addToolAllowList": "許可リストにツールを追加", + "add": "追加", + "alsoAllowCount": "追加許可 ({count})", + "alsoAllowDesc": "プロファイルのデフォルトに加えて許可される追加ツール。", + "none": "なし", + "denyListCount": "拒否リスト ({count})", + "noDeniedTools": "拒否されたツールなし", + "addToolDenyList": "拒否リストにツールを追加", + "channelStatus": "チャンネルステータス", + "channelStatusDesc": "{agent}で利用可能なチャンネル", + "noChannelsFound": "チャンネルが見つかりません...", + "connectedOf": "{connected}/{total}接続済み", + "noAccounts": "アカウントなし", + "configuredCount": "{count}設定済み", + "notConfigured": "未設定", + "enabledCount": "{count}有効", + "disabled": "無効", + "cronJobs": "Cronジョブ", + "allCronJobsCount": "{total}件中{count}件", + "agentCronJobsCount": "{total}件中{count}件", + "agentOnly": "エージェントのみ", + "showAll": "すべて表示", + "noCronJobsFound": "Cronジョブが見つかりません", + "noCronJobsAssigned": "{agent}に割り当てられたCronジョブがありません", + "noSchedule": "スケジュールなし", + "enabled": "有効", + "lastRun": "最終:", + "nextRun": "次回:", + "modelConfiguration": "モデル設定", + "modelConfigDesc": "このエージェントのプライマリモデルとフォールバックモデルを設定します。", + "primaryModel": "プライマリモデル", + "defaultModel": "デフォルト", + "fallbackChainCount": "フォールバックチェーン ({count})", + "fallbackChainDesc": "プライマリモデルが失敗または利用できない場合に順番に試みるモデル。", + "noFallbackModels": "フォールバックモデルが設定されていません。", + "moveUp": "上に移動", + "moveDown": "下に移動", + "remove": "削除", + "addFallbackPlaceholder": "フォールバックモデルを追加", + "sandboxMode": "モード", + "sandboxWorkspace": "ワークスペース", + "sandboxNetwork": "ネットワーク", + "sandboxNetworkPlaceholder": "例:none、host", + "toolsSection": "ツール", + "subAgentsSection": "サブエージェント", + "addSubAgentPlaceholder": "サブエージェントを追加", + "addSubAgent": "追加", + "subAgentModelOverride": "サブエージェントモデルの上書き", + "defaultInherit": "デフォルト(継承)", + "modelLabel": "モデル:", + "noSubAgents": "サブエージェントが設定されていません。", + "memorySearch": "メモリ検索", + "cancel": "キャンセル" + }, + "taskBoard": { + "title": "タスクボード", + "allProjects": "すべてのプロジェクト", + "projects": "プロジェクト", + "close": "閉じる", + "spawnSubAgent": "サブエージェントを生成", + "newTask": "新しいタスク", + "refresh": "更新", + "spawnAgentPlaceholder": "エージェント名", + "spawnTaskPlaceholder": "タスクの説明", + "timeoutTitle": "タイムアウト(分)", + "spawning": "生成中...", + "spawn": "生成", + "noActiveSpawnRequests": "アクティブな生成リクエストなし", + "dismissError": "エラーを閉じる", + "taskBoardAriaLabel": "タスクボード", + "columnAriaLabel": "{title}列、{count}件のタスク", + "colInbox": "受信トレイ", + "colAssigned": "割り当て済み", + "colInProgress": "進行中", + "colReview": "レビュー", + "colQualityReview": "品質レビュー", + "colDone": "完了", + "recurring": "定期", + "spawned": "生成済み", + "spawnedFromTask": "タスク #{id}から生成", + "unassigned": "未割り当て", + "due": "期限:", + "dropTasksHere": "タスクをここにドロップ", + "priority_low": "低", + "priority_medium": "中", + "priority_high": "高", + "priority_critical": "緊急", + "claudeCodeTasks": "Claude Codeタスク", + "collapse": "折りたたむ", + "expand": "展開する", + "loading": "読み込み中...", + "noTeamTasksFound": "チームタスクが見つかりません", + "noTeamTasksDesc": "アクティブなClaude Codeチームタスクはありません。", + "taskCount": "{count}件のタスク", + "blocked": "ブロック済み", + "hermesScheduledTasks": "Hermesスケジュールタスク", + "noScheduledTasksFound": "スケジュールタスクが見つかりません", + "noScheduledTasksDesc": "アクティブなHermesスケジュールタスクはありません。", + "noSchedule": "スケジュールなし", + "enabled": "有効", + "disabled": "無効", + "createNewTask": "新しいタスクを作成", + "fieldTitle": "タイトル", + "fieldDescription": "説明", + "fieldPriority": "優先度", + "fieldProject": "プロジェクト", + "fieldAssignTo": "担当者", + "fieldTags": "タグ", + "makeRecurring": "定期タスクにする", + "createRecurringTask": "定期タスクを作成", + "createTask": "タスクを作成", + "cancel": "キャンセル", + "editTask": "タスクを編集", + "fieldStatus": "ステータス", + "saveChanges": "変更を保存", + "edit": "編集", + "deleteTaskConfirm": "「{title}」を削除しますか?", + "delete": "削除", + "closeTaskDetails": "タスク詳細を閉じる", + "noDescription": "説明なし", + "taskDetailTabs": "タスク詳細タブ", + "tabDetails": "詳細", + "tabComments": "コメント", + "tabQualityReview": "品質レビュー", + "tabSession": "セッション", + "ticket": "チケット", + "project": "プロジェクト", + "status": "ステータス", + "priority": "優先度", + "assignedTo": "担当者", + "created": "作成日時", + "issue": "課題", + "branch": "ブランチ", + "pr": "PR", + "live": "ライブ", + "postingAs": "投稿者", + "newComment": "新しいコメント...", + "addComment": "コメントを追加", + "broadcastToSubscribers": "購読者にブロードキャスト", + "broadcastPlaceholder": "すべての購読者にメッセージをブロードキャスト...", + "broadcast": "ブロードキャスト", + "broadcastSent": "{count}名の購読者にブロードキャストを送信しました", + "loadingComments": "コメントを読み込み中...", + "noComments": "コメントがありません", + "aegisQualityReview": "Aegis品質レビュー", + "noReviews": "レビューがありません", + "reviewerPlaceholder": "レビュアー名", + "reviewNotesPlaceholder": "レビューノート...", + "submit": "送信", + "loadingTranscript": "トランスクリプトを読み込み中...", + "noSessionMessages": "セッションメッセージなし" + }, + "cronManagement": { + "title": "Cron管理", + "subtitle": "定期ジョブのスケジュールと管理", + "loading": "読み込み中...", + "refresh": "更新", + "addJob": "ジョブを追加", + "calendarView": "カレンダービュー", + "calendarViewDescLocal": "時刻はローカルタイムゾーンで表示されます", + "calendarViewDesc": "時刻はUTCで表示されます", + "prev": "前へ", + "today": "今日", + "next": "次へ", + "calMode_agenda": "アジェンダ", + "calMode_week": "週", + "calMode_month": "月", + "searchPlaceholder": "ジョブを検索...", + "allAgents": "すべてのエージェント", + "allStates": "すべての状態", + "enabled": "有効", + "disabled": "無効", + "all": "すべて", + "sortName": "名前", + "sortSchedule": "スケジュール", + "sortLastRun": "最終実行", + "sortNextRun": "次回実行", + "ascending": "昇順", + "descending": "降順", + "noJobsMatchFilters": "現在のフィルタに一致するジョブはありません。", + "uniqueJobs": "{count}件のユニークなジョブ", + "noJobsForDay": "この日程にスケジュールされたジョブはありません。", + "jobCount": "{count}件のジョブ", + "runsCount": "{count}回の実行", + "totalRunsCount": "合計{count}回の実行", + "moreJobs": "+{count}件", + "firstRun": "初回 {time}", + "scheduledJobs": "スケジュールジョブ", + "jobsCount": "{total}件中{count}件", + "loadingJobs": "ジョブを読み込み中...", + "noCronJobsFound": "Cronジョブが見つかりません。", + "colJobName": "ジョブ名", + "colAgent": "エージェント", + "colSchedule": "スケジュール", + "colModel": "モデル", + "colStatus": "ステータス", + "colLastRun": "最終実行", + "colNextRun": "次回実行", + "colActions": "操作", + "enable": "有効化", + "disable": "無効化", + "run": "実行", + "runNowForce": "今すぐ実行(強制)", + "runNowIfDue": "今すぐ実行(期限の場合)", + "clone": "クローン", + "history": "履歴", + "configuration": "設定", + "delivery": "デリバリー", + "source": "ソース", + "localSchedulerAutomation": "ローカルスケジューラー / 自動化", + "command": "コマンド", + "timing": "タイミング", + "recentLogs": "最近のログ", + "lastRun": "最終実行", + "nextRun": "次回実行", + "timezone": "タイムゾーン", + "remove": "削除", + "close": "閉じる", + "noLogsAvailable": "ログがありません。", + "runHistoryTitle": "実行履歴:{name}", + "totalRuns": "合計{count}回の実行", + "filterRunsPlaceholder": "実行をフィルタ...", + "timestamp": "タイムスタンプ", + "duration": "所要時間", + "error": "エラー", + "noRunHistoryAvailable": "実行履歴がありません。", + "loadMore": "さらに読み込む", + "addNewCronJob": "新しいCronジョブを追加", + "fieldJobName": "ジョブ名", + "fieldSchedule": "スケジュール(Cron形式)", + "quickSelect": "クイック選択...", + "scheduleFormatHint": "形式:分 時 日 月 曜日", + "fieldCommand": "コマンド", + "fieldModelOptional": "モデル(任意)", + "modelHint": "エージェントまたはゲートウェイのデフォルトモデルを使用するには空のままにします。", + "fieldStaggerOptional": "スタガーオフセット(任意)", + "seconds": "秒", + "staggerHint": "同じスケジュールの他のジョブとの重複を避けるために実行を遅延させます。", + "fieldDescriptionOptional": "説明(任意)", + "descriptionPlaceholder": "このジョブは何をしますか?", + "cancel": "キャンセル", + "claudeCodeTeams": "Claude Codeチーム", + "teamsCount": "{count}チーム", + "collapse": "折りたたむ", + "expand": "展開する", + "noClaudeCodeTeams": "~/.claude/teams/にClaude Codeチームが見つかりません", + "membersCount": "{count}名のメンバー" + }, + "sessionDetails": { + "title": "セッション管理", + "subtitle": "エージェントセッションの監視と管理", + "filter": "フィルター", + "filterAll": "すべてのセッション", + "filterActive": "アクティブのみ", + "filterIdle": "アイドルのみ", + "sortBy": "並び替え", + "sortAge": "経過時間", + "sortTokens": "トークン使用量", + "sortModel": "モデル", + "timeWindow": "時間ウィンドウ", + "last1h": "直近1時間", + "last6h": "直近6時間", + "last24h": "直近24時間", + "last7d": "直近7日", + "allTime": "すべて", + "global": "グローバル", + "unknown": "不明", + "sessionCount": "{total}件中{filtered}件のセッション", + "activeCount": "{count}件アクティブ", + "noSessionsMatch": "現在のフィルターに一致するセッションはありません", + "model": "モデル", + "tokenUsage": "トークン使用量", + "sessionDetails": "セッション詳細", + "kind": "種別", + "id": "ID", + "lastActivity": "最終アクティビティ", + "messages": "メッセージ数", + "label": "ラベル", + "addLabel": "クリックしてラベルを追加...", + "sessionControls": "セッション制御", + "thinking": "思考", + "verbose": "詳細出力", + "reasoning": "推論", + "off": "オフ", + "on": "オン", + "minimal": "最小", + "low": "低", + "medium": "中", + "high": "高", + "xhigh": "最高", + "full": "フル", + "stream": "ストリーム", + "modelInformation": "モデル情報", + "fullName": "完全名", + "provider": "プロバイダー", + "description": "説明", + "monitor": "モニター", + "pause": "一時停止", + "terminate": "終了", + "working": "処理中...", + "delete": "削除", + "deleteConfirm": "削除しますか?", + "yes": "はい", + "no": "いいえ", + "confirmTerminate": "このセッションを終了してもよいですか?", + "failedMonitor": "セッションの監視に失敗しました", + "failedPause": "セッションの一時停止に失敗しました", + "failedTerminate": "セッションの終了に失敗しました", + "sessionOverview": "セッション概要", + "totalSessions": "総セッション数", + "active": "アクティブ", + "idle": "アイドル", + "subAgents": "サブエージェント", + "cronJobs": "Cronジョブ", + "modelDistribution": "モデル分布", + "highTokenUsage": "トークン使用量が高い", + "highTokenUsageDesc": "{count}件のセッションがトークン上限の80%以上を使用しています。" + }, + "costTracker": { + "title": "コストトラッカー", + "subtitle": "エージェント・モデル・セッション全体のトークン使用量とコスト分析", + "loadingCostData": "コストデータを読み込み中", + "noUsageData": "使用データがありません", + "noUsageDataDesc": "エージェントがセッションを実行してトークンを消費すると使用データが表示されます。", + "refresh": "更新", + "totalCost": "総コスト({timeframe})", + "totalTokens": "総トークン数", + "apiRequests": "APIリクエスト数", + "activeAgents": "アクティブエージェント", + "taskAttributed": "タスク帰属", + "usageTrends": "使用トレンド", + "perTurn": "ターン別", + "cumulative": "累計", + "noTrendData": "この期間のトレンドデータはありません", + "tokenUsageByModel": "モデル別トークン使用量", + "noModelData": "モデルデータなし", + "costDistributionByModel": "モデル別コスト分布", + "noCostData": "コストデータなし", + "performanceInsights": "パフォーマンス分析", + "mostEfficientModel": "最も効率的なモデル", + "avgTokensPerRequest": "平均トークン/リクエスト", + "optimizationPotential": "最適化の余地", + "savingsPossible": "削減可能", + "exportData": "データのエクスポート", + "exportDataDesc": "トークン使用記録、モデル統計、コスト内訳をダウンロード", + "exporting": "エクスポート中...", + "noAgentData": "エージェントデータなし", + "noAgentDataDesc": "エージェントが報告を開始するとトークン使用記録が表示されます", + "agents": "エージェント", + "totalCostDays": "総コスト({days}日)", + "avgPer1kTokens": "平均 $/1Kトークン", + "perAgentCost": "エージェント別コスト", + "agentBreakdown": "エージェント内訳", + "inputTokens": "入力トークン", + "outputTokens": "出力トークン", + "ioRatio": "入出力比率", + "lastActive": "最終アクティブ", + "noTaskCosts": "タスク帰属コストなし", + "tokens": "トークン", + "sortBy": "並び替え", + "noSessionCostData": "セッションコストデータなし", + "noSessionCostDataDesc": "使用量が記録されるとセッション別内訳が表示されます。", + "activeStatus": "アクティブ", + "inactiveStatus": "非アクティブ", + "requests": "リクエスト", + "inShort": "入力", + "outShort": "出力", + "avgPerReq": "平均/リクエスト", + "noTaskCostData": "タスクコストデータなし", + "noTaskCostDataDesc": "エージェントが割り当てタスクに取り組むとコストが帰属されます", + "tasksWithCosts": "コストのあるタスク", + "attributedCost": "帰属コスト", + "attributedTokens": "帰属トークン", + "unattributed": "未帰属", + "tasksByCost": "コスト別タスク", + "reqs": "リクエスト" + }, + "superAdmin": { + "accessDenied": "アクセス拒否", + "accessDeniedDesc": "スーパーコントロールには管理者権限が必要です。", + "loading": "スーパー管理データを読み込み中...", + "title": "スーパーコントロール", + "subtitleLocal": "スケジューラーの自動化とランタイム状態のローカル制御プレーンビュー。", + "subtitleMultiTenant": "承認ゲートと安全な破壊的操作を備えたマルチテナントプロビジョニング制御プレーン。", + "addWorkspace": "+ ワークスペース追加", + "refresh": "更新", + "activeOrgs": "アクティブ組織", + "pendingInProgress": "保留中 / 処理中", + "erroredOrgs": "エラー組織", + "queuedApprovals": "承認待ちキュー", + "createNewWorkspace": "新規ワークスペースの作成", + "createWorkspaceHint": "以下にワークスペース詳細を入力し、「作成 + キュー」をクリックして新しいクライアントインスタンスをプロビジョニングします。", + "slugPlaceholder": "スラッグ(例:acme)", + "displayNamePlaceholder": "表示名", + "linuxUserPlaceholder": "Linuxユーザー(オプション)", + "planStandard": "スタンダード", + "planPro": "プロ", + "planEnterprise": "エンタープライズ", + "gatewayPortPlaceholder": "ゲートウェイポート", + "dashboardPortPlaceholder": "ダッシュボードポート", + "dryRun": "ドライラン", + "live": "(本番)", + "createAndQueue": "作成 + キュー", + "tabOrganizations": "組織", + "tabJobs": "ジョブ", + "tabEvents": "イベント", + "searchOrganizations": "組織を検索", + "showing": "{shown} / {total} 件を表示", + "colTenant": "テナント", + "colSystemUser": "システムユーザー", + "colOwner": "オーナー", + "colStatus": "ステータス", + "colLatestJob": "最新ジョブ", + "colAction": "操作", + "unassigned": "未割当", + "by": "作成者:", + "unknownCreator": "不明", + "localReadOnly": "ローカル読み取り専用", + "queueDecommission": "廃止をキュー", + "noMatchingOrgs": "一致する組織はありません。", + "prev": "前へ", + "next": "次へ", + "page": "{page} / {total} ページ", + "searchJobs": "ジョブを検索", + "colJob": "ジョブ", + "colRequestedApproved": "要求者/承認者", + "reqShort": "要求", + "apprShort": "承認", + "view": "表示", + "viewEvents": "イベントを表示", + "approveAndRun": "承認 + 実行", + "approve": "承認", + "reject": "拒否", + "running": "実行中...", + "run": "実行", + "noMatchingJobs": "一致するジョブはありません。", + "showingEventsForJob": "ジョブ #{jobId} のイベントを表示中", + "selectJobForEvents": "ジョブを選択してプロビジョニングイベントログを確認してください。", + "noEventsYet": "このジョブのイベントはまだありません。", + "queueDecommissionTitle": "廃止をキュー:{name}", + "reviewImpact": "ジョブを作成する前に影響範囲を確認してください。", + "dryRunRecommended": "ドライラン(推奨)", + "dryRunDesc": "システムを変更せず、コマンドを検証して完全な実行計画をログに記録します。", + "liveExecution": "本番実行", + "liveExecutionDesc": "承認・実行後にサービスを停止し、クリーンアップ変更を適用します。", + "removeLinuxUser": "Linuxユーザーを削除", + "removeLinuxUserDesc": "`userdel -r` を実行してホームディレクトリを削除します。", + "removeStateDirs": "状態/ワークスペースディレクトリを削除", + "removeStateDirsDesc": "ユーザーを保持する場合に `.openclaw` と `workspace` パスを削除します。", + "impactSummary": "影響のまとめ", + "impactStopsService": "`openclaw-gateway@{user}.service` を停止・無効化します。", + "impactRemovesEnv": "`/etc/openclaw-tenants/{user}.env` を削除します。", + "impactLinuxUserRemoved": "Linuxユーザーが削除されます。", + "impactStateDirsRemoved": "状態/ワークスペースディレクトリが削除されます。", + "impactRetained": "Linuxユーザーとディレクトリは保持されます。", + "reasonOptional": "理由(オプション)", + "typeSlugLabel": "「", + "toConfirmLive": "」と入力して本番廃止を確認", + "cancel": "キャンセル", + "queueing": "キュー中...", + "queueDryRunDecommission": "ドライラン廃止をキュー", + "queueLiveDecommission": "本番廃止をキュー", + "slugAndNameRequired": "スラッグと表示名は必須です", + "tenantCreated": "テナント {slug} が作成されました。ブートストラップジョブがキューされました。", + "jobExecuted": "ジョブ #{jobId} が実行されました", + "jobApprovedExecuted": "ジョブ #{jobId} が承認・実行されました", + "typeToConfirm": "{slug} と入力して本番廃止を確認", + "decommissionQueuedDryRun": "{slug} のドライラン廃止がキューされました", + "decommissionQueued": "{slug} の廃止がキューされました", + "optionalReason": "{action} の任意の理由:", + "jobActioned": "ジョブ #{jobId} が{action}されました" + }, + "auditTrail": { + "title": "監査ログ", + "eventsLogged": "{count}件のイベントを記録済み", + "refresh": "更新", + "allActions": "すべての操作", + "groupAuth": "認証", + "groupUsers": "ユーザー", + "groupAgents": "エージェント", + "groupSystem": "システム", + "groupConfig": "設定", + "groupWorkspaces": "ワークスペース", + "actionLogin": "ログイン", + "actionLoginFailed": "ログイン失敗", + "actionLogout": "ログアウト", + "actionLoginGoogle": "Googleログイン", + "actionGoogleDisconnect": "Google切断", + "actionPasswordChange": "パスワード変更", + "actionProfileUpdate": "プロフィール更新", + "actionUserCreate": "ユーザー作成", + "actionUserUpdate": "ユーザー更新", + "actionUserDelete": "ユーザー削除", + "actionRoleDenied": "アクセス拒否", + "actionAccessRequest": "アクセス申請", + "actionAccessApprove": "アクセス承認", + "actionAccessDeny": "アクセス拒否", + "actionAgentRegister": "エージェント登録", + "actionAgentCreate": "エージェント作成", + "actionAgentUpdate": "エージェント更新", + "actionAgentDelete": "エージェント削除", + "actionAgentConfigSync": "設定同期済み", + "actionLocalAgentSync": "ローカルエージェント同期", + "actionSettingsUpdate": "設定更新", + "actionAutoBackup": "自動バックアップ", + "actionBackupCreate": "バックアップ作成", + "actionBackupDelete": "バックアップ削除", + "actionHeartbeatCheck": "ハートビートチェック", + "actionIntegrationTest": "統合テスト", + "actionCleanup": "クリーンアップ", + "actionExport": "エクスポート", + "actionTokenRotate": "トークンローテーション", + "actionGatewayConfigUpdate": "ゲートウェイ設定更新", + "actionWorkspaceCreate": "ワークスペース作成", + "actionWorkspaceUpdate": "ワークスペース更新", + "actionWorkspaceDelete": "ワークスペース削除", + "filterByActor": "操作者でフィルター...", + "noEvents": "監査イベントが見つかりません", + "userRef": "ユーザー #{id}", + "previous": "前へ", + "next": "次へ", + "pageOf": "{page} / {total} ページ", + "adminRequired": "監査ログの閲覧には管理者権限が必要です", + "failedFetch": "監査ログの取得に失敗しました", + "detailUsername": "ユーザー名", + "detailRole": "ロール", + "detailName": "名前", + "detailPasswordReset": "パスワードリセット", + "detailChanged": "変更済み", + "detailSize": "サイズ", + "detailMarkedOffline": "オフラインとしてマーク", + "detailAgent": "エージェント", + "detailSessions": "セッション", + "detailEvents": "イベント", + "detailRemoved": "削除済み", + "detailType": "タイプ" + }, + "securityAudit": { + "title": "セキュリティ監査", + "subtitle": "セキュリティポスチャ、認証イベント、信頼スコア、脅威検知", + "timeframeHour": "時間", + "timeframeDay": "日", + "timeframeWeek": "週", + "timeframeMonth": "月", + "loadingSecurityData": "セキュリティデータを読み込み中", + "securityPosture": "セキュリティポスチャ", + "blendedScore": "総合スコア:インフラ設定 70%、イベント履歴 30%", + "infrastructureScan": "インフラスキャン", + "scanCredentials": "認証情報", + "scanNetwork": "ネットワーク", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "ランタイム", + "scanOs": "OSセキュリティ", + "authEvents": "認証イベント", + "noAuthEvents": "この期間の認証イベントはありません", + "colType": "タイプ", + "colActor": "実行者", + "colIP": "IP", + "colTime": "時刻", + "agentTrustScores": "エージェント信頼スコア", + "noAgentTrustData": "エージェント信頼データがありません", + "flagged": "フラグ付き", + "secretExposureAlerts": "シークレット漏洩アラート", + "noSecretsDetected": "シークレットは検出されていません", + "colFile": "ファイル", + "colPreview": "プレビュー", + "colStatus": "ステータス", + "colDetected": "検出日時", + "statusResolved": "解決済み", + "statusActive": "アクティブ", + "mcpToolAudit": "MCPツール監査", + "noToolUsageData": "ツール使用データがありません", + "chartSuccess": "成功", + "chartFailure": "失敗", + "rateLimitAbuseSignals": "レート制限/不正利用シグナル", + "noRateLimitSignals": "レート制限シグナルはありません", + "hits": "{hits} ヒット", + "injectionAttempts": "インジェクション試行", + "noInjectionAttempts": "インジェクション試行は検出されていません", + "colSource": "ソース", + "colInput": "入力", + "statusBlocked": "ブロック済み", + "statusPassed": "通過", + "securityTimeline": "セキュリティタイムライン({timeframe})", + "noTimelineData": "タイムラインデータがありません", + "chartAuthEvents": "認証イベント", + "chartInjections": "インジェクション", + "chartSecrets": "シークレット", + "chartToolCalls": "ツール呼び出し", + "agentEvalDashboard": "エージェント評価ダッシュボード", + "overallConvergence": "全体コンバージェンス", + "crossAgentAlignment": "評価レイヤー全体のエージェント間整合性", + "noEvalData": "評価データがありません", + "convergence": "コンバージェンス:", + "drift": "ドリフト", + "fixPrefix": "修正方法:{fix}", + "issueCount": "{count, plural, one {# 件の問題} other {# 件の問題}}" + }, + "office": { + "title": "コマンドデッキ", + "subtitle": "クルーをリアルタイムで監視", + "loadingLocalSessions": "ローカルセッションをスキャン中...", + "loadingOffice": "オフィスを読み込み中...", + "activeCount": "{count} アクティブ", + "standbyCount": "{count} 待機中", + "alertCount": "{count} アラート", + "offlineCount": "{count} オフライン", + "buttonDeck": "デッキ", + "buttonCrewChart": "クルーチャート", + "refresh": "更新", + "emptyDeck": "デッキは空です", + "emptyDeckSubtitle": "エージェントをデプロイするとここに表示されます", + "crewHeader": "クルー", + "onlineCount": "{count} オンライン", + "filterAll": "すべて", + "filterWorking": "作業中", + "filterIdle": "アイドル", + "filterNeedsAttention": "要注意", + "filterRunning": "実行中", + "filterNotRunning": "未実行", + "noWorkersInFilter": "このフィルターに該当するワーカーはいません。", + "noRecentActivity": "最近のアクティビティなし", + "activeStatus": "アクティブ", + "idleMinutes": "{minutes}m アイドル", + "mainDeck": "メインデッキ", + "radarLabel": "レーダー", + "resetView": "リセット", + "showCrewButton": "クルーを表示", + "hideCrewButton": "クルーを非表示", + "showRadarButton": "レーダーを表示", + "hideRadarButton": "レーダーを非表示", + "showLogButton": "ログを表示", + "hideLogButton": "ログを非表示", + "resetLayout": "レイアウトをリセット", + "deckLog": "デッキログ", + "noEventsYet": "イベントなし。ゾーンをクリックするかアクションを実行してください。", + "legendActive": "アクティブ", + "legendStandby": "待機中", + "legendOther": "その他", + "hotspotUp": "上", + "hotspotDown": "下", + "hotspotLeft": "左", + "hotspotRight": "右", + "hotspotFineMinusX": "微調整 -X", + "hotspotFinePlusX": "微調整 +X", + "hotspotWider": "幅を広げる", + "hotspotNarrower": "幅を縮める", + "hotspotTaller": "高さを増やす", + "hotspotShorter": "高さを減らす", + "segmentedBy": "分類:", + "segmentCategory": "カテゴリ", + "segmentRole": "ロール", + "segmentStatus": "ステータス", + "currentActivity": "現在のアクティビティ", + "taskStatTotal": "合計", + "taskStatAssigned": "割り当て済み", + "taskStatActive": "進行中", + "taskStatDone": "完了", + "sessionLabel": "セッション:", + "quickActions": "クイックアクション", + "actionFocus": "集中", + "actionPair": "ペア作業", + "actionBreak": "休憩", + "openFlightDeck": "Flight Deck で開く", + "openingFlightDeck": "Flight Deck を開いています...", + "flightDeckCompanion": "セッション詳細分析用のプライベート/プロコンパニオンアプリ", + "flightDeckRequired": "Flight Deck が必要", + "flightDeckDescription": "Flight Deck は Mission Control のプライベート/プロコンパニオンアプリです。", + "flightDeckNotInstalled": "このマシンに Flight Deck がインストールされていないようです。インストールすると、より豊富なコントロールと診断機能でエージェントセッションを開けます。", + "maybeLater": "後で", + "downloadFlightDeck": "Flight Deck をダウンロード", + "moving": "移動中", + "neverSeen": "未確認", + "justNow": "たった今", + "minutesAgo": "{minutes}分前", + "hoursAgo": "{hours}時間前", + "daysAgo": "{days}日前" + }, + "githubSync": { + "title": "GitHub Issues 同期", + "subtitle": "GitHub Issues を Mission Control タスクとしてインポート", + "loading": "GitHub 同期を読み込み中...", + "connectedAs": "GitHub:{user}", + "notConfigured": "GitHub:未設定", + "tokenNotConfigured": "GitHub トークンが設定されていません", + "tokenNotConfiguredDesc": "Issue 同期を有効にするには、インテグレーションで GITHUB_TOKEN を設定してください。同期履歴とリンクされたタスクは引き続き閲覧できます。", + "importIssues": "Issues をインポート", + "labelRepository": "リポジトリ", + "placeholderRepo": "owner/repo", + "labelLabels": "ラベル(任意)", + "placeholderLabels": "bug,enhancement", + "labelState": "状態", + "stateOpen": "オープン", + "stateClosed": "クローズ", + "stateAll": "すべて", + "labelAssignAgent": "エージェントに割り当て(任意)", + "unassigned": "未割り当て", + "buttonPreview": "プレビュー", + "buttonImport": "インポート", + "twoWaySync": "双方向同期", + "syncAll": "すべて同期", + "enableSync": "有効化", + "disableSync": "無効化", + "syncButton": "同期", + "noProjectsLinked": "GitHub リポジトリにリンクされたプロジェクトがありません。プロジェクト管理で GitHub リポジトリを設定してください。", + "previewTitle": "プレビュー({count} 件の Issue)", + "colNumber": "#", + "colTitle": "タイトル", + "colLabels": "ラベル", + "colState": "状態", + "colCreated": "作成日", + "syncHistory": "同期履歴", + "colRepo": "リポジトリ", + "colIssues": "Issues", + "colStatus": "ステータス", + "colSyncedAt": "同期日時", + "noSyncHistory": "同期履歴がありません。上記から Issues をインポートして開始してください。", + "linkedTasks": "リンクされたタスク", + "linkedTasksWithCount": "リンクされたタスク({count})", + "colTask": "タスク", + "colPriority": "優先度", + "colGitHub": "GitHub", + "colSynced": "同期済み", + "noLinkedTasks": "GitHub Issues にリンクされたタスクがありません。", + "syncResultImported": "インポート済み:{count}", + "syncResultSkipped": "スキップ:{count}", + "syncResultErrors": "エラー:{count}", + "enterRepo": "リポジトリを入力してください(owner/repo)", + "noIssuesFound": "フィルターに一致する Issue が見つかりません", + "failedFetchIssues": "Issues の取得に失敗しました", + "networkError": "ネットワークエラー", + "syncFailed": "同期に失敗しました", + "failedToggleSync": "同期の切り替えに失敗しました", + "importedFeedback": "{imported} 件の Issue をインポートしました。{skipped} 件をスキップしました" + }, + "agentCost": { + "title": "エージェントコスト内訳", + "subtitle": "エージェント別トークン使用量と支出分析", + "loadingAgentCosts": "エージェントコストを読み込み中", + "viewOverview": "概要", + "viewPerAgentDB": "エージェント別(DB)", + "timeframeHour": "時間", + "timeframeDay": "日", + "timeframeWeek": "週", + "timeframeMonth": "月", + "noAgentCostData": "エージェントコストデータがありません", + "noAgentCostSubtitle": "エージェントがトークンを使用し始めるとコストデータが表示されます", + "refresh": "更新", + "activeAgents": "アクティブエージェント", + "totalCost": "総コスト({timeframe})", + "mostExpensive": "最高コスト", + "mostEfficient": "最高効率", + "taskAttributed": "タスク帰属", + "unattributed": "{cost} 未帰属", + "costDistributionByAgent": "エージェント別コスト分布", + "noCostData": "コストデータなし", + "costTrends": "コストトレンド(上位5エージェント)", + "noTrendData": "トレンドデータなし", + "costComparison": "コスト比較", + "costEfficiency": "コスト効率(エージェントあたり$/1Kトークン)", + "agentCostRanking": "エージェントコストランキング", + "noTaskCosts": "このエージェントのタスク帰属コストはありません", + "tasksTab": "タスク({count})", + "modelsTab": "モデル({count})", + "sessionCount": "{count, plural, one {# セッション} other {# セッション}}", + "requestCount": "{count, plural, one {# リクエスト} other {# リクエスト}}", + "tokens": "トークン", + "ofTotal": "合計の {pct}%", + "reqs": "{count} リクエスト", + "inputTokens": "入力トークン", + "outputTokens": "出力トークン", + "ioRatio": "入出力比", + "lastActive": "最終アクティブ", + "modelBreakdown": "モデル内訳", + "inSuffix": "入力", + "outSuffix": "出力", + "noPerAgentData": "データベースにエージェント別データがありません", + "noPerAgentDataSubtitle": "エージェントがハートビートを送信し始めるとトークン使用記録が表示されます", + "agentCountDB": "エージェント数(DB)", + "totalCostDays": "総コスト({days}日)", + "totalTokens": "総トークン数", + "avgPer1kTokens": "平均$/1Kトークン", + "perAgentCostDB": "エージェント別コスト(DB)", + "agentTokenBreakdown": "エージェントトークン内訳", + "chartCost": "コスト($)" + }, + "tokenDashboard": { + "title": "トークン & コストダッシュボード", + "subtitle": "モデルとセッション全体のトークン使用量とコストを監視", + "viewOverview": "概要", + "viewSessions": "セッション", + "timeframeHour": "時間", + "timeframeDay": "日", + "timeframeWeek": "週", + "timeframeMonth": "月", + "filtersLabel": "フィルター:", + "clearAll": "すべてクリア", + "timezoneLabel": "タイムゾーン:", + "sortByLabel": "並び替え:", + "noSessionCostData": "セッションコストデータなし", + "noSessionCostSubtitle": "使用量が記録されるとセッション別の内訳が表示されます。", + "sessionActive": "アクティブ", + "sessionInactive": "非アクティブ", + "requests": "リクエスト", + "inSuffix": "入力", + "outSuffix": "出力", + "avgPerRequest": "リクエストあたり平均", + "loadingUsageData": "使用データを読み込み中", + "totalTokens": "総トークン数({timeframe})", + "totalCost": "総コスト({timeframe})", + "apiRequests": "API リクエスト数", + "avgTokensPerRequest": "リクエストあたり平均トークン", + "cacheReadTokens": "キャッシュ読み取りトークン", + "cacheWriteTokens": "キャッシュ書き込みトークン", + "usageTrends": "使用トレンド({timeframe})", + "peakLabel": "ピーク:", + "perTurnButton": "ターン別", + "cumulativeButton": "累計", + "noTrendData": "この期間のトレンドデータがありません", + "chartTokens": "トークン", + "chartRequests": "リクエスト", + "tokenUsageByModel": "モデル別トークン使用量", + "noModelUsageData": "モデル使用データがありません", + "costDistributionByModel": "モデル別コスト分布", + "noCostData": "コストデータがありません", + "costByProvider": "プロバイダー別コスト", + "noProviderData": "プロバイダーデータがありません", + "exportData": "データをエクスポート", + "exportCsvFiltered": "CSV エクスポート(フィルター済み)", + "exportCsvFull": "CSV エクスポート(全件)", + "exportJson": "JSON エクスポート", + "exporting": "エクスポート中...", + "exportDescription": "分析用のトークン使用データをエクスポートします。「フィルター済み」は現在表示中のデータのみ、「全件」はサーバーの全レコードをエクスポートします。", + "performanceInsights": "パフォーマンスインサイト", + "mostEfficientModel": "最高効率モデル", + "mostUsedModel": "最多使用モデル", + "optimizationPotential": "最適化ポテンシャル", + "savingsPossible": "{pct}% の節約が可能", + "modelEfficiencyComparison": "モデル効率比較", + "modelPerformance": "モデルパフォーマンス", + "topSessionsByCost": "コスト上位セッション", + "requestsLabel": "リクエスト", + "avgCost": "平均コスト", + "avgTokens": "平均トークン", + "noUsageData": "使用データがありません", + "noUsageDataSubtitle": "エージェントが実行を開始するとトークン使用量が表示されます", + "refresh": "更新" + }, + "memoryBrowser": { + "hideSidebar": "サイドバーを隠す", + "showSidebar": "サイドバーを表示", + "fileCountSize": "{count} ファイル / {size}", + "indexing": "インデックス中…", + "newFile": "+ 新規", + "searchPlaceholder": "ファイルを検索...", + "searchResults": "{count} 件の結果", + "noFiles": "ファイルなし", + "refresh": "更新", + "toggleBacklinks": "バックリンクパネルを切り替え", + "links": "リンク", + "edit": "編集", + "delete": "削除", + "save": "保存", + "saving": "保存中...", + "cancel": "キャンセル", + "selectFilePrompt": "ファイルを選択して表示", + "orSwitchView": "またはヘルス/パイプラインビューに切り替え", + "schemaWarnings": "スキーマ警告:", + "editPlaceholder": "ファイル内容を編集...", + "loadingHermes": "Hermes メモリを読み込み中", + "noHermesData": "Hermes メモリデータなし", + "hermesMemoryTitle": "Hermes メモリ", + "hermesMemoryDesc": "Hermes エージェントの永続メモリファイルの読み取り専用ビュー", + "noAgentMemory": "エージェントメモリファイルが見つかりません", + "noUserMemory": "ユーザーメモリファイルが見つかりません", + "runningDiagnostics": "診断を実行中", + "noHealthData": "ヘルスデータなし", + "runDiagnostics": "診断を実行", + "healthCategories": "8 カテゴリ / {time}", + "pipelineTitle": "処理パイプライン", + "pipelineDesc": "Ars Contexta の 6R にインスパイアされた知識メンテナンス操作", + "pipelineReflect": "反映", + "pipelineReflectDesc": "ファイル間の接続機会を見つける", + "pipelineReweave": "再編成", + "pipelineReweaveDesc": "新しいリンクファイルから更新が必要な古いファイルを見つける", + "pipelineGenerateMoc": "MOC 生成", + "pipelineGenerateMocDesc": "ファイルクラスターからコンテンツマップを自動生成", + "processing": "処理中", + "filesProcessed": "{count} ファイル処理済み", + "noSuggestions": "提案なし — 知識ベースは十分に接続されています", + "mapsOfContent": "コンテンツマップ({count} グループ)", + "newFileTitle": "新規ファイル", + "directory": "ディレクトリ", + "fileName": "名前", + "fileType": "種類", + "content": "内容", + "contentOptional": "任意...", + "create": "作成", + "deleteFileTitle": "ファイルを削除", + "permanentlyDelete": "完全に削除:", + "outgoing": "発信({count})", + "backlinks": "バックリンク({count})", + "wikiLinks": "Wiki リンク({count})" + }, + "userManagement": { + "adminAccessRequired": "管理者アクセスが必要です", + "failedToLoadUsers": "ユーザーの読み込みに失敗しました", + "failedToCreate": "ユーザーの作成に失敗しました", + "networkError": "ネットワークエラー", + "userUpdated": "ユーザーを更新しました", + "failedToUpdate": "更新に失敗しました", + "deletedUser": "ユーザー「{username}」を削除しました", + "failedToDelete": "削除に失敗しました", + "failedToAction": "リクエストの {action} に失敗しました", + "requestActioned": "{email} のリクエストを {action} しました", + "user": "ユーザー", + "accessDenied": "アクセス拒否", + "adminRequired": "ユーザー管理には管理者権限が必要です。", + "loadingUsers": "ユーザーを読み込み中...", + "usersTitle": "ユーザー", + "usersSummary": "{count} 人の登録ユーザー · {pending} 件の承認待ち", + "addLocalUser": "+ ローカルユーザーを追加", + "cancel": "キャンセル", + "pendingRequests": "{count} 件の保留中アクセスリクエスト", + "identity": "アイデンティティ", + "attempts": "試行回数", + "lastAttempt": "最終試行", + "action": "アクション", + "roleViewer": "閲覧者", + "roleOperator": "オペレーター", + "roleAdmin": "管理者", + "noteOptional": "メモ(任意)", + "confirm": "確認", + "reject": "拒否", + "review": "レビュー", + "newLocalUser": "新規ローカルユーザー", + "username": "ユーザー名", + "password": "パスワード", + "displayName": "表示名", + "creating": "作成中...", + "createUser": "ユーザーを作成", + "colUser": "ユーザー", + "colProvider": "プロバイダー", + "colRole": "ロール", + "colLastLogin": "最終ログイン", + "colActions": "アクション", + "newPasswordOptional": "新しいパスワード(任意)", + "save": "保存", + "edit": "編集", + "delete": "削除", + "never": "なし", + "createdUser": "ユーザー「{username}」を作成しました" + }, + "alertRules": { + "title": "アラートルール", + "description": "エージェント、タスク、システムイベントの自動アラートを設定", + "evaluating": "評価中...", + "evaluateNow": "今すぐ評価", + "newRule": "+ 新規ルール", + "statTotalRules": "ルール総数", + "statActive": "アクティブ", + "statTotalTriggers": "トリガー総数", + "evalResultsTitle": "評価結果", + "dismiss": "閉じる", + "triggered": "トリガー済み", + "noRulesToEvaluate": "評価するルールがありません", + "loadingRules": "ルールを読み込み中...", + "noRulesConfigured": "アラートルールが設定されていません", + "createRuleHint": "ルールを作成してシステムイベントの通知を受け取る", + "never": "なし", + "cooldown": "クールダウン:{minutes}分", + "triggerCount": "トリガー:{count}回", + "lastTriggered": "最終:{time}", + "deleteRule": "ルールを削除", + "newRuleTitle": "新規アラートルール", + "ruleName": "ルール名", + "ruleNamePlaceholder": "例:エージェントオフラインアラート", + "ruleDescription": "説明", + "optionalDescription": "任意の説明", + "entity": "エンティティ", + "entityAgent": "エージェント", + "entityTask": "タスク", + "entitySession": "セッション", + "entityActivity": "アクティビティ", + "field": "フィールド", + "operator": "演算子", + "value": "値", + "valuePlaceholder": "例:error", + "cooldownMinutes": "クールダウン(分)", + "notifyRecipient": "通知(受信者)", + "cancel": "キャンセル", + "creating": "作成中...", + "createRule": "ルールを作成", + "failedToCreate": "ルールの作成に失敗しました", + "networkError": "ネットワークエラー" + }, + "agentSquad": { + "failedToFetch": "エージェントの取得に失敗しました", + "errorOccurred": "エラーが発生しました", + "failedToUpdateStatus": "エージェントステータスの更新に失敗しました", + "loadingAgents": "エージェントを読み込み中", + "title": "エージェントチーム", + "live": "ライブ", + "manual": "手動", + "addAgent": "+ エージェントを追加", + "refresh": "更新", + "noAgents": "エージェントが見つかりません", + "addFirstAgent": "最初のエージェントを追加して開始", + "session": "セッション", + "totalTasks": "タスク総数", + "inProgress": "進行中", + "lastSeen": "最終確認", + "activity": "アクティビティ", + "wake": "起動", + "busy": "ビジー", + "sleep": "スリープ", + "statusControl": "ステータス制御", + "role": "ロール", + "sessionKey": "セッションキー", + "notSet": "未設定", + "soulContent": "SOUL コンテンツ", + "soulPlaceholder": "エージェントの個性と指示...", + "taskStatistics": "タスク統計", + "total": "合計", + "assigned": "割り当て済み", + "done": "完了", + "created": "作成日", + "lastUpdated": "最終更新", + "saveChanges": "変更を保存", + "cancel": "キャンセル", + "editAgent": "エージェントを編集", + "createNewAgent": "新規エージェントを作成", + "name": "名前", + "rolePlaceholder": "例:研究者、開発者、アナリスト", + "sessionKeyOptional": "セッションキー(任意)", + "sessionKeyPlaceholder": "ClawdBot セッション識別子", + "soulContentOptional": "SOUL コンテンツ(任意)", + "createAgent": "エージェントを作成", + "failedToUpdate": "エージェントの更新に失敗しました", + "failedToCreate": "エージェントの作成に失敗しました", + "never": "なし", + "justNow": "たった今", + "minutesAgo": "{count}分前", + "hoursAgo": "{count}時間前", + "daysAgo": "{count}日前" + }, + "multiGateway": { + "title": "ゲートウェイマネージャー", + "description": "複数の OpenClaw ゲートウェイ接続を管理", + "probeAll": "すべてを探索", + "addGateway": "+ ゲートウェイを追加", + "connected": "接続済み", + "disconnected": "切断済み", + "noActiveConnection": "アクティブな接続なし", + "loadingGateways": "ゲートウェイを読み込み中...", + "noGateways": "ゲートウェイが設定されていません", + "addGatewayHint": "ゲートウェイを追加して接続の管理を開始", + "discoveredGateways": "検出されたゲートウェイ", + "discoveredGatewaysDesc": "このマシンで見つかった OpenClaw ゲートウェイ", + "refresh": "更新", + "running": "実行中", + "stopped": "停止済み", + "bind": "バインド", + "mode": "モード", + "register": "登録", + "directCliConnections": "直接 CLI 接続", + "directCliDesc": "ゲートウェイなしで直接接続された CLI ツール", + "noDirectConnections": "直接 CLI 接続なし", + "useApiConnect": "使用", + "toRegisterCli": "で CLI ツールを登録", + "role": "ロール", + "heartbeat": "ハートビート", + "never": "なし", + "disconnect": "切断", + "neverProbed": "未探索", + "primary": "プライマリ", + "connectedBadge": "接続済み", + "token": "トークン", + "tokenSet": "設定済み", + "tokenNone": "なし", + "latency": "レイテンシ", + "last": "最終", + "gatewayVersion": "ゲートウェイバージョン", + "noHistory": "履歴なし", + "colorKey": "カラーキー", + "colorKeyTitle": "緑=オンライン;琥珀=エラー;赤=オフライン", + "lastLatency": "最終レイテンシ:{ms}ms", + "probeGateway": "ゲートウェイを探索", + "probing": "探索中...", + "probe": "探索", + "connectToGateway": "このゲートウェイに接続", + "connect": "接続", + "setPrimaryTitle": "プライマリに設定", + "setPrimary": "プライマリに設定", + "removeGateway": "ゲートウェイを削除", + "addGatewayTitle": "ゲートウェイを追加", + "name": "名前", + "namePlaceholder": "例:primary", + "host": "ホスト", + "port": "ポート", + "tokenField": "トークン", + "optional": "任意", + "cancel": "キャンセル", + "adding": "追加中...", + "addGatewaySubmit": "ゲートウェイを追加", + "failedToAdd": "ゲートウェイの追加に失敗しました", + "networkError": "ネットワークエラー" + }, + "nodes": { + "title": "ノード / インスタンス", + "gatewayConnected": "ゲートウェイ接続済み", + "gatewayUnreachable": "ゲートウェイ到達不可", + "tabInstances": "インスタンス ({count})", + "tabDevices": "デバイス ({count})", + "loading": "読み込み中...", + "noInstances": "アクティブなインスタンスがありません。ノードがゲートウェイに接続するとここに表示されます。", + "colName": "名前", + "colClientId": "クライアント ID", + "colPlatform": "プラットフォーム", + "colVersion": "バージョン", + "colRoles": "ロール", + "colStatus": "ステータス", + "colConnected": "接続日時", + "colLastActivity": "最終アクティビティ", + "colHostIp": "ホスト / IP", + "colDeviceId": "デバイス ID", + "colPaired": "ペアリング日時", + "colLastSeen": "最終確認", + "colTrust": "信頼", + "colActions": "操作", + "pendingPairingRequests": "保留中のペアリングリクエスト ({count})", + "approve": "承認", + "approving": "承認中...", + "reject": "拒否", + "rejecting": "拒否中...", + "noPairedDevices": "ペアリング済みデバイスがありません。", + "pairedDevices": "ペアリング済みデバイス ({count})", + "trusted": "信頼済み", + "untrusted": "未信頼", + "rotateToken": "トークンをローテート", + "revokeConfirm": "失効しますか?", + "yes": "はい", + "no": "いいえ", + "revoke": "失効", + "hideTokens": "トークンを非表示", + "tokens": "トークン ({count})", + "tokenUsed": "{time} に使用", + "revoked": "失効済み", + "rotate": "ローテート" + }, + "activityFeed": { + "title": "アクティビティ", + "live": "ライブ", + "paused": "一時停止", + "refresh": "更新", + "filterAgent": "エージェント", + "filterAll": "すべて", + "filterType": "タイプ", + "allTypes": "すべてのタイプ", + "filterLimit": "表示件数", + "loadingActivities": "アクティビティを読み込み中", + "noActivities": "アクティビティが見つかりません", + "noActivityForAgent": "{agent} のアクティビティが記録されていません", + "tryAdjustingFilters": "フィルターを調整してみてください", + "entityTask": "タスク:", + "entityCommentOn": "コメント先:", + "entityAgent": "エージェント:", + "showDetails": "詳細を表示", + "activeSessions": "アクティブセッション", + "agentStatus": "ステータス", + "lastSeen": "最終確認", + "lastAction": "最終アクション", + "tasksAssigned": "割り当てタスク", + "inProgress": "進行中", + "completed": "完了", + "events": "{count} 件のイベント", + "newer": "新しい", + "older": "古い", + "pageOf": "{page} / {total} ページ", + "footerAgentEvents": "{agent} の {total} 件のイベント", + "footerShowing": "{count} 件のアクティビティを表示{filtered}", + "filtered": "(フィルター済み)", + "lastUpdated": "最終更新:{time}" + }, + "standup": { + "title": "デイリースタンドアップ", + "viewCurrent": "現在", + "viewHistory": "履歴", + "generating": "生成中...", + "generate": "生成", + "export": "エクスポート", + "standupFor": "{date} のスタンドアップ", + "generatedOn": "{date} に生成", + "statCompleted": "完了", + "statInProgress": "進行中", + "statBlocked": "ブロック中", + "statOverdue": "期限超過", + "teamAccomplishments": "チームの成果", + "teamBlockers": "チームのブロッカー", + "overdueTasks": "期限超過タスク", + "unassigned": "未割り当て", + "individualReports": "個別レポート", + "activitySummary": "アクティビティ:{actions} 件のアクション、{comments} 件のコメント", + "sectionCompleted": "完了 ({count})", + "sectionInProgress": "進行中 ({count})", + "sectionAssigned": "割り当て済み ({count})", + "sectionBlocked": "ブロック中 ({count})", + "none": "なし", + "noStandupGenerated": "スタンドアップが生成されていません", + "selectDatePrompt": "日付を選択してレポートを生成してください", + "generateToday": "今日のスタンドアップを生成", + "noHistory": "スタンドアップの履歴が見つかりません", + "historyGenerated": "生成日時:{date}", + "historyAgentsParticipated": "{count} 人のエージェントが参加", + "historyCompleted": "完了:{count}", + "historyInProgress": "進行中:{count}", + "historyBlocked": "ブロック中:{count}" + }, + "webhooks": { + "title": "Webhook", + "configured": "{count} 件の Webhook が設定済み", + "addWebhook": "+ Webhook を追加", + "secretLabel": "Webhook シークレット(今すぐ保存 - 一度しか表示されません)", + "dismiss": "閉じる", + "testSuccessful": "テスト成功", + "testFailed": "テスト失敗", + "testStatus": "ステータス:", + "testDuration": "所要時間:", + "testError": "エラー:", + "localAutomations": "ローカル Webhook 自動化", + "localAutomationsDesc": "Webhook 配信とリトライをサポートするローカルスケジューラタスク", + "nextRun": "次回実行 {time}", + "noNextRun": "次回実行は未設定", + "running": "実行中...", + "run": "実行", + "noWebhooks": "Webhook が設定されていません", + "noWebhooksDesc": "イベントの HTTP 通知を受け取るために Webhook を追加してください", + "allEvents": "すべてのイベント", + "eventCount": "{count} 件のイベント", + "deliveries": "{count} 件の配信", + "failed": "{count} 件失敗", + "lastFired": "最終発火 {time}", + "sendTestEvent": "テストイベントを送信", + "testing": "テスト中...", + "test": "テスト", + "disable": "無効化", + "enable": "有効化", + "delete": "削除", + "recentDeliveries": "最近の配信", + "noDeliveries": "配信記録がありません", + "newWebhook": "新しい Webhook", + "formName": "名前", + "formUrl": "URL", + "formEvents": "イベント", + "cancel": "キャンセル", + "createWebhook": "Webhook を作成" + }, + "skills": { + "title": "スキルハブ", + "subtitle": "スキルをローカルで管理し、外部レジストリを閲覧します。", + "localMode": "ローカルモード", + "gatewayMode": "ゲートウェイモード", + "tabInstalled": "インストール済み", + "tabRegistry": "レジストリ", + "searchPlaceholder": "インストール済みスキルを検索...", + "searchResults": "「{query}」に一致するスキルを {total} 件中 {count} 件表示", + "diskSyncActive": "双方向ディスク同期が有効(スケジューラが 60 秒ごとに同期)", + "scanAll": "すべてスキャン", + "scanningProgress": "スキャン中 {done}/{total}...", + "refreshNow": "今すぐ更新", + "scanning": "スキャン中:", + "skillsScanned": "{count} 件のスキルをスキャン済み", + "dismiss": "閉じる", + "addSkill": "スキルを追加", + "initialContent": "初期 SKILL.md の内容", + "loadingSkills": "スキルを読み込み中...", + "skillCount": "{total} 件中 {count} 件のスキル", + "noMatch": "このフィルターに一致するスキルがありません。", + "scan": "スキャン", + "view": "表示", + "registrySearchPlaceholder": "スキルを検索...", + "searching": "検索中...", + "search": "検索", + "installTo": "インストール先:", + "installing": "インストール中...", + "install": "インストール", + "noRegistryResults": "{registry} で「{query}」の結果が見つかりませんでした。別のクエリを試すかレジストリを切り替えてください。", + "registryPrompt": "ClawdHub、skills.sh、または Awesome OpenClaw を検索してエージェントスキルを見つけてインストールします。", + "skillInstalled": "スキルをインストールしました", + "installFailed": "インストール失敗", + "installingSkill": "スキルをインストール中", + "stepFetching": "レジストリから SKILL.md を取得中", + "stepScanning": "セキュリティスキャンを実行中", + "stepWriting": "ディスクに書き込み&登録中", + "security": "セキュリティ", + "viewInstalled": "インストール済みを表示", + "done": "完了", + "close": "閉じる", + "delete": "削除", + "save": "保存", + "loadingSkillContent": "SKILL.md を読み込み中...", + "noContent": "コンテンツがありません。" + }, + "orchestration": { + "tabCommand": "コマンド", + "tabWorkflows": "ワークフロー", + "tabPipelines": "パイプライン", + "tabFleet": "フリート", + "selectAgent": "エージェントを選択...", + "commandPlaceholder": "エージェントにコマンドまたはメッセージを送信...", + "send": "送信", + "noTemplates": "ワークフローテンプレートがありません", + "createFirstTemplate": "最初のテンプレートを作成", + "cancel": "キャンセル", + "new": "+ 新規", + "editTemplate": "テンプレートを編集", + "newTemplate": "新しいテンプレート", + "templateName": "テンプレート名", + "templateDescription": "説明(任意)", + "taskPromptPlaceholder": "エージェントへのタスクプロンプト...", + "timeout": "タイムアウト", + "role": "ロール", + "lastRun": "最終実行", + "update": "更新", + "save": "保存", + "totalAgents": "エージェント総数", + "online": "オンライン", + "busy": "稼働中", + "errors": "エラー" + } +} diff --git a/messages/ko.json b/messages/ko.json new file mode 100644 index 0000000000000000000000000000000000000000..a323a4564928206148c053fd822cf5855495ab85 --- /dev/null +++ b/messages/ko.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "저장", + "cancel": "취소", + "loading": "로딩 중...", + "error": "오류", + "search": "검색", + "confirm": "확인", + "delete": "삭제", + "edit": "편집", + "close": "닫기", + "back": "뒤로", + "next": "다음", + "retry": "재시도", + "or": "또는", + "optional": "선택 사항", + "language": "언어", + "dismiss": "닫기", + "continue": "계속", + "selected": "선택됨", + "detected": "감지됨", + "now": "지금", + "tryAgain": "다시 시도", + "skipToMainContent": "본문으로 건너뛰기", + "builtWithCareBy": "정성껏 만든", + "viewRelease": "릴리스 보기", + "updateNow": "지금 업데이트", + "showDetails": "상세 보기", + "hideDetails": "상세 숨기기", + "moreIssues": "+ {count}개 더 많은 문제" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "계속하려면 로그인하세요", + "username": "사용자 이름", + "password": "비밀번호", + "signIn": "로그인", + "signingIn": "로그인 중...", + "signInWithGoogle": "Google로 로그인", + "loadingGoogleSignIn": "Google 로그인 로딩 중...", + "googleSignInFailed": "Google 로그인 실패", + "networkError": "네트워크 오류", + "loginFailed": "로그인 실패", + "enterUsername": "사용자 이름 입력", + "enterPassword": "비밀번호 입력", + "orchestrationTagline": "OpenClaw 에이전트 오케스트레이션", + "accessRequestSubmitted": "접근 요청이 제출되었습니다", + "accessRequestDescription": "요청이 관리자에게 전송되었습니다. 승인 후 로그인할 수 있습니다.", + "tryAgain": "다시 시도", + "noAdminAccount": "아직 관리자 계정이 생성되지 않았습니다", + "noAdminDescription": "Mission Control을 시작하려면 관리자 계정을 설정하세요.", + "createAdminAccount": "관리자 계정 만들기", + "welcomeToMC": "Mission Control에 오신 것을 환영합니다", + "settingUpMC": "Mission Control 설정 중", + "createAdminToStart": "시작하려면 관리자 계정을 만드세요", + "creatingAdmin": "관리자 계정 생성 중...", + "displayName": "표시 이름", + "confirmPassword": "비밀번호 확인", + "atLeast12Chars": "최소 12자", + "repeatPassword": "비밀번호를 다시 입력하세요", + "passwordsDoNotMatch": "비밀번호가 일치하지 않습니다", + "passwordTooShort": "비밀번호는 최소 12자 이상이어야 합니다", + "moreCharsNeeded": "{count}자 더 필요합니다", + "firstTimeSetupOnly": "이 페이지는 초기 설정 시에만 사용할 수 있습니다.", + "checkingSetupStatus": "설정 상태 확인 중...", + "setupFailed": "설정 실패", + "failedToCheckSetup": "설정 상태 확인에 실패했습니다", + "validatingCredentials": "자격 증명 확인 중", + "creatingAdminAccount": "관리자 계정 생성 중", + "configuringSession": "세션 구성 중", + "launchingDashboard": "대시보드 시작 중", + "usernameHint": "소문자, 숫자, 점, 하이픈, 밑줄만 사용 가능" + }, + "nav": { + "overview": "개요", + "agents": "에이전트", + "tasks": "작업", + "chat": "채팅", + "channels": "채널", + "skills": "스킬", + "memory": "메모리", + "activity": "활동", + "logs": "로그", + "costTracker": "비용 추적", + "nodes": "노드", + "approvals": "승인", + "office": "오피스", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "알림", + "github": "GitHub", + "security": "보안", + "users": "사용자", + "audit": "감사", + "gateway": "게이트웨이", + "gateways": "게이트웨이", + "config": "설정", + "integrations": "통합", + "debug": "디버그", + "settings": "설정", + "group": { + "observe": "모니터링", + "automate": "자동화", + "admin": "관리" + }, + "collapseSidebar": "사이드바 접기", + "expandSidebar": "사이드바 펼치기", + "more": "더 보기" + }, + "settings": { + "language": "언어", + "languageDescription": "선호하는 표시 언어를 선택하세요", + "general": "일반", + "security": "보안", + "dataRetention": "데이터 보존", + "chatSettings": "채팅", + "gatewaySettings": "게이트웨이", + "title": "설정", + "description": "Mission Control 동작 및 데이터 보존 정책 구성", + "discard": "버리기", + "save": "저장", + "saving": "저장 중...", + "saveChanges": "변경사항 저장", + "workspaceManagementLabel": "워크스페이스 관리:", + "workspaceManagementDesc1": "워크스페이스(테넌트 인스턴스)를 만들거나 관리하려면", + "superAdmin": "슈퍼 관리자", + "workspaceManagementDesc2": "패널(사이드바의 관리자 > 슈퍼 관리자)로 이동하세요. 거기서 새 클라이언트 인스턴스를 만들고 테넌트를 관리하며 프로비저닝 작업을 모니터링할 수 있습니다.", + "securityDescription": "스테이션 보안 상태 스캔", + "securityScan": "보안 스캔", + "hideScan": "스캔 숨기기", + "backups": "백업", + "backupsDescription": "MC 데이터베이스 또는 게이트웨이 상태의 주문형 백업 생성", + "backupMcDatabase": "MC 데이터베이스 백업", + "backupGatewayState": "게이트웨이 상태 백업", + "backingUp": "백업 중...", + "onboarding": "온보딩", + "onboardingDescription": "설정 마법사를 다시 실행하고 대시보드 체크리스트를 초기화합니다", + "replayOnboarding": "온보딩 다시 실행", + "resetting": "초기화 중..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "에이전트 오케스트레이션", + "authenticatingOperator": "운영자 인증 중", + "detectingStationMode": "스테이션 모드 감지 중", + "loadingControlConfig": "제어 설정 로딩 중", + "connectingRuntimeLinks": "런타임 링크 연결 중", + "syncingAgentRegistry": "에이전트 레지스트리 동기화 중", + "loadingActiveSessions": "활성 세션 로딩 중", + "hydratingWorkspaceBoard": "워크스페이스 보드 초기화 중", + "mappingMemoryGraph": "메모리 그래프 매핑 중", + "indexingSkillCatalog": "스킬 카탈로그 인덱싱 중" + }, + "header": { + "workspace": "워크스페이스", + "sessions": "세션", + "events": "이벤트", + "live": "라이브", + "off": "꺼짐", + "local": "로컬", + "connected": "연결됨", + "disconnected": "연결 끊김", + "reconnecting": "재연결 중", + "offline": "오프라인", + "retry": "재시도 {count}", + "jumpToSearch": "페이지, 작업, 에이전트로 이동...", + "searchPlaceholder": "작업, 에이전트, 활동 검색 또는 페이지 명령 입력...", + "searching": "검색 중...", + "noResults": "결과를 찾을 수 없습니다", + "typeToSearch": "입력하여 엔티티 검색 또는 페이지로 즉시 이동", + "gatewayConnection": "게이트웨이 연결", + "status": "상태", + "host": "호스트", + "latency": "지연 시간", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "재시도 횟수", + "clickToReconnect": "클릭하여 재연결", + "down": "다운", + "goToOverview": "개요로 이동", + "goToChat": "채팅으로 이동", + "goToTasks": "작업으로 이동", + "goToAgents": "에이전트로 이동", + "goToActivityFeed": "활동 피드로 이동", + "goToNotifications": "알림으로 이동", + "goToTokenUsage": "토큰 사용량으로 이동", + "goToLogs": "로그로 이동", + "goToMemoryBrowser": "메모리 브라우저로 이동", + "goToIntegrations": "통합으로 이동", + "goToSettings": "설정으로 이동", + "goToGateways": "게이트웨이로 이동", + "goToGithubSync": "GitHub 동기화로 이동", + "goToOffice": "오피스로 이동", + "goToSkills": "스킬로 이동", + "quickNavigation": "빠른 탐색" + }, + "contextSwitcher": { + "localMode": "로컬 모드", + "connected": "연결됨", + "disconnected": "연결 끊김", + "interface": "인터페이스", + "essential": "에센셜", + "full": "전체", + "organizations": "조직", + "all": "전체", + "noTools": "도구 없음", + "unlinked": "미연결", + "newOrganization": "새 조직...", + "usernamePlaceholder": "사용자 이름 (OS 사용자)", + "displayNamePlaceholder": "표시 이름", + "gatewayPortPlaceholder": "게이트웨이 포트 (필수)", + "installTools": "도구 설치", + "usernameAndDisplayRequired": "사용자 이름과 표시 이름은 필수입니다", + "invalidUsernameFormat": "잘못된 사용자 이름 형식", + "gatewayPortRequired": "게이트웨이 포트는 필수입니다", + "creating": "생성 중...", + "createUser": "사용자 만들기", + "createAndQueue": "만들기 + 대기열 추가" + }, + "localModeBanner": { + "noGatewayDetected": "OpenClaw 게이트웨이가 감지되지 않음", + "runningInLocalMode": " — 로컬 모드로 실행 중. Claude Code 세션, 작업 및 로컬 데이터를 모니터링합니다.", + "configureGateway": "게이트웨이 설정" + }, + "updateBanner": { + "updating": "업데이트 중...", + "restartingServer": "서버 재시작 중...", + "updateAvailable": "업데이트 가능: v{version}", + "newerVersionAvailable": " — Mission Control의 새 버전을 사용할 수 있습니다.", + "updateFailed": "업데이트 실패", + "networkError": "네트워크 오류 — 서버에 연결할 수 없습니다." + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "OpenClaw 업데이트 중...", + "openclawUpdated": "OpenClaw가 v{version}으로 업데이트되었습니다", + "openclawUpdateAvailable": "OpenClaw 업데이트: v{version} 사용 가능", + "installed": "설치됨: v{version}", + "changelog": "변경 로그", + "copied": "복사됨!", + "copyCommand": "명령 복사", + "updateFailed": "업데이트 실패", + "networkError": "네트워크 오류 — 서버에 연결할 수 없습니다." + }, + "doctorBanner": { + "fixCompleted": "OpenClaw 닥터 수정 완료", + "configDrift": "OpenClaw 설정 드리프트 감지됨", + "stateIntegrity": "OpenClaw 상태 무결성 경고", + "securityWarning": "OpenClaw 보안 경고", + "doctorWarnings": "OpenClaw 닥터 경고", + "runningFixes": "OpenClaw 닥터 수정 실행 중...", + "cleaningSessionStores": "세션 저장소 정리 중...", + "archivingOrphanTranscripts": "고아 트랜스크립트 보관 중...", + "recheckingHealth": "현재 인스턴스 상태 재확인 중...", + "fixFailed": "OpenClaw 닥터 수정 실패", + "networkError": "네트워크 오류 — 서버에 연결할 수 없습니다.", + "runningFix": "수정 실행 중...", + "runDoctorFix": "닥터 수정 실행" + }, + "liveFeed": { + "liveFeed": "라이브 피드", + "showLiveFeed": "라이브 피드 보기", + "collapseFeed": "피드 접기", + "closeFeed": "피드 닫기", + "noActivityYet": "아직 활동이 없습니다", + "eventsAppearLocal": "작업을 생성하거나 에이전트가 업데이트되면 이벤트가 표시됩니다", + "eventsStreamGateway": "게이트웨이와 로컬 DB에서 이벤트가 스트리밍됩니다", + "activeSessions": "활성 세션", + "noActiveSessions": "활성 세션 없음", + "activeSession": "활성", + "idleSession": "유휴" + }, + "errorBoundary": { + "somethingWentWrong": "문제가 발생했습니다", + "unexpectedError": "이 패널에서 예기치 않은 오류가 발생했습니다." + }, + "page": { + "showLiveFeed": "라이브 피드 보기", + "availableInFullMode": "{panel}은(는) 전체 모드에서 사용할 수 있습니다.", + "switchToFull": "전체 모드로 전환", + "goToOverview": "개요로 이동", + "requiresGateway": "{panel}은(는) OpenClaw 게이트웨이 연결이 필요합니다.", + "configureGateway": "이 패널을 활성화하려면 게이트웨이를 설정하세요." + }, + "onboarding": { + "stationOnline": "스테이션 온라인", + "stationReady": "스테이션이 에이전트를 받을 준비가 되었습니다.", + "welcome": { + "title": "Mission Control에 오신 것을 환영합니다", + "description": "AI 에이전트를 위한 스테이션입니다. 에이전트가 여기에 도킹하면 영구 메모리, 작업 관리, 협업 워크플로, 완전한 관측성을 얻게 됩니다. 설정을 스캔했습니다 — 온라인 상태는 다음과 같습니다.", + "availableModes": "사용 가능한 모드", + "localMode": "로컬 모드", + "gatewayMode": "게이트웨이 모드", + "monitorClaude": "이 머신의 Claude Code 세션 모니터링", + "taskTracking": "작업 추적 및 비용 모니터링", + "sessionHistory": "세션 기록", + "singlePilot": "단일 파일럿 운영", + "orchestrateAgents": "여러 머신의 에이전트 오케스트레이션", + "memorySkills": "메모리, 스킬, 에이전트 간 통신", + "webhookIntegrations": "Webhook 통합", + "requiresGateway": "게이트웨이 필요", + "activeSessionsDetected": "{count}개의 활성 세션 감지됨", + "noActiveSessions": "활성 Claude 세션 없음", + "gatewayConnected": "게이트웨이 연결됨", + "localModeNoGateway": "로컬 모드 — 게이트웨이 없음", + "agentsRegistered": "{count}개의 에이전트 등록됨", + "noAgentsYet": "아직 에이전트 없음", + "gatewayRegistered": "게이트웨이: Mission Control 등록됨", + "gatewayRegistrationPending": "게이트웨이 등록 대기 중", + "skipSetup": "설정 건너뛰기", + "getStarted": "시작하기" + }, + "interfaceMode": { + "title": "스테이션 레이아웃 선택", + "description": "에센셜은 운영자가 가장 많이 사용하는 핵심 패널을 표시합니다. 전체는 스테이션의 모든 시스템을 잠금 해제합니다 — 메모리, 자동화, 보안 감사 등. 언제든지 전환할 수 있습니다.", + "essential": "에센셜", + "full": "전체", + "essentialDescription": "간결한 운영 — 매일 사용하는 패널: 플릿 개요, 에이전트, 작업, 채팅, 활동 피드, 로그, 설정.", + "essentialPanels1": "플릿 개요, 에이전트, 작업, 채팅", + "essentialPanels2": "활동 피드, 로그, 설정", + "essentialTotal": "총 7개 패널", + "fullDescription": "전체 스테이션 액세스 — 메모리 브라우저, Cron 스케줄링, Webhooks, 알림, 보안 감사, 비용 추적, 게이트웨이 설정을 추가합니다.", + "fullIncludes": "에센셜의 모든 것에 추가로", + "fullPanels": "메모리, Cron, Webhooks, 감사", + "fullTotal": "모든 스테이션 시스템 잠금 해제" + }, + "gatewayLink": { + "title": "게이트웨이 링크", + "description": "Mission Control은 오리진을 OpenClaw 게이트웨이에 등록하여 WebSocket을 통해 연결하고 에이전트를 원격으로 관리할 수 있습니다.", + "originRegistered": "게이트웨이 오리진 등록됨", + "originAdded": "Mission Control 오리진이 게이트웨이 allowedOrigins에 추가됨", + "registrationPending": "등록 대기 중 — 다음 기능 확인 시 설정됩니다", + "deviceAuthConfigured": "장치 인증 설정됨", + "deviceAuthDisabled": "장치 인증 비활성화 — MC는 게이트웨이 토큰으로 인증합니다", + "deviceAuthWillConfigure": "오리진 등록과 함께 설정됩니다", + "testing": "테스트 중...", + "testConnection": "연결 테스트", + "gatewayReachable": "게이트웨이 도달 가능", + "gatewayUnreachable": "게이트웨이 도달 불가" + }, + "credentials": { + "title": "스테이션 보안 설정", + "description": "관리자 비밀번호는 스테이션 콘솔을 보호합니다. API 키는 도킹 자격 증명입니다 — 에이전트가 등록 시 이를 제시하여 인가된 에이전트만 도킹할 수 있습니다.", + "checkingCredentials": "자격 증명 확인 중...", + "adminPassword": "관리자 비밀번호", + "passwordStrong": "비밀번호가 강력하며 기본값이 아닙니다", + "passwordWeak": "기본 또는 약한 비밀번호 사용 중 — .env에서 AUTH_PASS를 변경하세요", + "apiKey": "API 키", + "apiKeyConfigured": "설정됨 — 에이전트가 이 키로 도킹할 수 있습니다", + "apiKeyNotSet": "미설정 — 키가 설정되지 않으면 에이전트가 도킹할 수 없습니다. 실행: bash scripts/generate-env.sh --force", + "openSettings": "설정 열기", + "securityScan": "보안 스캔", + "securityScanDescription": "스테이션 시작 전에 네트워크, 런타임, OpenClaw 강화를 검증합니다.", + "launchStation": "스테이션 시작", + "launchAnyway": "그래도 시작" + } + }, + "channels": { + "title": "채널", + "loadingChannels": "채널 불러오는 중...", + "gatewayConnected": "게이트웨이 연결됨", + "gatewayDisconnected": "게이트웨이 연결 끊김", + "refresh": "새로고침", + "noChannelsConfigured": "아직 채널이 설정되지 않았습니다. OpenClaw 게이트웨이 설정에서 메시징 플랫폼(WhatsApp, Telegram, Discord, Slack 등)을 구성하세요.", + "gatewayUnreachable": "OpenClaw 게이트웨이에 접근할 수 없습니다. 실행 중인지 확인하세요.", + "statusConnected": "연결됨", + "statusRunning": "실행 중", + "statusConfigured": "설정됨", + "statusInactive": "비활성", + "probe": "프로브", + "probing": "프로브 중...", + "showQr": "QR 코드 표시", + "relink": "재연결", + "waitForScan": "스캔 대기", + "logout": "로그아웃", + "loggedOut": "로그아웃되었습니다.", + "profile": "프로필", + "editProfile": "프로필 편집", + "edit": "편집", + "noProfileSet": "프로필 미설정", + "displayName": "표시 이름", + "username": "사용자 이름", + "about": "소개", + "bio": "자기소개", + "avatarUrl": "아바타 URL", + "bannerUrl": "배너 URL", + "website": "웹사이트", + "lightning": "라이트닝", + "saving": "저장 중...", + "saveAndPublish": "저장 및 게시", + "importFromRelays": "릴레이에서 가져오기", + "hideAdvanced": "고급 숨기기", + "showAdvanced": "고급 보기", + "cancel": "취소", + "profilePublished": "프로필이 릴레이에 게시되었습니다.", + "saveFailed": "저장에 실패했습니다.", + "profileImported": "릴레이에서 프로필을 가져왔습니다.", + "importFailed": "가져오기에 실패했습니다.", + "accounts": "계정({count})" + }, + "integrations": { + "title": "통합", + "loading": "통합 불러오는 중...", + "connectedCount": "{total}개 중 {connected}개 연결됨", + "pullAll": "전체 가져오기", + "discard": "버리기", + "save": "저장", + "saving": "저장 중...", + "saveChanges": "변경사항 저장", + "cancel": "취소", + "remove": "제거", + "removeTitle": "통합을 제거하시겠습니까?", + "removeDescription": ".env 파일에서 {target}을(를) 제거합니다. 변경사항 적용을 위해 게이트웨이를 재시작해야 합니다.", + "notSet": "미설정", + "noIntegrationsInCategory": "이 카테고리에 통합이 없습니다" + }, + "execApproval": { + "title": "실행 승인", + "pendingBadge": "{count}개 대기 중", + "realtimeLabel": "WebSocket을 통한 실시간", + "viewApprovals": "승인", + "viewAllowlist": "허용 목록 설정", + "filterAll": "전체", + "filterPending": "대기 중", + "filterResolved": "처리됨", + "noPendingApprovals": "대기 중인 승인이 없습니다. 에이전트의 실행 요청이 오버레이로 여기에 표시됩니다.", + "noApprovals": "표시할 승인이 없습니다.", + "loadingAllowlist": "허용 목록 불러오는 중...", + "addAgent": "에이전트 추가", + "save": "저장", + "saving": "저장 중...", + "reload": "다시 불러오기", + "noAgentsConfigured": "에이전트가 설정되지 않았습니다. 위에 에이전트 ID를 입력하여 허용 목록을 만드세요.", + "addPattern": "패턴 추가", + "noAllowlistPatterns": "허용 목록 패턴이 없습니다. 명령은 수동 승인이 필요합니다.", + "previewMatches": "미리보기: 최근 명령 {count}개가 일치합니다", + "andMore": "...외 {count}개", + "allowOnce": "한 번 허용", + "alwaysAllow": "항상 허용", + "deny": "거부", + "statusExpired": "만료됨", + "statusApproved": "승인됨", + "statusDenied": "거부됨" + }, + "notifications": { + "title": "알림", + "markAllRead": "모두 읽음으로 표시", + "recipientLabel": "수신자", + "recipientPlaceholder": "에이전트 이름 (예: my-agent)", + "noNotifications": "알림 없음", + "markRead": "읽음으로 표시" + }, + "localAgentsDoc": { + "title": "로컬 AGENTS.md", + "noPathFound": "로컬 AGENTS.md를 아직 찾을 수 없습니다", + "openInVsCode": "VS Code에서 열기", + "copied": "복사됨", + "copyPath": "경로 복사", + "collapse": "접기", + "expand": "펼치기", + "loading": "로컬 AGENTS.md 불러오는 중...", + "notDetected": "로컬 AGENTS.md가 감지되지 않았습니다.", + "checked": "확인됨: {paths}" + }, + "memoryGraph": { + "loading": "그래프 불러오는 중...", + "retry": "다시 시도", + "noMemoryDatabases": "메모리 데이터베이스를 찾을 수 없습니다", + "noMemoryDatabasesHint": "OpenClaw 메모리 SQLite 파일이 감지되지 않았습니다", + "allAgents": "모든 에이전트", + "filterFiles": "파일 필터...", + "statAgents": "에이전트", + "statFiles": "파일", + "statChunks": "청크", + "statSize": "크기", + "legendSessions": "세션", + "legendMemory": "메모리", + "legendKnowledge": "지식", + "keyboardHint": "스크롤로 확대/축소 / 드래그로 이동 / 노드 클릭으로 상세 보기", + "chunks": "청크", + "text": "텍스트" + }, + "agentComms": { + "connecting": "피드에 연결 중...", + "eventsCount": "{count}개 이벤트", + "connectionGateway": "게이트웨이", + "connectionSse": "SSE", + "connectionPolling": "폴링", + "sourceLive": "라이브", + "sourceMixed": "혼합", + "sourceSeeded": "시드됨", + "sessions": "{active}/{total}개 세션", + "scrollToLatest": "최신으로 스크롤", + "toLabel": "수신자:", + "composerPlaceholderTarget": "{name}에게 메시지... (Enter로 전송)", + "composerPlaceholderBroadcast": "위에서 세션 또는 에이전트를 선택하거나 브로드캐스트를 입력하세요...", + "send": "전송", + "noFeedEvents": "피드 이벤트가 없습니다", + "noFilterEvents": "{filter} 이벤트가 없습니다", + "noFeedEventsHint": "게이트웨이에 연결하거나 에이전트 활동을 기다리세요. 세션, 도구, 채팅 및 추적 이벤트가 실시간으로 스트리밍됩니다.", + "noFilterEventsHint": "다른 카테고리 이벤트를 보려면 \"전체\"로 전환하거나, {filter} 이벤트가 도착할 때까지 기다리세요." + }, + "agentDetail": { + "configTab": "설정", + "filesTab": "파일", + "toolsTab": "도구", + "channelsTab": "채널", + "cronTab": "크론", + "modelsTab": "모델", + "workspaceFiles": "워크스페이스 파일", + "refresh": "새로 고침", + "charCount": "{count}자", + "missing": "없음", + "selectFileToView": "파일을 선택하여 보기 또는 편집", + "reset": "초기화", + "saving": "저장 중...", + "save": "저장", + "fileNotExistYet": "이 파일은 아직 존재하지 않습니다. 내용을 입력하고 저장하면 생성할 수 있습니다.", + "toolConfiguration": "도구 설정", + "profile": "프로필:", + "saved": "저장됨", + "allowListCount": "허용 목록 ({count})", + "noAllowList": "명시적 허용 목록 없음 (프로필 기본값 사용)", + "addToolAllowList": "허용 목록에 도구 추가", + "add": "추가", + "alsoAllowCount": "추가 허용 ({count})", + "alsoAllowDesc": "프로필 기본값 외에 추가로 허용되는 도구.", + "none": "없음", + "denyListCount": "거부 목록 ({count})", + "noDeniedTools": "거부된 도구 없음", + "addToolDenyList": "거부 목록에 도구 추가", + "channelStatus": "채널 상태", + "channelStatusDesc": "{agent}에서 사용 가능한 채널", + "noChannelsFound": "채널을 찾을 수 없습니다...", + "connectedOf": "{total}개 중 {connected}개 연결됨", + "noAccounts": "계정 없음", + "configuredCount": "{count}개 설정됨", + "notConfigured": "설정되지 않음", + "enabledCount": "{count}개 활성화됨", + "disabled": "비활성화됨", + "cronJobs": "크론 작업", + "allCronJobsCount": "{total}개 중 {count}개", + "agentCronJobsCount": "{total}개 중 {count}개", + "agentOnly": "에이전트만", + "showAll": "전체 보기", + "noCronJobsFound": "크론 작업을 찾을 수 없습니다", + "noCronJobsAssigned": "{agent}에 할당된 크론 작업이 없습니다", + "noSchedule": "일정 없음", + "enabled": "활성화됨", + "lastRun": "마지막:", + "nextRun": "다음:", + "modelConfiguration": "모델 설정", + "modelConfigDesc": "이 에이전트의 기본 모델과 폴백 모델을 설정합니다.", + "primaryModel": "기본 모델", + "defaultModel": "기본값", + "fallbackChainCount": "폴백 체인 ({count})", + "fallbackChainDesc": "기본 모델이 실패하거나 사용할 수 없을 때 순서대로 시도되는 모델.", + "noFallbackModels": "폴백 모델이 설정되지 않았습니다.", + "moveUp": "위로 이동", + "moveDown": "아래로 이동", + "remove": "제거", + "addFallbackPlaceholder": "폴백 모델 추가", + "sandboxMode": "모드", + "sandboxWorkspace": "워크스페이스", + "sandboxNetwork": "네트워크", + "sandboxNetworkPlaceholder": "예: none, host", + "toolsSection": "도구", + "subAgentsSection": "서브 에이전트", + "addSubAgentPlaceholder": "서브 에이전트 추가", + "addSubAgent": "추가", + "subAgentModelOverride": "서브 에이전트 모델 재정의", + "defaultInherit": "기본값 (상속)", + "modelLabel": "모델:", + "noSubAgents": "서브 에이전트가 설정되지 않았습니다.", + "memorySearch": "메모리 검색", + "cancel": "취소" + }, + "taskBoard": { + "title": "작업 보드", + "allProjects": "모든 프로젝트", + "projects": "프로젝트", + "close": "닫기", + "spawnSubAgent": "서브 에이전트 생성", + "newTask": "새 작업", + "refresh": "새로 고침", + "spawnAgentPlaceholder": "에이전트 이름", + "spawnTaskPlaceholder": "작업 설명", + "timeoutTitle": "타임아웃 (분)", + "spawning": "생성 중...", + "spawn": "생성", + "noActiveSpawnRequests": "활성 생성 요청 없음", + "dismissError": "오류 닫기", + "taskBoardAriaLabel": "작업 보드", + "columnAriaLabel": "{title} 열, {count}개 작업", + "colInbox": "받은 편지함", + "colAssigned": "할당됨", + "colInProgress": "진행 중", + "colReview": "검토", + "colQualityReview": "품질 검토", + "colDone": "완료", + "recurring": "반복", + "spawned": "생성됨", + "spawnedFromTask": "작업 #{id}에서 생성됨", + "unassigned": "미할당", + "due": "마감:", + "dropTasksHere": "여기에 작업 드롭", + "priority_low": "낮음", + "priority_medium": "보통", + "priority_high": "높음", + "priority_critical": "긴급", + "claudeCodeTasks": "Claude Code 작업", + "collapse": "접기", + "expand": "펼치기", + "loading": "로딩 중...", + "noTeamTasksFound": "팀 작업을 찾을 수 없습니다", + "noTeamTasksDesc": "현재 활성화된 Claude Code 팀 작업이 없습니다.", + "taskCount": "{count}개 작업", + "blocked": "차단됨", + "hermesScheduledTasks": "Hermes 예약 작업", + "noScheduledTasksFound": "예약 작업을 찾을 수 없습니다", + "noScheduledTasksDesc": "현재 활성화된 Hermes 예약 작업이 없습니다.", + "noSchedule": "일정 없음", + "enabled": "활성화됨", + "disabled": "비활성화됨", + "createNewTask": "새 작업 만들기", + "fieldTitle": "제목", + "fieldDescription": "설명", + "fieldPriority": "우선순위", + "fieldProject": "프로젝트", + "fieldAssignTo": "담당자", + "fieldTags": "태그", + "makeRecurring": "반복 작업으로 설정", + "createRecurringTask": "반복 작업 만들기", + "createTask": "작업 만들기", + "cancel": "취소", + "editTask": "작업 편집", + "fieldStatus": "상태", + "saveChanges": "변경 사항 저장", + "edit": "편집", + "deleteTaskConfirm": "\"{title}\"을(를) 삭제하시겠습니까?", + "delete": "삭제", + "closeTaskDetails": "작업 세부 정보 닫기", + "noDescription": "설명 없음", + "taskDetailTabs": "작업 세부 정보 탭", + "tabDetails": "세부 정보", + "tabComments": "댓글", + "tabQualityReview": "품질 검토", + "tabSession": "세션", + "ticket": "티켓", + "project": "프로젝트", + "status": "상태", + "priority": "우선순위", + "assignedTo": "담당자", + "created": "생성 시간", + "issue": "이슈", + "branch": "브랜치", + "pr": "PR", + "live": "라이브", + "postingAs": "게시자", + "newComment": "새 댓글...", + "addComment": "댓글 추가", + "broadcastToSubscribers": "구독자에게 방송", + "broadcastPlaceholder": "모든 구독자에게 메시지 방송...", + "broadcast": "방송", + "broadcastSent": "{count}명의 구독자에게 방송을 보냈습니다", + "loadingComments": "댓글 로딩 중...", + "noComments": "댓글이 없습니다", + "aegisQualityReview": "Aegis 품질 검토", + "noReviews": "검토가 없습니다", + "reviewerPlaceholder": "검토자 이름", + "reviewNotesPlaceholder": "검토 메모...", + "submit": "제출", + "loadingTranscript": "기록 로딩 중...", + "noSessionMessages": "세션 메시지 없음" + }, + "cronManagement": { + "title": "크론 관리", + "subtitle": "반복 작업 예약 및 관리", + "loading": "로딩 중...", + "refresh": "새로 고침", + "addJob": "작업 추가", + "calendarView": "달력 보기", + "calendarViewDescLocal": "시간이 로컬 시간대로 표시됩니다", + "calendarViewDesc": "시간이 UTC로 표시됩니다", + "prev": "이전", + "today": "오늘", + "next": "다음", + "calMode_agenda": "일정", + "calMode_week": "주", + "calMode_month": "월", + "searchPlaceholder": "작업 검색...", + "allAgents": "모든 에이전트", + "allStates": "모든 상태", + "enabled": "활성화됨", + "disabled": "비활성화됨", + "all": "전체", + "sortName": "이름", + "sortSchedule": "일정", + "sortLastRun": "마지막 실행", + "sortNextRun": "다음 실행", + "ascending": "오름차순", + "descending": "내림차순", + "noJobsMatchFilters": "현재 필터와 일치하는 작업이 없습니다.", + "uniqueJobs": "고유 작업 {count}개", + "noJobsForDay": "이 날짜에 예약된 작업이 없습니다.", + "jobCount": "{count}개 작업", + "runsCount": "{count}회 실행", + "totalRunsCount": "총 {count}회 실행", + "moreJobs": "+{count}개 더", + "firstRun": "첫 번째 {time}", + "scheduledJobs": "예약된 작업", + "jobsCount": "{total}개 중 {count}개", + "loadingJobs": "작업 로딩 중...", + "noCronJobsFound": "크론 작업을 찾을 수 없습니다.", + "colJobName": "작업 이름", + "colAgent": "에이전트", + "colSchedule": "일정", + "colModel": "모델", + "colStatus": "상태", + "colLastRun": "마지막 실행", + "colNextRun": "다음 실행", + "colActions": "작업", + "enable": "활성화", + "disable": "비활성화", + "run": "실행", + "runNowForce": "지금 실행 (강제)", + "runNowIfDue": "지금 실행 (기한인 경우)", + "clone": "복제", + "history": "기록", + "configuration": "구성", + "delivery": "전달", + "source": "소스", + "localSchedulerAutomation": "로컬 스케줄러 / 자동화", + "command": "명령", + "timing": "타이밍", + "recentLogs": "최근 로그", + "lastRun": "마지막 실행", + "nextRun": "다음 실행", + "timezone": "시간대", + "remove": "제거", + "close": "닫기", + "noLogsAvailable": "사용 가능한 로그가 없습니다.", + "runHistoryTitle": "실행 기록: {name}", + "totalRuns": "총 {count}회 실행", + "filterRunsPlaceholder": "실행 필터...", + "timestamp": "타임스탬프", + "duration": "소요 시간", + "error": "오류", + "noRunHistoryAvailable": "사용 가능한 실행 기록이 없습니다.", + "loadMore": "더 보기", + "addNewCronJob": "새 크론 작업 추가", + "fieldJobName": "작업 이름", + "fieldSchedule": "일정 (Cron 형식)", + "quickSelect": "빠른 선택...", + "scheduleFormatHint": "형식: 분 시 일 월 요일", + "fieldCommand": "명령", + "fieldModelOptional": "모델 (선택 사항)", + "modelHint": "에이전트 또는 게이트웨이 기본 모델을 사용하려면 비워 두세요.", + "fieldStaggerOptional": "지연 오프셋 (선택 사항)", + "seconds": "초", + "staggerHint": "동일한 일정의 다른 작업과 겹치지 않도록 실행을 지연합니다.", + "fieldDescriptionOptional": "설명 (선택 사항)", + "descriptionPlaceholder": "이 작업은 무엇을 하나요?", + "cancel": "취소", + "claudeCodeTeams": "Claude Code 팀", + "teamsCount": "{count}개 팀", + "collapse": "접기", + "expand": "펼치기", + "noClaudeCodeTeams": "~/.claude/teams/에서 Claude Code 팀을 찾을 수 없습니다", + "membersCount": "{count}명의 멤버" + }, + "sessionDetails": { + "title": "세션 관리", + "subtitle": "활성 에이전트 세션 모니터링 및 관리", + "filter": "필터", + "filterAll": "전체 세션", + "filterActive": "활성만", + "filterIdle": "유휴만", + "sortBy": "정렬 기준", + "sortAge": "경과 시간", + "sortTokens": "토큰 사용량", + "sortModel": "모델", + "timeWindow": "시간 범위", + "last1h": "최근 1시간", + "last6h": "최근 6시간", + "last24h": "최근 24시간", + "last7d": "최근 7일", + "allTime": "전체", + "global": "글로벌", + "unknown": "알 수 없음", + "sessionCount": "전체 {total}개 중 {filtered}개 세션", + "activeCount": "{count}개 활성", + "noSessionsMatch": "현재 필터에 일치하는 세션이 없습니다", + "model": "모델", + "tokenUsage": "토큰 사용량", + "sessionDetails": "세션 세부 정보", + "kind": "종류", + "id": "ID", + "lastActivity": "마지막 활동", + "messages": "메시지 수", + "label": "레이블", + "addLabel": "클릭하여 레이블 추가...", + "sessionControls": "세션 제어", + "thinking": "사고", + "verbose": "상세 출력", + "reasoning": "추론", + "off": "끔", + "on": "켬", + "minimal": "최소", + "low": "낮음", + "medium": "중간", + "high": "높음", + "xhigh": "최고", + "full": "전체", + "stream": "스트림", + "modelInformation": "모델 정보", + "fullName": "전체 이름", + "provider": "제공업체", + "description": "설명", + "monitor": "모니터", + "pause": "일시 중지", + "terminate": "종료", + "working": "처리 중...", + "delete": "삭제", + "deleteConfirm": "삭제하시겠습니까?", + "yes": "예", + "no": "아니오", + "confirmTerminate": "이 세션을 종료하시겠습니까?", + "failedMonitor": "세션 모니터링에 실패했습니다", + "failedPause": "세션 일시 중지에 실패했습니다", + "failedTerminate": "세션 종료에 실패했습니다", + "sessionOverview": "세션 개요", + "totalSessions": "전체 세션", + "active": "활성", + "idle": "유휴", + "subAgents": "서브 에이전트", + "cronJobs": "크론 작업", + "modelDistribution": "모델 분포", + "highTokenUsage": "토큰 사용량 높음", + "highTokenUsageDesc": "{count}개 세션이 토큰 한도의 80% 이상을 사용 중입니다." + }, + "costTracker": { + "title": "비용 추적", + "subtitle": "에이전트, 모델, 세션 전반의 토큰 사용량 및 비용 분석", + "loadingCostData": "비용 데이터 로딩 중", + "noUsageData": "아직 사용 데이터가 없습니다", + "noUsageDataDesc": "에이전트가 세션을 실행하고 토큰을 소비하면 사용 데이터가 표시됩니다.", + "refresh": "새로고침", + "totalCost": "총 비용 ({timeframe})", + "totalTokens": "총 토큰", + "apiRequests": "API 요청 수", + "activeAgents": "활성 에이전트", + "taskAttributed": "태스크 귀속", + "usageTrends": "사용 트렌드", + "perTurn": "턴별", + "cumulative": "누적", + "noTrendData": "이 기간에 대한 트렌드 데이터가 없습니다", + "tokenUsageByModel": "모델별 토큰 사용량", + "noModelData": "모델 데이터 없음", + "costDistributionByModel": "모델별 비용 분포", + "noCostData": "비용 데이터 없음", + "performanceInsights": "성능 인사이트", + "mostEfficientModel": "가장 효율적인 모델", + "avgTokensPerRequest": "요청당 평균 토큰", + "optimizationPotential": "최적화 가능성", + "savingsPossible": "절약 가능", + "exportData": "데이터 내보내기", + "exportDataDesc": "토큰 사용 기록, 모델 통계 및 비용 내역 다운로드", + "exporting": "내보내는 중...", + "noAgentData": "에이전트 데이터 없음", + "noAgentDataDesc": "에이전트가 보고를 시작하면 토큰 사용 기록이 표시됩니다", + "agents": "에이전트", + "totalCostDays": "총 비용 ({days}일)", + "avgPer1kTokens": "평균 $/1K 토큰", + "perAgentCost": "에이전트별 비용", + "agentBreakdown": "에이전트 내역", + "inputTokens": "입력 토큰", + "outputTokens": "출력 토큰", + "ioRatio": "입출력 비율", + "lastActive": "마지막 활성", + "noTaskCosts": "태스크 귀속 비용 없음", + "tokens": "토큰", + "sortBy": "정렬", + "noSessionCostData": "세션 비용 데이터 없음", + "noSessionCostDataDesc": "사용량이 기록되면 세션별 내역이 표시됩니다.", + "activeStatus": "활성", + "inactiveStatus": "비활성", + "requests": "요청", + "inShort": "입력", + "outShort": "출력", + "avgPerReq": "요청당 평균", + "noTaskCostData": "태스크 비용 데이터 없음", + "noTaskCostDataDesc": "에이전트가 할당된 태스크를 처리하면 비용이 귀속됩니다", + "tasksWithCosts": "비용이 있는 태스크", + "attributedCost": "귀속 비용", + "attributedTokens": "귀속 토큰", + "unattributed": "미귀속", + "tasksByCost": "비용별 태스크", + "reqs": "요청" + }, + "superAdmin": { + "accessDenied": "접근 거부", + "accessDeniedDesc": "슈퍼 컨트롤에는 관리자 권한이 필요합니다.", + "loading": "슈퍼 관리 데이터 로딩 중...", + "title": "슈퍼 컨트롤", + "subtitleLocal": "스케줄러 자동화 및 런타임 상태에 대한 로컬 제어 플레인 뷰.", + "subtitleMultiTenant": "승인 게이트와 안전한 파괴적 작업을 갖춘 멀티 테넌트 프로비저닝 제어 플레인.", + "addWorkspace": "+ 워크스페이스 추가", + "refresh": "새로고침", + "activeOrgs": "활성 조직", + "pendingInProgress": "대기 중 / 진행 중", + "erroredOrgs": "오류 조직", + "queuedApprovals": "승인 대기 큐", + "createNewWorkspace": "새 워크스페이스 만들기", + "createWorkspaceHint": "아래에 워크스페이스 세부 정보를 입력하고 '만들기 + 큐'를 클릭하여 새 클라이언트 인스턴스를 프로비저닝합니다.", + "slugPlaceholder": "슬러그 (예: acme)", + "displayNamePlaceholder": "표시 이름", + "linuxUserPlaceholder": "Linux 사용자 (선택 사항)", + "planStandard": "스탠다드", + "planPro": "프로", + "planEnterprise": "엔터프라이즈", + "gatewayPortPlaceholder": "게이트웨이 포트", + "dashboardPortPlaceholder": "대시보드 포트", + "dryRun": "드라이런", + "live": "(실제)", + "createAndQueue": "만들기 + 큐", + "tabOrganizations": "조직", + "tabJobs": "작업", + "tabEvents": "이벤트", + "searchOrganizations": "조직 검색", + "showing": "{shown} / {total}개 표시", + "colTenant": "테넌트", + "colSystemUser": "시스템 사용자", + "colOwner": "소유자", + "colStatus": "상태", + "colLatestJob": "최신 작업", + "colAction": "작업", + "unassigned": "미할당", + "by": "생성자:", + "unknownCreator": "알 수 없음", + "localReadOnly": "로컬 읽기 전용", + "queueDecommission": "해제 큐", + "noMatchingOrgs": "일치하는 조직이 없습니다.", + "prev": "이전", + "next": "다음", + "page": "{page} / {total} 페이지", + "searchJobs": "작업 검색", + "colJob": "작업", + "colRequestedApproved": "요청자/승인자", + "reqShort": "요청", + "apprShort": "승인", + "view": "보기", + "viewEvents": "이벤트 보기", + "approveAndRun": "승인 + 실행", + "approve": "승인", + "reject": "거부", + "running": "실행 중...", + "run": "실행", + "noMatchingJobs": "일치하는 작업이 없습니다.", + "showingEventsForJob": "작업 #{jobId}의 이벤트 표시 중", + "selectJobForEvents": "프로비저닝 이벤트 로그를 확인할 작업을 선택하세요.", + "noEventsYet": "이 작업에 대한 이벤트가 아직 없습니다.", + "queueDecommissionTitle": "해제 큐: {name}", + "reviewImpact": "작업을 생성하기 전에 영향을 검토하세요.", + "dryRunRecommended": "드라이런 (권장)", + "dryRunDesc": "시스템을 변경하지 않고 명령을 검증하고 전체 실행 계획을 기록합니다.", + "liveExecution": "실제 실행", + "liveExecutionDesc": "승인 + 실행 후 서비스를 중지하고 해제 변경 사항을 적용합니다.", + "removeLinuxUser": "Linux 사용자 제거", + "removeLinuxUserDesc": "`userdel -r`을 실행하고 홈 디렉토리를 제거합니다.", + "removeStateDirs": "상태/워크스페이스 디렉토리 제거", + "removeStateDirsDesc": "사용자를 유지할 때 `.openclaw` 및 `workspace` 경로를 삭제합니다.", + "impactSummary": "영향 요약", + "impactStopsService": "`openclaw-gateway@{user}.service`를 중지하고 비활성화합니다.", + "impactRemovesEnv": "`/etc/openclaw-tenants/{user}.env`를 제거합니다.", + "impactLinuxUserRemoved": "Linux 사용자가 제거됩니다.", + "impactStateDirsRemoved": "상태/워크스페이스 디렉토리가 제거됩니다.", + "impactRetained": "Linux 사용자와 디렉토리는 유지됩니다.", + "reasonOptional": "이유 (선택 사항)", + "typeSlugLabel": "입력:", + "toConfirmLive": "를 입력하여 실제 해제를 확인", + "cancel": "취소", + "queueing": "큐 중...", + "queueDryRunDecommission": "드라이런 해제 큐", + "queueLiveDecommission": "실제 해제 큐", + "slugAndNameRequired": "슬러그와 표시 이름은 필수입니다", + "tenantCreated": "테넌트 {slug}가 생성되었습니다. 부트스트랩 작업이 큐에 추가되었습니다.", + "jobExecuted": "작업 #{jobId}가 실행되었습니다", + "jobApprovedExecuted": "작업 #{jobId}가 승인 및 실행되었습니다", + "typeToConfirm": "{slug}를 입력하여 실제 해제를 확인", + "decommissionQueuedDryRun": "{slug}에 대한 드라이런 해제가 큐에 추가되었습니다", + "decommissionQueued": "{slug}에 대한 해제가 큐에 추가되었습니다", + "optionalReason": "{action}에 대한 선택적 이유:", + "jobActioned": "작업 #{jobId}가 {action}되었습니다" + }, + "auditTrail": { + "title": "감사 로그", + "eventsLogged": "{count}개 이벤트 기록됨", + "refresh": "새로고침", + "allActions": "모든 작업", + "groupAuth": "인증", + "groupUsers": "사용자", + "groupAgents": "에이전트", + "groupSystem": "시스템", + "groupConfig": "구성", + "groupWorkspaces": "워크스페이스", + "actionLogin": "로그인", + "actionLoginFailed": "로그인 실패", + "actionLogout": "로그아웃", + "actionLoginGoogle": "Google 로그인", + "actionGoogleDisconnect": "Google 연결 해제", + "actionPasswordChange": "비밀번호 변경", + "actionProfileUpdate": "프로필 업데이트", + "actionUserCreate": "사용자 생성", + "actionUserUpdate": "사용자 업데이트", + "actionUserDelete": "사용자 삭제", + "actionRoleDenied": "접근 거부", + "actionAccessRequest": "접근 요청", + "actionAccessApprove": "접근 승인", + "actionAccessDeny": "접근 거부", + "actionAgentRegister": "에이전트 등록", + "actionAgentCreate": "에이전트 생성", + "actionAgentUpdate": "에이전트 업데이트", + "actionAgentDelete": "에이전트 삭제", + "actionAgentConfigSync": "구성 동기화됨", + "actionLocalAgentSync": "로컬 에이전트 동기화", + "actionSettingsUpdate": "설정 업데이트", + "actionAutoBackup": "자동 백업", + "actionBackupCreate": "백업 생성", + "actionBackupDelete": "백업 삭제", + "actionHeartbeatCheck": "하트비트 확인", + "actionIntegrationTest": "통합 테스트", + "actionCleanup": "정리", + "actionExport": "내보내기", + "actionTokenRotate": "토큰 교체", + "actionGatewayConfigUpdate": "게이트웨이 구성 업데이트", + "actionWorkspaceCreate": "워크스페이스 생성", + "actionWorkspaceUpdate": "워크스페이스 업데이트", + "actionWorkspaceDelete": "워크스페이스 삭제", + "filterByActor": "행위자로 필터...", + "noEvents": "감사 이벤트를 찾을 수 없습니다", + "userRef": "사용자 #{id}", + "previous": "이전", + "next": "다음", + "pageOf": "{page} / {total} 페이지", + "adminRequired": "감사 로그를 보려면 관리자 접근 권한이 필요합니다", + "failedFetch": "감사 로그 가져오기 실패", + "detailUsername": "사용자명", + "detailRole": "역할", + "detailName": "이름", + "detailPasswordReset": "비밀번호 재설정", + "detailChanged": "변경됨", + "detailSize": "크기", + "detailMarkedOffline": "오프라인으로 표시됨", + "detailAgent": "에이전트", + "detailSessions": "세션", + "detailEvents": "이벤트", + "detailRemoved": "제거됨", + "detailType": "유형" + }, + "securityAudit": { + "title": "보안 감사", + "subtitle": "보안 상태, 인증 이벤트, 신뢰 점수 및 위협 탐지", + "timeframeHour": "시간", + "timeframeDay": "일", + "timeframeWeek": "주", + "timeframeMonth": "월", + "loadingSecurityData": "보안 데이터 로드 중", + "securityPosture": "보안 상태", + "blendedScore": "종합 점수: 인프라 구성 70%, 이벤트 기록 30%", + "infrastructureScan": "인프라 스캔", + "scanCredentials": "자격 증명", + "scanNetwork": "네트워크", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "런타임", + "scanOs": "OS 보안", + "authEvents": "인증 이벤트", + "noAuthEvents": "이 기간에 인증 이벤트가 없습니다", + "colType": "유형", + "colActor": "행위자", + "colIP": "IP", + "colTime": "시간", + "agentTrustScores": "에이전트 신뢰 점수", + "noAgentTrustData": "에이전트 신뢰 데이터 없음", + "flagged": "플래그됨", + "secretExposureAlerts": "비밀 노출 알림", + "noSecretsDetected": "감지된 비밀 없음", + "colFile": "파일", + "colPreview": "미리보기", + "colStatus": "상태", + "colDetected": "탐지 시간", + "statusResolved": "해결됨", + "statusActive": "활성", + "mcpToolAudit": "MCP 도구 감사", + "noToolUsageData": "도구 사용 데이터 없음", + "chartSuccess": "성공", + "chartFailure": "실패", + "rateLimitAbuseSignals": "속도 제한/남용 신호", + "noRateLimitSignals": "속도 제한 신호 없음", + "hits": "{hits}회 히트", + "injectionAttempts": "인젝션 시도", + "noInjectionAttempts": "인젝션 시도 감지 없음", + "colSource": "소스", + "colInput": "입력", + "statusBlocked": "차단됨", + "statusPassed": "통과", + "securityTimeline": "보안 타임라인 ({timeframe})", + "noTimelineData": "타임라인 데이터 없음", + "chartAuthEvents": "인증 이벤트", + "chartInjections": "인젝션", + "chartSecrets": "비밀", + "chartToolCalls": "도구 호출", + "agentEvalDashboard": "에이전트 평가 대시보드", + "overallConvergence": "전체 수렴도", + "crossAgentAlignment": "평가 레이어 전반의 에이전트 간 정렬", + "noEvalData": "평가 데이터 없음", + "convergence": "수렴도:", + "drift": "드리프트", + "fixPrefix": "수정 방법: {fix}", + "issueCount": "{count, plural, one {# 개 문제} other {# 개 문제}}" + }, + "office": { + "title": "커맨드 덱", + "subtitle": "팀을 실시간으로 모니터링", + "loadingLocalSessions": "로컬 세션 스캔 중...", + "loadingOffice": "오피스 로드 중...", + "activeCount": "{count}명 활성", + "standbyCount": "{count}명 대기", + "alertCount": "{count}명 알림", + "offlineCount": "{count}명 오프라인", + "buttonDeck": "덱", + "buttonCrewChart": "팀 차트", + "refresh": "새로고침", + "emptyDeck": "덱이 비어 있습니다", + "emptyDeckSubtitle": "에이전트를 배포하면 여기에 표시됩니다", + "crewHeader": "팀", + "onlineCount": "{count}명 온라인", + "filterAll": "전체", + "filterWorking": "작업 중", + "filterIdle": "유휴", + "filterNeedsAttention": "주의 필요", + "filterRunning": "실행 중", + "filterNotRunning": "미실행", + "noWorkersInFilter": "이 필터에 해당하는 작업자가 없습니다.", + "noRecentActivity": "최근 활동 없음", + "activeStatus": "활성", + "idleMinutes": "{minutes}분 유휴", + "mainDeck": "메인 덱", + "radarLabel": "레이더", + "resetView": "초기화", + "showCrewButton": "팀 표시", + "hideCrewButton": "팀 숨기기", + "showRadarButton": "레이더 표시", + "hideRadarButton": "레이더 숨기기", + "showLogButton": "로그 표시", + "hideLogButton": "로그 숨기기", + "resetLayout": "레이아웃 초기화", + "deckLog": "덱 로그", + "noEventsYet": "이벤트 없음. 구역을 클릭하거나 작업을 실행하세요.", + "legendActive": "활성", + "legendStandby": "대기", + "legendOther": "기타", + "hotspotUp": "위", + "hotspotDown": "아래", + "hotspotLeft": "왼쪽", + "hotspotRight": "오른쪽", + "hotspotFineMinusX": "세밀 -X", + "hotspotFinePlusX": "세밀 +X", + "hotspotWider": "넓게", + "hotspotNarrower": "좁게", + "hotspotTaller": "높게", + "hotspotShorter": "낮게", + "segmentedBy": "기준:", + "segmentCategory": "카테고리", + "segmentRole": "역할", + "segmentStatus": "상태", + "currentActivity": "현재 활동", + "taskStatTotal": "전체", + "taskStatAssigned": "할당됨", + "taskStatActive": "진행 중", + "taskStatDone": "완료", + "sessionLabel": "세션:", + "quickActions": "빠른 작업", + "actionFocus": "집중", + "actionPair": "페어링", + "actionBreak": "휴식", + "openFlightDeck": "Flight Deck에서 열기", + "openingFlightDeck": "Flight Deck 열기 중...", + "flightDeckCompanion": "세션 심층 분석을 위한 프라이빗/프로 컴패니언 앱", + "flightDeckRequired": "Flight Deck 필요", + "flightDeckDescription": "Flight Deck은 Mission Control의 프라이빗/프로 컴패니언 앱입니다.", + "flightDeckNotInstalled": "이 기기에 Flight Deck이 설치되지 않은 것 같습니다. 설치하면 더 풍부한 제어 및 진단 기능으로 에이전트 세션을 열 수 있습니다.", + "maybeLater": "나중에", + "downloadFlightDeck": "Flight Deck 다운로드", + "moving": "이동 중", + "neverSeen": "확인된 적 없음", + "justNow": "방금", + "minutesAgo": "{minutes}분 전", + "hoursAgo": "{hours}시간 전", + "daysAgo": "{days}일 전" + }, + "githubSync": { + "title": "GitHub Issues 동기화", + "subtitle": "GitHub Issues를 Mission Control 작업으로 가져오기", + "loading": "GitHub 동기화 로드 중...", + "connectedAs": "GitHub: {user}", + "notConfigured": "GitHub: 구성되지 않음", + "tokenNotConfigured": "GitHub 토큰이 구성되지 않았습니다", + "tokenNotConfiguredDesc": "Issue 동기화를 활성화하려면 통합에서 GITHUB_TOKEN를 설정하세요. 동기화 기록과 연결된 작업은 계속 확인할 수 있습니다.", + "importIssues": "Issues 가져오기", + "labelRepository": "저장소", + "placeholderRepo": "owner/repo", + "labelLabels": "레이블 (선택사항)", + "placeholderLabels": "bug,enhancement", + "labelState": "상태", + "stateOpen": "열린", + "stateClosed": "닫힌", + "stateAll": "전체", + "labelAssignAgent": "에이전트에 할당 (선택사항)", + "unassigned": "미할당", + "buttonPreview": "미리보기", + "buttonImport": "가져오기", + "twoWaySync": "양방향 동기화", + "syncAll": "모두 동기화", + "enableSync": "활성화", + "disableSync": "비활성화", + "syncButton": "동기화", + "noProjectsLinked": "GitHub 저장소에 연결된 프로젝트가 없습니다. 프로젝트 관리에서 GitHub 저장소를 설정하세요.", + "previewTitle": "미리보기 ({count}개 Issue)", + "colNumber": "#", + "colTitle": "제목", + "colLabels": "레이블", + "colState": "상태", + "colCreated": "생성일", + "syncHistory": "동기화 기록", + "colRepo": "저장소", + "colIssues": "Issues", + "colStatus": "상태", + "colSyncedAt": "동기화 시간", + "noSyncHistory": "동기화 기록이 없습니다. 위에서 Issues를 가져와 시작하세요.", + "linkedTasks": "연결된 작업", + "linkedTasksWithCount": "연결된 작업 ({count})", + "colTask": "작업", + "colPriority": "우선순위", + "colGitHub": "GitHub", + "colSynced": "동기화됨", + "noLinkedTasks": "아직 GitHub Issues에 연결된 작업이 없습니다.", + "syncResultImported": "가져옴: {count}", + "syncResultSkipped": "건너뜀: {count}", + "syncResultErrors": "오류: {count}", + "enterRepo": "저장소를 입력하세요 (owner/repo)", + "noIssuesFound": "필터에 맞는 Issue가 없습니다", + "failedFetchIssues": "Issues 가져오기 실패", + "networkError": "네트워크 오류", + "syncFailed": "동기화 실패", + "failedToggleSync": "동기화 전환 실패", + "importedFeedback": "{imported}개 Issue를 가져왔습니다. {skipped}개를 건너뛰었습니다" + }, + "agentCost": { + "title": "에이전트 비용 내역", + "subtitle": "에이전트별 토큰 사용량 및 지출 분석", + "loadingAgentCosts": "에이전트 비용 로드 중", + "viewOverview": "개요", + "viewPerAgentDB": "에이전트별 (DB)", + "timeframeHour": "시간", + "timeframeDay": "일", + "timeframeWeek": "주", + "timeframeMonth": "월", + "noAgentCostData": "에이전트 비용 데이터 없음", + "noAgentCostSubtitle": "에이전트가 토큰을 사용하기 시작하면 비용 데이터가 표시됩니다", + "refresh": "새로고침", + "activeAgents": "활성 에이전트", + "totalCost": "총 비용 ({timeframe})", + "mostExpensive": "가장 비용이 높은", + "mostEfficient": "가장 효율적인", + "taskAttributed": "작업 귀속", + "unattributed": "{cost} 미귀속", + "costDistributionByAgent": "에이전트별 비용 분포", + "noCostData": "비용 데이터 없음", + "costTrends": "비용 추세 (상위 5 에이전트)", + "noTrendData": "추세 데이터 없음", + "costComparison": "비용 비교", + "costEfficiency": "비용 효율 (에이전트당 1K 토큰당 $)", + "agentCostRanking": "에이전트 비용 순위", + "noTaskCosts": "이 에이전트에 대한 작업 귀속 비용이 없습니다", + "tasksTab": "작업 ({count})", + "modelsTab": "모델 ({count})", + "sessionCount": "{count, plural, one {# 세션} other {# 세션}}", + "requestCount": "{count, plural, one {# 요청} other {# 요청}}", + "tokens": "토큰", + "ofTotal": "전체의 {pct}%", + "reqs": "{count}개 요청", + "inputTokens": "입력 토큰", + "outputTokens": "출력 토큰", + "ioRatio": "입출력 비율", + "lastActive": "마지막 활성", + "modelBreakdown": "모델 내역", + "inSuffix": "입력", + "outSuffix": "출력", + "noPerAgentData": "데이터베이스에 에이전트별 데이터 없음", + "noPerAgentDataSubtitle": "에이전트가 하트비트를 보내기 시작하면 토큰 사용 기록이 표시됩니다", + "agentCountDB": "에이전트 수 (DB)", + "totalCostDays": "총 비용 ({days}일)", + "totalTokens": "총 토큰", + "avgPer1kTokens": "평균 $/1K 토큰", + "perAgentCostDB": "에이전트별 비용 (DB)", + "agentTokenBreakdown": "에이전트 토큰 내역", + "chartCost": "비용 ($)" + }, + "tokenDashboard": { + "title": "토큰 및 비용 대시보드", + "subtitle": "모델 및 세션 전반의 토큰 사용량과 비용 모니터링", + "viewOverview": "개요", + "viewSessions": "세션", + "timeframeHour": "시간", + "timeframeDay": "일", + "timeframeWeek": "주", + "timeframeMonth": "월", + "filtersLabel": "필터:", + "clearAll": "모두 지우기", + "timezoneLabel": "시간대:", + "sortByLabel": "정렬:", + "noSessionCostData": "세션 비용 데이터 없음", + "noSessionCostSubtitle": "사용량이 기록되면 세션별 내역이 표시됩니다.", + "sessionActive": "활성", + "sessionInactive": "비활성", + "requests": "요청", + "inSuffix": "입력", + "outSuffix": "출력", + "avgPerRequest": "요청당 평균", + "loadingUsageData": "사용 데이터 로드 중", + "totalTokens": "총 토큰 ({timeframe})", + "totalCost": "총 비용 ({timeframe})", + "apiRequests": "API 요청", + "avgTokensPerRequest": "요청당 평균 토큰", + "cacheReadTokens": "캐시 읽기 토큰", + "cacheWriteTokens": "캐시 쓰기 토큰", + "usageTrends": "사용 추세 ({timeframe})", + "peakLabel": "피크:", + "perTurnButton": "턴별", + "cumulativeButton": "누적", + "noTrendData": "이 기간의 추세 데이터 없음", + "chartTokens": "토큰", + "chartRequests": "요청", + "tokenUsageByModel": "모델별 토큰 사용량", + "noModelUsageData": "모델 사용 데이터 없음", + "costDistributionByModel": "모델별 비용 분포", + "noCostData": "비용 데이터 없음", + "costByProvider": "제공업체별 비용", + "noProviderData": "제공업체 데이터 없음", + "exportData": "데이터 내보내기", + "exportCsvFiltered": "CSV 내보내기 (필터됨)", + "exportCsvFull": "CSV 내보내기 (전체)", + "exportJson": "JSON 내보내기", + "exporting": "내보내는 중...", + "exportDescription": "분석을 위한 토큰 사용 데이터를 내보냅니다. \"필터됨\"은 현재 표시된 데이터만, \"전체\"는 서버의 모든 레코드를 내보냅니다.", + "performanceInsights": "성능 인사이트", + "mostEfficientModel": "가장 효율적인 모델", + "mostUsedModel": "가장 많이 사용된 모델", + "optimizationPotential": "최적화 가능성", + "savingsPossible": "{pct}% 절약 가능", + "modelEfficiencyComparison": "모델 효율 비교", + "modelPerformance": "모델 성능", + "topSessionsByCost": "비용 기준 상위 세션", + "requestsLabel": "요청", + "avgCost": "평균 비용", + "avgTokens": "평균 토큰", + "noUsageData": "사용 데이터 없음", + "noUsageDataSubtitle": "에이전트가 실행되기 시작하면 토큰 사용량이 여기에 표시됩니다", + "refresh": "새로고침" + }, + "memoryBrowser": { + "hideSidebar": "사이드바 숨기기", + "showSidebar": "사이드바 표시", + "fileCountSize": "{count}개 파일 / {size}", + "indexing": "인덱싱 중…", + "newFile": "+ 새로 만들기", + "searchPlaceholder": "파일 검색...", + "searchResults": "{count}개 결과", + "noFiles": "파일 없음", + "refresh": "새로 고침", + "toggleBacklinks": "백링크 패널 토글", + "links": "링크", + "edit": "편집", + "delete": "삭제", + "save": "저장", + "saving": "저장 중...", + "cancel": "취소", + "selectFilePrompt": "보려면 파일을 선택하세요", + "orSwitchView": "또는 상태/파이프라인 뷰로 전환", + "schemaWarnings": "스키마 경고:", + "editPlaceholder": "파일 내용 편집...", + "loadingHermes": "Hermes 메모리 로드 중", + "noHermesData": "Hermes 메모리 데이터 없음", + "hermesMemoryTitle": "Hermes 메모리", + "hermesMemoryDesc": "Hermes 에이전트 영구 메모리 파일의 읽기 전용 뷰", + "noAgentMemory": "에이전트 메모리 파일을 찾을 수 없음", + "noUserMemory": "사용자 메모리 파일을 찾을 수 없음", + "runningDiagnostics": "진단 실행 중", + "noHealthData": "상태 데이터 없음", + "runDiagnostics": "진단 실행", + "healthCategories": "8개 카테고리 / {time}", + "pipelineTitle": "처리 파이프라인", + "pipelineDesc": "Ars Contexta의 6R에서 영감을 받은 지식 유지 관리 작업", + "pipelineReflect": "반영", + "pipelineReflectDesc": "파일 간의 연결 기회 찾기", + "pipelineReweave": "재편성", + "pipelineReweaveDesc": "최신 연결 파일에서 업데이트가 필요한 오래된 파일 찾기", + "pipelineGenerateMoc": "MOC 생성", + "pipelineGenerateMocDesc": "파일 클러스터에서 콘텐츠 맵 자동 생성", + "processing": "처리 중", + "filesProcessed": "{count}개 파일 처리됨", + "noSuggestions": "제안 없음 — 지식베이스가 잘 연결되어 있습니다", + "mapsOfContent": "콘텐츠 맵 ({count}개 그룹)", + "newFileTitle": "새 파일", + "directory": "디렉토리", + "fileName": "이름", + "fileType": "유형", + "content": "내용", + "contentOptional": "선택사항...", + "create": "만들기", + "deleteFileTitle": "파일 삭제", + "permanentlyDelete": "영구 삭제:", + "outgoing": "발신 ({count})", + "backlinks": "백링크 ({count})", + "wikiLinks": "Wiki 링크 ({count})" + }, + "userManagement": { + "adminAccessRequired": "관리자 액세스가 필요합니다", + "failedToLoadUsers": "사용자 로드 실패", + "failedToCreate": "사용자 생성 실패", + "networkError": "네트워크 오류", + "userUpdated": "사용자가 업데이트되었습니다", + "failedToUpdate": "업데이트 실패", + "deletedUser": "사용자 \"{username}\"가 삭제되었습니다", + "failedToDelete": "삭제 실패", + "failedToAction": "요청 {action} 실패", + "requestActioned": "{email}의 요청이 {action}되었습니다", + "user": "사용자", + "accessDenied": "액세스 거부", + "adminRequired": "사용자 관리에는 관리자 권한이 필요합니다.", + "loadingUsers": "사용자 로드 중...", + "usersTitle": "사용자", + "usersSummary": "{count}명의 등록된 사용자 · {pending}개의 승인 대기 중", + "addLocalUser": "+ 로컬 사용자 추가", + "cancel": "취소", + "pendingRequests": "{count}개의 대기 중인 액세스 요청", + "identity": "신원", + "attempts": "시도 횟수", + "lastAttempt": "마지막 시도", + "action": "작업", + "roleViewer": "뷰어", + "roleOperator": "운영자", + "roleAdmin": "관리자", + "noteOptional": "메모 (선택사항)", + "confirm": "확인", + "reject": "거부", + "review": "검토", + "newLocalUser": "새 로컬 사용자", + "username": "사용자 이름", + "password": "비밀번호", + "displayName": "표시 이름", + "creating": "생성 중...", + "createUser": "사용자 생성", + "colUser": "사용자", + "colProvider": "제공자", + "colRole": "역할", + "colLastLogin": "마지막 로그인", + "colActions": "작업", + "newPasswordOptional": "새 비밀번호 (선택사항)", + "save": "저장", + "edit": "편집", + "delete": "삭제", + "never": "없음", + "createdUser": "사용자 \"{username}\"가 생성되었습니다" + }, + "alertRules": { + "title": "알림 규칙", + "description": "에이전트, 작업 및 시스템 이벤트에 대한 자동 알림 구성", + "evaluating": "평가 중...", + "evaluateNow": "지금 평가", + "newRule": "+ 새 규칙", + "statTotalRules": "총 규칙", + "statActive": "활성", + "statTotalTriggers": "총 트리거", + "evalResultsTitle": "평가 결과", + "dismiss": "닫기", + "triggered": "트리거됨", + "noRulesToEvaluate": "평가할 규칙이 없습니다", + "loadingRules": "규칙 로드 중...", + "noRulesConfigured": "알림 규칙이 구성되지 않았습니다", + "createRuleHint": "규칙을 만들어 시스템 이벤트에 대한 알림을 받으세요", + "never": "없음", + "cooldown": "쿨다운: {minutes}분", + "triggerCount": "트리거: {count}회", + "lastTriggered": "마지막: {time}", + "deleteRule": "규칙 삭제", + "newRuleTitle": "새 알림 규칙", + "ruleName": "규칙 이름", + "ruleNamePlaceholder": "예: 에이전트 오프라인 알림", + "ruleDescription": "설명", + "optionalDescription": "선택적 설명", + "entity": "엔티티", + "entityAgent": "에이전트", + "entityTask": "작업", + "entitySession": "세션", + "entityActivity": "활동", + "field": "필드", + "operator": "연산자", + "value": "값", + "valuePlaceholder": "예: error", + "cooldownMinutes": "쿨다운 (분)", + "notifyRecipient": "알림 (수신자)", + "cancel": "취소", + "creating": "생성 중...", + "createRule": "규칙 생성", + "failedToCreate": "규칙 생성 실패", + "networkError": "네트워크 오류" + }, + "agentSquad": { + "failedToFetch": "에이전트 가져오기 실패", + "errorOccurred": "오류가 발생했습니다", + "failedToUpdateStatus": "에이전트 상태 업데이트 실패", + "loadingAgents": "에이전트 로드 중", + "title": "에이전트 팀", + "live": "라이브", + "manual": "수동", + "addAgent": "+ 에이전트 추가", + "refresh": "새로 고침", + "noAgents": "에이전트를 찾을 수 없습니다", + "addFirstAgent": "첫 번째 에이전트를 추가하여 시작하세요", + "session": "세션", + "totalTasks": "총 작업", + "inProgress": "진행 중", + "lastSeen": "마지막 확인", + "activity": "활동", + "wake": "깨우기", + "busy": "사용 중", + "sleep": "절전", + "statusControl": "상태 제어", + "role": "역할", + "sessionKey": "세션 키", + "notSet": "설정되지 않음", + "soulContent": "SOUL 콘텐츠", + "soulPlaceholder": "에이전트 성격과 지침...", + "taskStatistics": "작업 통계", + "total": "합계", + "assigned": "할당됨", + "done": "완료", + "created": "생성 날짜", + "lastUpdated": "마지막 업데이트", + "saveChanges": "변경 사항 저장", + "cancel": "취소", + "editAgent": "에이전트 편집", + "createNewAgent": "새 에이전트 만들기", + "name": "이름", + "rolePlaceholder": "예: 연구원, 개발자, 분석가", + "sessionKeyOptional": "세션 키 (선택사항)", + "sessionKeyPlaceholder": "ClawdBot 세션 식별자", + "soulContentOptional": "SOUL 콘텐츠 (선택사항)", + "createAgent": "에이전트 생성", + "failedToUpdate": "에이전트 업데이트 실패", + "failedToCreate": "에이전트 생성 실패", + "never": "없음", + "justNow": "방금", + "minutesAgo": "{count}분 전", + "hoursAgo": "{count}시간 전", + "daysAgo": "{count}일 전" + }, + "multiGateway": { + "title": "게이트웨이 관리자", + "description": "여러 OpenClaw 게이트웨이 연결 관리", + "probeAll": "모두 탐색", + "addGateway": "+ 게이트웨이 추가", + "connected": "연결됨", + "disconnected": "연결 끊김", + "noActiveConnection": "활성 연결 없음", + "loadingGateways": "게이트웨이 로드 중...", + "noGateways": "게이트웨이가 구성되지 않았습니다", + "addGatewayHint": "게이트웨이를 추가하여 연결 관리 시작", + "discoveredGateways": "발견된 게이트웨이", + "discoveredGatewaysDesc": "이 머신에서 발견된 OpenClaw 게이트웨이", + "refresh": "새로 고침", + "running": "실행 중", + "stopped": "중지됨", + "bind": "바인드", + "mode": "모드", + "register": "등록", + "directCliConnections": "직접 CLI 연결", + "directCliDesc": "게이트웨이 없이 직접 연결된 CLI 도구", + "noDirectConnections": "직접 CLI 연결 없음", + "useApiConnect": "사용", + "toRegisterCli": "CLI 도구를 등록하려면", + "role": "역할", + "heartbeat": "하트비트", + "never": "없음", + "disconnect": "연결 끊기", + "neverProbed": "탐색된 적 없음", + "primary": "기본", + "connectedBadge": "연결됨", + "token": "토큰", + "tokenSet": "설정됨", + "tokenNone": "없음", + "latency": "지연", + "last": "마지막", + "gatewayVersion": "게이트웨이 버전", + "noHistory": "기록 없음", + "colorKey": "색상 키", + "colorKeyTitle": "녹색=온라인; 호박색=오류; 빨강=오프라인", + "lastLatency": "마지막 지연: {ms}ms", + "probeGateway": "게이트웨이 탐색", + "probing": "탐색 중...", + "probe": "탐색", + "connectToGateway": "이 게이트웨이에 연결", + "connect": "연결", + "setPrimaryTitle": "기본으로 설정", + "setPrimary": "기본으로 설정", + "removeGateway": "게이트웨이 제거", + "addGatewayTitle": "게이트웨이 추가", + "name": "이름", + "namePlaceholder": "예: primary", + "host": "호스트", + "port": "포트", + "tokenField": "토큰", + "optional": "선택사항", + "cancel": "취소", + "adding": "추가 중...", + "addGatewaySubmit": "게이트웨이 추가", + "failedToAdd": "게이트웨이 추가 실패", + "networkError": "네트워크 오류" + }, + "nodes": { + "title": "노드 / 인스턴스", + "gatewayConnected": "게이트웨이 연결됨", + "gatewayUnreachable": "게이트웨이 연결 불가", + "tabInstances": "인스턴스 ({count})", + "tabDevices": "기기 ({count})", + "loading": "로드 중...", + "noInstances": "활성 인스턴스가 없습니다. 노드가 게이트웨이에 연결되면 여기에 표시됩니다.", + "colName": "이름", + "colClientId": "클라이언트 ID", + "colPlatform": "플랫폼", + "colVersion": "버전", + "colRoles": "역할", + "colStatus": "상태", + "colConnected": "연결 시간", + "colLastActivity": "마지막 활동", + "colHostIp": "호스트 / IP", + "colDeviceId": "기기 ID", + "colPaired": "페어링 시간", + "colLastSeen": "마지막 확인", + "colTrust": "신뢰", + "colActions": "작업", + "pendingPairingRequests": "대기 중인 페어링 요청 ({count})", + "approve": "승인", + "approving": "승인 중...", + "reject": "거부", + "rejecting": "거부 중...", + "noPairedDevices": "페어링된 기기가 없습니다.", + "pairedDevices": "페어링된 기기 ({count})", + "trusted": "신뢰됨", + "untrusted": "신뢰 안됨", + "rotateToken": "토큰 교체", + "revokeConfirm": "취소하시겠습니까?", + "yes": "예", + "no": "아니오", + "revoke": "취소", + "hideTokens": "토큰 숨기기", + "tokens": "토큰 ({count})", + "tokenUsed": "{time}에 사용됨", + "revoked": "취소됨", + "rotate": "교체" + }, + "activityFeed": { + "title": "활동", + "live": "실시간", + "paused": "일시 정지", + "refresh": "새로고침", + "filterAgent": "에이전트", + "filterAll": "전체", + "filterType": "유형", + "allTypes": "모든 유형", + "filterLimit": "제한", + "loadingActivities": "활동 로드 중", + "noActivities": "활동을 찾을 수 없습니다", + "noActivityForAgent": "{agent}의 활동이 기록되지 않았습니다", + "tryAdjustingFilters": "필터를 조정해 보세요", + "entityTask": "작업:", + "entityCommentOn": "댓글 대상:", + "entityAgent": "에이전트:", + "showDetails": "세부 정보 표시", + "activeSessions": "활성 세션", + "agentStatus": "상태", + "lastSeen": "마지막 확인", + "lastAction": "마지막 작업", + "tasksAssigned": "할당된 작업", + "inProgress": "진행 중", + "completed": "완료", + "events": "{count}개 이벤트", + "newer": "더 최신", + "older": "더 오래된", + "pageOf": "{page} / {total} 페이지", + "footerAgentEvents": "{agent}의 이벤트 {total}개", + "footerShowing": "활동 {count}개 표시{filtered}", + "filtered": "(필터링됨)", + "lastUpdated": "마지막 업데이트: {time}" + }, + "standup": { + "title": "데일리 스탠드업", + "viewCurrent": "현재", + "viewHistory": "기록", + "generating": "생성 중...", + "generate": "생성", + "export": "내보내기", + "standupFor": "{date} 스탠드업", + "generatedOn": "{date}에 생성됨", + "statCompleted": "완료", + "statInProgress": "진행 중", + "statBlocked": "차단됨", + "statOverdue": "기한 초과", + "teamAccomplishments": "팀 성과", + "teamBlockers": "팀 차단 항목", + "overdueTasks": "기한 초과 작업", + "unassigned": "미할당", + "individualReports": "개인 보고서", + "activitySummary": "활동: {actions}개 작업, {comments}개 댓글", + "sectionCompleted": "완료 ({count})", + "sectionInProgress": "진행 중 ({count})", + "sectionAssigned": "할당됨 ({count})", + "sectionBlocked": "차단됨 ({count})", + "none": "없음", + "noStandupGenerated": "생성된 스탠드업 없음", + "selectDatePrompt": "날짜를 선택하고 보고서를 생성하세요", + "generateToday": "오늘의 스탠드업 생성", + "noHistory": "스탠드업 기록을 찾을 수 없습니다", + "historyGenerated": "생성됨: {date}", + "historyAgentsParticipated": "{count}명의 에이전트 참여", + "historyCompleted": "완료: {count}", + "historyInProgress": "진행 중: {count}", + "historyBlocked": "차단됨: {count}" + }, + "webhooks": { + "title": "Webhook", + "configured": "{count}개의 Webhook이 구성됨", + "addWebhook": "+ Webhook 추가", + "secretLabel": "Webhook 시크릿 (지금 저장하세요 - 한 번만 표시됩니다)", + "dismiss": "닫기", + "testSuccessful": "테스트 성공", + "testFailed": "테스트 실패", + "testStatus": "상태:", + "testDuration": "소요 시간:", + "testError": "오류:", + "localAutomations": "로컬 Webhook 자동화", + "localAutomationsDesc": "Webhook 전송 및 재시도를 지원하는 로컬 스케줄러 작업", + "nextRun": "다음 실행 {time}", + "noNextRun": "다음 실행 예약 없음", + "running": "실행 중...", + "run": "실행", + "noWebhooks": "구성된 Webhook 없음", + "noWebhooksDesc": "이벤트에 대한 HTTP 알림을 받으려면 Webhook을 추가하세요", + "allEvents": "모든 이벤트", + "eventCount": "{count}개 이벤트", + "deliveries": "{count}건 전송", + "failed": "{count}건 실패", + "lastFired": "마지막 발생 {time}", + "sendTestEvent": "테스트 이벤트 보내기", + "testing": "테스트 중...", + "test": "테스트", + "disable": "비활성화", + "enable": "활성화", + "delete": "삭제", + "recentDeliveries": "최근 전송", + "noDeliveries": "전송 기록 없음", + "newWebhook": "새 Webhook", + "formName": "이름", + "formUrl": "URL", + "formEvents": "이벤트", + "cancel": "취소", + "createWebhook": "Webhook 생성" + }, + "skills": { + "title": "스킬 허브", + "subtitle": "스킬을 로컬에서 관리하고 외부 레지스트리를 탐색합니다.", + "localMode": "로컬 모드", + "gatewayMode": "게이트웨이 모드", + "tabInstalled": "설치됨", + "tabRegistry": "레지스트리", + "searchPlaceholder": "설치된 스킬 빠르게 찾기...", + "searchResults": "총 {total}개 스킬 중 \"{query}\"에 일치하는 {count}개 표시", + "diskSyncActive": "양방향 디스크 동기화 활성 (스케줄러 60초마다)", + "scanAll": "모두 스캔", + "scanningProgress": "스캔 중 {done}/{total}...", + "refreshNow": "지금 새로고침", + "scanning": "스캔 중:", + "skillsScanned": "{count}개 스킬 스캔됨", + "dismiss": "닫기", + "addSkill": "스킬 추가", + "initialContent": "초기 SKILL.md 내용", + "loadingSkills": "스킬 로드 중...", + "skillCount": "{total}개 중 {count}개 스킬", + "noMatch": "이 필터에 일치하는 스킬이 없습니다.", + "scan": "스캔", + "view": "보기", + "registrySearchPlaceholder": "스킬 검색...", + "searching": "검색 중...", + "search": "검색", + "installTo": "설치 위치:", + "installing": "설치 중...", + "install": "설치", + "noRegistryResults": "{registry}에서 \"{query}\"에 대한 결과를 찾을 수 없습니다. 다른 검색어를 시도하거나 레지스트리를 변경하세요.", + "registryPrompt": "ClawdHub, skills.sh 또는 Awesome OpenClaw를 검색하여 에이전트 스킬을 발견하고 설치하세요.", + "skillInstalled": "스킬 설치됨", + "installFailed": "설치 실패", + "installingSkill": "스킬 설치 중", + "stepFetching": "레지스트리에서 SKILL.md 가져오는 중", + "stepScanning": "보안 스캔 실행 중", + "stepWriting": "디스크에 쓰기 및 등록 중", + "security": "보안", + "viewInstalled": "설치됨 보기", + "done": "완료", + "close": "닫기", + "delete": "삭제", + "save": "저장", + "loadingSkillContent": "SKILL.md 로드 중...", + "noContent": "내용 없음." + }, + "orchestration": { + "tabCommand": "명령", + "tabWorkflows": "워크플로", + "tabPipelines": "파이프라인", + "tabFleet": "플리트", + "selectAgent": "에이전트 선택...", + "commandPlaceholder": "에이전트에게 명령 또는 메시지 보내기...", + "send": "보내기", + "noTemplates": "워크플로 템플릿이 없습니다", + "createFirstTemplate": "첫 번째 템플릿 만들기", + "cancel": "취소", + "new": "+ 새로 만들기", + "editTemplate": "템플릿 편집", + "newTemplate": "새 템플릿", + "templateName": "템플릿 이름", + "templateDescription": "설명 (선택 사항)", + "taskPromptPlaceholder": "에이전트를 위한 작업 프롬프트...", + "timeout": "시간 초과", + "role": "역할", + "lastRun": "마지막 실행", + "update": "업데이트", + "save": "저장", + "totalAgents": "총 에이전트", + "online": "온라인", + "busy": "바쁨", + "errors": "오류" + } +} diff --git a/messages/pt.json b/messages/pt.json new file mode 100644 index 0000000000000000000000000000000000000000..35ab18d2d235574511c6b15961c5536ced774515 --- /dev/null +++ b/messages/pt.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "Salvar", + "cancel": "Cancelar", + "loading": "Carregando...", + "error": "Erro", + "search": "Pesquisar", + "confirm": "Confirmar", + "delete": "Excluir", + "edit": "Editar", + "close": "Fechar", + "back": "Voltar", + "next": "Próximo", + "retry": "Tentar novamente", + "or": "ou", + "optional": "opcional", + "language": "Idioma", + "dismiss": "Dispensar", + "continue": "Continuar", + "selected": "Selecionado", + "detected": "Detectado", + "now": "agora", + "tryAgain": "Tentar novamente", + "skipToMainContent": "Pular para o conteúdo principal", + "builtWithCareBy": "Construído com cuidado por", + "viewRelease": "Ver versão", + "updateNow": "Atualizar agora", + "showDetails": "Mostrar detalhes", + "hideDetails": "Ocultar detalhes", + "moreIssues": "+ {count} {count, plural, one {problema a mais} other {problemas a mais}}" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "Entre para continuar", + "username": "Nome de usuário", + "password": "Senha", + "signIn": "Entrar", + "signingIn": "Entrando...", + "signInWithGoogle": "Entrar com Google", + "loadingGoogleSignIn": "Carregando login do Google...", + "googleSignInFailed": "Falha no login com Google", + "networkError": "Erro de rede", + "loginFailed": "Falha no login", + "enterUsername": "Digite o nome de usuário", + "enterPassword": "Digite a senha", + "orchestrationTagline": "Orquestração de agentes OpenClaw", + "accessRequestSubmitted": "Solicitação de acesso enviada", + "accessRequestDescription": "Sua solicitação foi enviada a um administrador para análise. Você poderá entrar após a aprovação.", + "tryAgain": "Tentar novamente", + "noAdminAccount": "Nenhuma conta de administrador criada ainda", + "noAdminDescription": "Configure sua conta de administrador para começar a usar o Mission Control.", + "createAdminAccount": "Criar conta de administrador", + "welcomeToMC": "Bem-vindo ao Mission Control", + "settingUpMC": "Configurando o Mission Control", + "createAdminToStart": "Crie sua conta de administrador para começar", + "creatingAdmin": "Criando sua conta de administrador...", + "displayName": "Nome de exibição", + "confirmPassword": "Confirmar senha", + "atLeast12Chars": "Pelo menos 12 caracteres", + "repeatPassword": "Repita sua senha", + "passwordsDoNotMatch": "As senhas não coincidem", + "passwordTooShort": "A senha deve ter pelo menos 12 caracteres", + "moreCharsNeeded": "Mais {count} {count, plural, one {caractere necessário} other {caracteres necessários}}", + "firstTimeSetupOnly": "Esta página só está disponível durante a configuração inicial.", + "checkingSetupStatus": "Verificando estado da configuração...", + "setupFailed": "Falha na configuração", + "failedToCheckSetup": "Falha ao verificar o estado da configuração", + "validatingCredentials": "Validando credenciais", + "creatingAdminAccount": "Criando conta de administrador", + "configuringSession": "Configurando sessão", + "launchingDashboard": "Iniciando painel de controle", + "usernameHint": "Apenas letras minúsculas, números, pontos, hífens e underscores" + }, + "nav": { + "overview": "Visão geral", + "agents": "Agentes", + "tasks": "Tarefas", + "chat": "Chat", + "channels": "Canais", + "skills": "Habilidades", + "memory": "Memória", + "activity": "Atividade", + "logs": "Registros", + "costTracker": "Rastreador de custos", + "nodes": "Nós", + "approvals": "Aprovações", + "office": "Escritório", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "Alertas", + "github": "GitHub", + "security": "Segurança", + "users": "Usuários", + "audit": "Auditoria", + "gateway": "Gateway", + "gateways": "Gateways", + "config": "Configuração", + "integrations": "Integrações", + "debug": "Depuração", + "settings": "Configurações", + "group": { + "observe": "OBSERVAR", + "automate": "AUTOMATIZAR", + "admin": "ADMIN" + }, + "collapseSidebar": "Recolher barra lateral", + "expandSidebar": "Expandir barra lateral", + "more": "Mais" + }, + "settings": { + "language": "Idioma", + "languageDescription": "Escolha seu idioma de exibição preferido", + "general": "Geral", + "security": "Segurança", + "dataRetention": "Retenção de dados", + "chatSettings": "Chat", + "gatewaySettings": "Gateway", + "title": "Configurações", + "description": "Configure o comportamento do Mission Control e as políticas de retenção", + "discard": "Descartar", + "save": "Salvar", + "saving": "Salvando...", + "saveChanges": "Salvar alterações", + "workspaceManagementLabel": "Gerenciamento de espaço de trabalho:", + "workspaceManagementDesc1": "Para criar ou gerenciar espaços de trabalho (instâncias de locatário), vá ao painel", + "superAdmin": "Super Admin", + "workspaceManagementDesc2": "em Admin > Super Admin na barra lateral. De lá, você pode criar novas instâncias de cliente, gerenciar locatários e monitorar trabalhos de provisionamento.", + "securityDescription": "Analise a postura de segurança da sua estação", + "securityScan": "Verificação de segurança", + "hideScan": "Ocultar verificação", + "backups": "Backups", + "backupsDescription": "Crie backups sob demanda do banco de dados MC ou do estado do gateway", + "backupMcDatabase": "Fazer backup do BD MC", + "backupGatewayState": "Fazer backup do estado do gateway", + "backingUp": "Fazendo backup...", + "onboarding": "Integração", + "onboardingDescription": "Reproduza o assistente de configuração e redefina a lista de verificação do painel", + "replayOnboarding": "Repetir integração", + "resetting": "Redefinindo..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "Orquestração de agentes", + "authenticatingOperator": "Autenticando operador", + "detectingStationMode": "Detectando modo da estação", + "loadingControlConfig": "Carregando configuração de controle", + "connectingRuntimeLinks": "Conectando links de execução", + "syncingAgentRegistry": "Sincronizando registro de agentes", + "loadingActiveSessions": "Carregando sessões ativas", + "hydratingWorkspaceBoard": "Inicializando painel de trabalho", + "mappingMemoryGraph": "Mapeando grafo de memória", + "indexingSkillCatalog": "Indexando catálogo de habilidades" + }, + "header": { + "workspace": "Área de trabalho", + "sessions": "Sessões", + "events": "Eventos", + "live": "Ao vivo", + "off": "Desligado", + "local": "Local", + "connected": "Conectado", + "disconnected": "Desconectado", + "reconnecting": "Reconectando", + "offline": "Offline", + "retry": "Tentativa {count}", + "jumpToSearch": "Ir para página, tarefa, agente...", + "searchPlaceholder": "Pesquisar tarefas, agentes, atividade ou digitar um comando de página...", + "searching": "Pesquisando...", + "noResults": "Nenhum resultado encontrado", + "typeToSearch": "Digite para pesquisar entidades ou navegar instantaneamente para páginas", + "gatewayConnection": "Conexão do Gateway", + "status": "Status", + "host": "Host", + "latency": "Latência", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "Tentativas", + "clickToReconnect": "Clique para reconectar", + "down": "Fora do ar", + "goToOverview": "Ir para Visão geral", + "goToChat": "Ir para Chat", + "goToTasks": "Ir para Tarefas", + "goToAgents": "Ir para Agentes", + "goToActivityFeed": "Ir para Feed de atividade", + "goToNotifications": "Ir para Notificações", + "goToTokenUsage": "Ir para Uso de tokens", + "goToLogs": "Ir para Registros", + "goToMemoryBrowser": "Ir para Explorador de memória", + "goToIntegrations": "Ir para Integrações", + "goToSettings": "Ir para Configurações", + "goToGateways": "Ir para Gateways", + "goToGithubSync": "Ir para Sincronização do GitHub", + "goToOffice": "Ir para Escritório", + "goToSkills": "Ir para Habilidades", + "quickNavigation": "Navegação rápida" + }, + "contextSwitcher": { + "localMode": "Modo local", + "connected": "Conectado", + "disconnected": "Desconectado", + "interface": "Interface", + "essential": "Essencial", + "full": "Completo", + "organizations": "ORGANIZAÇÕES", + "all": "Todos", + "noTools": "sem ferramentas", + "unlinked": "não vinculado", + "newOrganization": "Nova organização...", + "usernamePlaceholder": "Nome de usuário (usuário do SO)", + "displayNamePlaceholder": "Nome de exibição", + "gatewayPortPlaceholder": "Porta do gateway (obrigatório)", + "installTools": "INSTALAR FERRAMENTAS", + "usernameAndDisplayRequired": "Nome de usuário e nome de exibição são obrigatórios", + "invalidUsernameFormat": "Formato de nome de usuário inválido", + "gatewayPortRequired": "Porta do gateway é obrigatória", + "creating": "Criando...", + "createUser": "Criar usuário", + "createAndQueue": "Criar + Enfileirar" + }, + "localModeBanner": { + "noGatewayDetected": "Nenhum gateway OpenClaw detectado", + "runningInLocalMode": " — executando em modo local. Monitorando sessões do Claude Code, tarefas e dados locais.", + "configureGateway": "Configurar Gateway" + }, + "updateBanner": { + "updating": "Atualizando...", + "restartingServer": "Reiniciando servidor...", + "updateAvailable": "Atualização disponível: v{version}", + "newerVersionAvailable": " — uma versão mais recente do Mission Control está disponível.", + "updateFailed": "Falha na atualização", + "networkError": "Erro de rede — não foi possível conectar ao servidor." + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "Atualizando OpenClaw...", + "openclawUpdated": "OpenClaw atualizado para v{version}", + "openclawUpdateAvailable": "Atualização do OpenClaw: v{version} disponível", + "installed": "instalado: v{version}", + "changelog": "Registro de alterações", + "copied": "Copiado!", + "copyCommand": "Copiar comando", + "updateFailed": "Falha na atualização", + "networkError": "Erro de rede — não foi possível conectar ao servidor." + }, + "doctorBanner": { + "fixCompleted": "Correção do doutor OpenClaw concluída", + "configDrift": "Desvio de configuração do OpenClaw detectado", + "stateIntegrity": "Aviso de integridade de estado do OpenClaw", + "securityWarning": "Aviso de segurança do OpenClaw", + "doctorWarnings": "Avisos do doutor OpenClaw", + "runningFixes": "Executando correções do doutor OpenClaw...", + "cleaningSessionStores": "Limpando armazenamentos de sessão...", + "archivingOrphanTranscripts": "Arquivando transcrições órfãs...", + "recheckingHealth": "Verificando novamente a saúde da instância atual...", + "fixFailed": "Falha na correção do doutor OpenClaw", + "networkError": "Erro de rede — não foi possível conectar ao servidor.", + "runningFix": "Executando correção...", + "runDoctorFix": "Executar correção do doutor" + }, + "liveFeed": { + "liveFeed": "Feed ao vivo", + "showLiveFeed": "Mostrar feed ao vivo", + "collapseFeed": "Recolher feed", + "closeFeed": "Fechar feed", + "noActivityYet": "Nenhuma atividade ainda", + "eventsAppearLocal": "Eventos aparecem quando você cria tarefas ou agentes são atualizados", + "eventsStreamGateway": "Eventos são transmitidos aqui do gateway e do banco de dados local", + "activeSessions": "Sessões ativas", + "noActiveSessions": "Sem sessões ativas", + "activeSession": "Ativa", + "idleSession": "Ociosa" + }, + "errorBoundary": { + "somethingWentWrong": "Algo deu errado", + "unexpectedError": "Ocorreu um erro inesperado neste painel." + }, + "page": { + "showLiveFeed": "Mostrar feed ao vivo", + "availableInFullMode": "{panel} está disponível no modo Completo.", + "switchToFull": "Mudar para Completo", + "goToOverview": "Ir para Visão geral", + "requiresGateway": "{panel} requer uma conexão com o gateway OpenClaw.", + "configureGateway": "Configure um gateway para habilitar este painel." + }, + "onboarding": { + "stationOnline": "Estação online", + "stationReady": "Sua estação está pronta para os agentes.", + "welcome": { + "title": "Bem-vindo ao Mission Control", + "description": "Sua estação para agentes de IA. Quando os agentes se conectam aqui, eles ganham memória persistente, gerenciamento de tarefas, fluxos de trabalho coordenados e observabilidade completa. Escaneamos sua configuração — aqui está o que está online.", + "availableModes": "Modos disponíveis", + "localMode": "Modo local", + "gatewayMode": "Modo Gateway", + "monitorClaude": "Monitorar sessões do Claude Code nesta máquina", + "taskTracking": "Rastreamento de tarefas e monitoramento de custos", + "sessionHistory": "Histórico de sessões", + "singlePilot": "Operações de piloto único", + "orchestrateAgents": "Orquestrar múltiplos agentes em diferentes máquinas", + "memorySkills": "Memória, habilidades e comunicação entre agentes", + "webhookIntegrations": "Integrações de Webhook", + "requiresGateway": "Requer gateway", + "activeSessionsDetected": "{count} {count, plural, one {sessão ativa detectada} other {sessões ativas detectadas}}", + "noActiveSessions": "Sem sessões ativas do Claude", + "gatewayConnected": "Gateway conectado", + "localModeNoGateway": "Modo local — sem gateway", + "agentsRegistered": "{count} {count, plural, one {agente registrado} other {agentes registrados}}", + "noAgentsYet": "Nenhum agente ainda", + "gatewayRegistered": "Gateway: Mission Control registrado", + "gatewayRegistrationPending": "Registro do gateway pendente", + "skipSetup": "Pular configuração", + "getStarted": "Começar" + }, + "interfaceMode": { + "title": "Escolha o layout da sua estação", + "description": "Essencial mostra os painéis principais que os operadores mais precisam. Completo desbloqueia todos os sistemas da estação — memória, automação, auditoria de segurança e mais. Você pode alternar a qualquer momento.", + "essential": "Essencial", + "full": "Completo", + "essentialDescription": "Operações simplificadas — os painéis que você usará diariamente: visão geral da frota, agentes, tarefas, chat, feed de atividade, registros e configurações.", + "essentialPanels1": "Visão geral da frota, Agentes, Tarefas, Chat", + "essentialPanels2": "Feed de atividade, Registros, Configurações", + "essentialTotal": "7 painéis no total", + "fullDescription": "Acesso completo à estação — adiciona explorador de memória, agendamento Cron, Webhooks, alertas, auditoria de segurança, rastreamento de custos e configuração do gateway.", + "fullIncludes": "Tudo do Essencial mais", + "fullPanels": "Memória, Cron, Webhooks, Auditoria", + "fullTotal": "Todos os sistemas da estação desbloqueados" + }, + "gatewayLink": { + "title": "Link do Gateway", + "description": "O Mission Control registra sua origem no gateway OpenClaw para se conectar via WebSocket e gerenciar agentes remotamente.", + "originRegistered": "Origem do gateway registrada", + "originAdded": "Origem do Mission Control adicionada ao allowedOrigins do gateway", + "registrationPending": "Registro pendente — será configurado na próxima verificação de capacidades", + "deviceAuthConfigured": "Autenticação de dispositivo configurada", + "deviceAuthDisabled": "Autenticação de dispositivo desabilitada — MC se autentica via token do gateway", + "deviceAuthWillConfigure": "Será configurado junto com o registro de origem", + "testing": "Testando...", + "testConnection": "Testar conexão", + "gatewayReachable": "Gateway acessível", + "gatewayUnreachable": "Gateway inacessível" + }, + "credentials": { + "title": "Proteja sua estação", + "description": "A senha de administrador protege o console da sua estação. A chave API é uma credencial de acoplamento — agentes a apresentam ao se registrar, para que apenas agentes autorizados possam se acoplar.", + "checkingCredentials": "Verificando credenciais...", + "adminPassword": "Senha de administrador", + "passwordStrong": "A senha é forte e não é a padrão", + "passwordWeak": "Usando uma senha padrão ou fraca — altere AUTH_PASS no .env", + "apiKey": "Chave API", + "apiKeyConfigured": "Configurada — agentes podem se acoplar com esta chave", + "apiKeyNotSet": "Não definida — agentes não poderão se acoplar sem uma chave configurada. Execute: bash scripts/generate-env.sh --force", + "openSettings": "Abrir configurações", + "securityScan": "Varredura de segurança", + "securityScanDescription": "Verifique a rede, o ambiente de execução e o endurecimento do OpenClaw antes de lançar a estação.", + "launchStation": "Lançar estação", + "launchAnyway": "Lançar mesmo assim" + } + }, + "channels": { + "title": "Canais", + "loadingChannels": "Carregando canais...", + "gatewayConnected": "Gateway conectado", + "gatewayDisconnected": "Gateway desconectado", + "refresh": "Atualizar", + "noChannelsConfigured": "Nenhum canal configurado ainda. Configure plataformas de mensagens (WhatsApp, Telegram, Discord, Slack, etc.) nas configurações do gateway OpenClaw.", + "gatewayUnreachable": "Não é possível acessar o gateway OpenClaw. Verifique se está em execução e acessível.", + "statusConnected": "Conectado", + "statusRunning": "Em execução", + "statusConfigured": "Configurado", + "statusInactive": "Inativo", + "probe": "Sondar", + "probing": "Sondando...", + "showQr": "Mostrar QR", + "relink": "Reconectar", + "waitForScan": "Aguardar leitura", + "logout": "Sair", + "loggedOut": "Sessão encerrada.", + "profile": "Perfil", + "editProfile": "Editar perfil", + "edit": "Editar", + "noProfileSet": "Nenhum perfil definido", + "displayName": "Nome de exibição", + "username": "Nome de usuário", + "about": "Sobre", + "bio": "Biografia", + "avatarUrl": "URL do avatar", + "bannerUrl": "URL do banner", + "website": "Site", + "lightning": "Lightning", + "saving": "Salvando...", + "saveAndPublish": "Salvar e publicar", + "importFromRelays": "Importar dos relays", + "hideAdvanced": "Ocultar avançado", + "showAdvanced": "Mostrar avançado", + "cancel": "Cancelar", + "profilePublished": "Perfil publicado nos relays.", + "saveFailed": "Falha ao salvar.", + "profileImported": "Perfil importado dos relays.", + "importFailed": "Falha ao importar.", + "accounts": "Contas ({count})" + }, + "integrations": { + "title": "Integrações", + "loading": "Carregando integrações...", + "connectedCount": "{connected} de {total} conectadas", + "pullAll": "Buscar tudo", + "discard": "Descartar", + "save": "Salvar", + "saving": "Salvando...", + "saveChanges": "Salvar alterações", + "cancel": "Cancelar", + "remove": "Remover", + "removeTitle": "Remover integração?", + "removeDescription": "Isso removerá {target} do arquivo .env. O gateway deve ser reiniciado para as alterações entrarem em vigor.", + "notSet": "não definido", + "noIntegrationsInCategory": "Nenhuma integração nesta categoria" + }, + "execApproval": { + "title": "Aprovações de execução", + "pendingBadge": "{count} pendente(s)", + "realtimeLabel": "Tempo real via WebSocket", + "viewApprovals": "Aprovações", + "viewAllowlist": "Configuração da lista de permissões", + "filterAll": "Todas", + "filterPending": "Pendentes", + "filterResolved": "Resolvidas", + "noPendingApprovals": "Sem aprovações pendentes. Solicitações de execução de agentes aparecerão aqui como sobreposição.", + "noApprovals": "Sem aprovações para exibir.", + "loadingAllowlist": "Carregando lista de permissões...", + "addAgent": "Adicionar agente", + "save": "Salvar", + "saving": "Salvando...", + "reload": "Recarregar", + "noAgentsConfigured": "Nenhum agente configurado. Insira um ID de agente acima para criar uma lista de permissões.", + "addPattern": "Adicionar padrão", + "noAllowlistPatterns": "Sem padrões na lista de permissões. Os comandos exigirão aprovação manual.", + "previewMatches": "Prévia: {count} comando(s) recente(s) corresponderia(m)", + "andMore": "...e mais {count}", + "allowOnce": "Permitir uma vez", + "alwaysAllow": "Sempre permitir", + "deny": "Negar", + "statusExpired": "Expirado", + "statusApproved": "Aprovado", + "statusDenied": "Negado" + }, + "notifications": { + "title": "Notificações", + "markAllRead": "Marcar tudo como lido", + "recipientLabel": "Destinatário", + "recipientPlaceholder": "Nome do agente (ex.: my-agent)", + "noNotifications": "Sem notificações", + "markRead": "Marcar como lido" + }, + "localAgentsDoc": { + "title": "AGENTS.md local", + "noPathFound": "Nenhum AGENTS.md local encontrado ainda", + "openInVsCode": "Abrir no VS Code", + "copied": "Copiado", + "copyPath": "Copiar caminho", + "collapse": "Recolher", + "expand": "Expandir", + "loading": "Carregando AGENTS.md local...", + "notDetected": "Nenhum AGENTS.md local detectado.", + "checked": "Verificado: {paths}" + }, + "memoryGraph": { + "loading": "Carregando grafo...", + "retry": "Tentar novamente", + "noMemoryDatabases": "Nenhum banco de dados de memória encontrado", + "noMemoryDatabasesHint": "Arquivos SQLite de memória OpenClaw não detectados", + "allAgents": "todos os agentes", + "filterFiles": "filtrar arquivos...", + "statAgents": "agentes", + "statFiles": "arquivos", + "statChunks": "fragmentos", + "statSize": "tamanho", + "legendSessions": "sessões", + "legendMemory": "memória", + "legendKnowledge": "conhecimento", + "keyboardHint": "rolar para zoom / arrastar para mover / clicar no nó para aprofundar", + "chunks": "fragmentos", + "text": "texto" + }, + "agentComms": { + "connecting": "Conectando ao feed...", + "eventsCount": "{count} evento(s)", + "connectionGateway": "Gateway", + "connectionSse": "SSE", + "connectionPolling": "Sondagem", + "sourceLive": "Ao vivo", + "sourceMixed": "Misto", + "sourceSeeded": "Pré-carregado", + "sessions": "{active}/{total} sessões", + "scrollToLatest": "Ir para o mais recente", + "toLabel": "Para:", + "composerPlaceholderTarget": "Mensagem para {name}... (Enter para enviar)", + "composerPlaceholderBroadcast": "Selecione uma sessão ou agente acima, ou digite para transmitir...", + "send": "Enviar", + "noFeedEvents": "Ainda sem eventos de feed", + "noFilterEvents": "Sem eventos de {filter}", + "noFeedEventsHint": "Conecte-se ao gateway ou aguarde atividade do agente. Eventos de sessões, ferramentas, chat e rastreamentos serão transmitidos em tempo real.", + "noFilterEventsHint": "Mude para \"Todas\" para ver eventos de outras categorias, ou aguarde os eventos de {filter}." + }, + "agentDetail": { + "configTab": "Configuração", + "filesTab": "Arquivos", + "toolsTab": "Ferramentas", + "channelsTab": "Canais", + "cronTab": "Cron", + "modelsTab": "Modelos", + "workspaceFiles": "Arquivos do espaço de trabalho", + "refresh": "Atualizar", + "charCount": "{count} caracteres", + "missing": "ausente", + "selectFileToView": "Selecione um arquivo para visualizar ou editar", + "reset": "Redefinir", + "saving": "Salvando...", + "save": "Salvar", + "fileNotExistYet": "Este arquivo ainda não existe. Você pode criá-lo digitando conteúdo e salvando.", + "toolConfiguration": "Configuração de ferramentas", + "profile": "Perfil:", + "saved": "Salvo", + "allowListCount": "Lista de permitidos ({count})", + "noAllowList": "Sem lista de permitidos explícita (usando padrões do perfil)", + "addToolAllowList": "Adicionar ferramenta à lista de permitidos", + "add": "Adicionar", + "alsoAllowCount": "Também permitir ({count})", + "alsoAllowDesc": "Ferramentas adicionais permitidas além dos padrões do perfil.", + "none": "Nenhum", + "denyListCount": "Lista de negados ({count})", + "noDeniedTools": "Sem ferramentas negadas", + "addToolDenyList": "Adicionar ferramenta à lista de negados", + "channelStatus": "Status dos canais", + "channelStatusDesc": "Canais disponíveis para {agent}", + "noChannelsFound": "Nenhum canal encontrado...", + "connectedOf": "{connected}/{total} conectados", + "noAccounts": "Sem contas", + "configuredCount": "{count} configurados", + "notConfigured": "Não configurado", + "enabledCount": "{count} habilitados", + "disabled": "Desabilitado", + "cronJobs": "Jobs cron", + "allCronJobsCount": "{count} de {total} jobs", + "agentCronJobsCount": "{count} de {total} jobs", + "agentOnly": "Apenas agente", + "showAll": "Mostrar tudo", + "noCronJobsFound": "Nenhum job cron encontrado", + "noCronJobsAssigned": "Nenhum job cron atribuído a {agent}", + "noSchedule": "sem agendamento", + "enabled": "habilitado", + "lastRun": "Último:", + "nextRun": "Próximo:", + "modelConfiguration": "Configuração de modelos", + "modelConfigDesc": "Configure os modelos principal e de fallback para este agente.", + "primaryModel": "Modelo principal", + "defaultModel": "Padrão", + "fallbackChainCount": "Cadeia de fallback ({count})", + "fallbackChainDesc": "Modelos tentados em ordem se o modelo principal falhar ou não estiver disponível.", + "noFallbackModels": "Nenhum modelo de fallback configurado.", + "moveUp": "Mover para cima", + "moveDown": "Mover para baixo", + "remove": "Remover", + "addFallbackPlaceholder": "Adicionar modelo de fallback", + "sandboxMode": "Modo", + "sandboxWorkspace": "Espaço de trabalho", + "sandboxNetwork": "Rede", + "sandboxNetworkPlaceholder": "ex.: none, host", + "toolsSection": "Ferramentas", + "subAgentsSection": "Sub-agentes", + "addSubAgentPlaceholder": "Adicionar sub-agente", + "addSubAgent": "Adicionar", + "subAgentModelOverride": "Substituição de modelo de sub-agente", + "defaultInherit": "Padrão (herdar)", + "modelLabel": "Modelo:", + "noSubAgents": "Nenhum sub-agente configurado.", + "memorySearch": "Pesquisa na memória", + "cancel": "Cancelar" + }, + "taskBoard": { + "title": "Quadro de tarefas", + "allProjects": "Todos os projetos", + "projects": "Projetos", + "close": "Fechar", + "spawnSubAgent": "Criar sub-agente", + "newTask": "Nova tarefa", + "refresh": "Atualizar", + "spawnAgentPlaceholder": "Nome do agente", + "spawnTaskPlaceholder": "Descrição da tarefa", + "timeoutTitle": "Tempo limite (minutos)", + "spawning": "Criando...", + "spawn": "Criar", + "noActiveSpawnRequests": "Sem solicitações de criação ativas", + "dismissError": "Fechar erro", + "taskBoardAriaLabel": "Quadro de tarefas", + "columnAriaLabel": "Coluna {title}, {count} tarefas", + "colInbox": "Caixa de entrada", + "colAssigned": "Atribuído", + "colInProgress": "Em andamento", + "colReview": "Revisão", + "colQualityReview": "Revisão de qualidade", + "colDone": "Concluído", + "recurring": "RECORRENTE", + "spawned": "GERADO", + "spawnedFromTask": "Gerado da tarefa #{id}", + "unassigned": "Não atribuído", + "due": "Vencimento:", + "dropTasksHere": "Solte tarefas aqui", + "priority_low": "Baixa", + "priority_medium": "Média", + "priority_high": "Alta", + "priority_critical": "Crítica", + "claudeCodeTasks": "Tarefas do Claude Code", + "collapse": "Recolher", + "expand": "Expandir", + "loading": "Carregando...", + "noTeamTasksFound": "Nenhuma tarefa de equipe encontrada", + "noTeamTasksDesc": "Nenhuma tarefa de equipe do Claude Code está ativa no momento.", + "taskCount": "{count} {count, plural, one {tarefa} other {tarefas}}", + "blocked": "bloqueado", + "hermesScheduledTasks": "Tarefas agendadas do Hermes", + "noScheduledTasksFound": "Nenhuma tarefa agendada encontrada", + "noScheduledTasksDesc": "Nenhuma tarefa agendada do Hermes está ativa no momento.", + "noSchedule": "sem agendamento", + "enabled": "habilitado", + "disabled": "desabilitado", + "createNewTask": "Criar nova tarefa", + "fieldTitle": "Título", + "fieldDescription": "Descrição", + "fieldPriority": "Prioridade", + "fieldProject": "Projeto", + "fieldAssignTo": "Atribuir a", + "fieldTags": "Tags", + "makeRecurring": "Tornar recorrente", + "createRecurringTask": "Criar tarefa recorrente", + "createTask": "Criar tarefa", + "cancel": "Cancelar", + "editTask": "Editar tarefa", + "fieldStatus": "Status", + "saveChanges": "Salvar alterações", + "edit": "Editar", + "deleteTaskConfirm": "Excluir \"{title}\"?", + "delete": "Excluir", + "closeTaskDetails": "Fechar detalhes da tarefa", + "noDescription": "Sem descrição", + "taskDetailTabs": "Abas de detalhes da tarefa", + "tabDetails": "Detalhes", + "tabComments": "Comentários", + "tabQualityReview": "Revisão de qualidade", + "tabSession": "Sessão", + "ticket": "Ticket", + "project": "Projeto", + "status": "Status", + "priority": "Prioridade", + "assignedTo": "Atribuído a", + "created": "Criado", + "issue": "Issue", + "branch": "Branch", + "pr": "PR", + "live": "Ao vivo", + "postingAs": "Publicando como", + "newComment": "Novo comentário...", + "addComment": "Adicionar comentário", + "broadcastToSubscribers": "Transmitir para assinantes", + "broadcastPlaceholder": "Transmitir mensagem para todos os assinantes...", + "broadcast": "Transmitir", + "broadcastSent": "Transmissão enviada para {count} assinantes", + "loadingComments": "Carregando comentários...", + "noComments": "Ainda sem comentários", + "aegisQualityReview": "Revisão de qualidade Aegis", + "noReviews": "Ainda sem revisões", + "reviewerPlaceholder": "Nome do revisor", + "reviewNotesPlaceholder": "Notas de revisão...", + "submit": "Enviar", + "loadingTranscript": "Carregando transcrição...", + "noSessionMessages": "Sem mensagens de sessão" + }, + "cronManagement": { + "title": "Gerenciamento de cron", + "subtitle": "Agendar e gerenciar jobs recorrentes", + "loading": "Carregando...", + "refresh": "Atualizar", + "addJob": "Adicionar job", + "calendarView": "Vista de calendário", + "calendarViewDescLocal": "Os horários são exibidos no seu fuso horário local", + "calendarViewDesc": "Os horários são exibidos em UTC", + "prev": "Anterior", + "today": "Hoje", + "next": "Próximo", + "calMode_agenda": "Agenda", + "calMode_week": "Semana", + "calMode_month": "Mês", + "searchPlaceholder": "Pesquisar jobs...", + "allAgents": "Todos os agentes", + "allStates": "Todos os estados", + "enabled": "Habilitado", + "disabled": "Desabilitado", + "all": "Todos", + "sortName": "Nome", + "sortSchedule": "Agendamento", + "sortLastRun": "Última execução", + "sortNextRun": "Próxima execução", + "ascending": "Crescente", + "descending": "Decrescente", + "noJobsMatchFilters": "Nenhum job corresponde aos filtros atuais.", + "uniqueJobs": "{count} {count, plural, one {job único} other {jobs únicos}}", + "noJobsForDay": "Nenhum job agendado para esta data.", + "jobCount": "{count} {count, plural, one {job} other {jobs}}", + "runsCount": "{count} {count, plural, one {execução} other {execuções}}", + "totalRunsCount": "{count} {count, plural, one {execução} other {execuções}} no total", + "moreJobs": "+{count} mais", + "firstRun": "primeiro {time}", + "scheduledJobs": "Jobs agendados", + "jobsCount": "{count} de {total} jobs", + "loadingJobs": "Carregando jobs...", + "noCronJobsFound": "Nenhum job cron encontrado.", + "colJobName": "Nome do job", + "colAgent": "Agente", + "colSchedule": "Agendamento", + "colModel": "Modelo", + "colStatus": "Status", + "colLastRun": "Última execução", + "colNextRun": "Próxima execução", + "colActions": "Ações", + "enable": "Habilitar", + "disable": "Desabilitar", + "run": "Executar", + "runNowForce": "Executar agora (forçar)", + "runNowIfDue": "Executar agora (se devido)", + "clone": "Clonar", + "history": "Histórico", + "configuration": "Configuração", + "delivery": "Entrega", + "source": "Fonte", + "localSchedulerAutomation": "Agendador local / Automação", + "command": "Comando", + "timing": "Temporização", + "recentLogs": "Logs recentes", + "lastRun": "Última execução", + "nextRun": "Próxima execução", + "timezone": "Fuso horário", + "remove": "Remover", + "close": "Fechar", + "noLogsAvailable": "Nenhum log disponível.", + "runHistoryTitle": "Histórico de execuções: {name}", + "totalRuns": "{count} {count, plural, one {execução} other {execuções}} no total", + "filterRunsPlaceholder": "Filtrar execuções...", + "timestamp": "Carimbo de data/hora", + "duration": "Duração", + "error": "Erro", + "noRunHistoryAvailable": "Nenhum histórico de execuções disponível.", + "loadMore": "Carregar mais", + "addNewCronJob": "Adicionar novo job cron", + "fieldJobName": "Nome do job", + "fieldSchedule": "Agendamento (formato cron)", + "quickSelect": "Seleção rápida...", + "scheduleFormatHint": "Formato: minuto hora dia mês diaDaSemana", + "fieldCommand": "Comando", + "fieldModelOptional": "Modelo (opcional)", + "modelHint": "Deixe vazio para usar o modelo padrão do agente ou gateway.", + "fieldStaggerOptional": "Deslocamento escalonado (opcional)", + "seconds": "segundos", + "staggerHint": "Atrasa a execução para evitar sobreposição com outros jobs no mesmo agendamento.", + "fieldDescriptionOptional": "Descrição (opcional)", + "descriptionPlaceholder": "O que este job faz?", + "cancel": "Cancelar", + "claudeCodeTeams": "Equipes do Claude Code", + "teamsCount": "{count} {count, plural, one {equipe} other {equipes}}", + "collapse": "Recolher", + "expand": "Expandir", + "noClaudeCodeTeams": "Nenhuma equipe do Claude Code encontrada em ~/.claude/teams/", + "membersCount": "{count} {count, plural, one {membro} other {membros}}" + }, + "sessionDetails": { + "title": "Gestão de sessões", + "subtitle": "Monitorar e gerenciar sessões ativas de agentes", + "filter": "Filtrar", + "filterAll": "Todas as sessões", + "filterActive": "Apenas ativas", + "filterIdle": "Apenas inativas", + "sortBy": "Ordenar por", + "sortAge": "Idade", + "sortTokens": "Uso de tokens", + "sortModel": "Modelo", + "timeWindow": "Janela de tempo", + "last1h": "Última hora", + "last6h": "Últimas 6h", + "last24h": "Últimas 24h", + "last7d": "Últimos 7d", + "allTime": "Tudo", + "global": "Global", + "unknown": "Desconhecido", + "sessionCount": "{filtered} de {total} sessões", + "activeCount": "{count} ativas", + "noSessionsMatch": "Nenhuma sessão corresponde ao filtro atual", + "model": "Modelo", + "tokenUsage": "Uso de tokens", + "sessionDetails": "Detalhes da sessão", + "kind": "Tipo", + "id": "ID", + "lastActivity": "Última atividade", + "messages": "Mensagens", + "label": "Rótulo", + "addLabel": "Clique para adicionar rótulo...", + "sessionControls": "Controles de sessão", + "thinking": "Pensamento", + "verbose": "Detalhado", + "reasoning": "Raciocínio", + "off": "Desligado", + "on": "Ligado", + "minimal": "Mínimo", + "low": "Baixo", + "medium": "Médio", + "high": "Alto", + "xhigh": "Muito alto", + "full": "Completo", + "stream": "Stream", + "modelInformation": "Informações do modelo", + "fullName": "Nome completo", + "provider": "Provedor", + "description": "Descrição", + "monitor": "Monitorar", + "pause": "Pausar", + "terminate": "Encerrar", + "working": "Processando...", + "delete": "Excluir", + "deleteConfirm": "Excluir?", + "yes": "Sim", + "no": "Não", + "confirmTerminate": "Tem certeza que deseja encerrar esta sessão?", + "failedMonitor": "Falha ao monitorar a sessão", + "failedPause": "Falha ao pausar a sessão", + "failedTerminate": "Falha ao encerrar a sessão", + "sessionOverview": "Visão geral das sessões", + "totalSessions": "Total de sessões", + "active": "Ativas", + "idle": "Inativas", + "subAgents": "Subagentes", + "cronJobs": "Tarefas cron", + "modelDistribution": "Distribuição de modelos", + "highTokenUsage": "Alto uso de tokens", + "highTokenUsageDesc": "{count} sessões estão usando mais de 80% do limite de tokens." + }, + "costTracker": { + "title": "Rastreador de custos", + "subtitle": "Análise de uso de tokens, custos e gastos entre agentes, modelos e sessões", + "loadingCostData": "Carregando dados de custo", + "noUsageData": "Ainda sem dados de uso", + "noUsageDataDesc": "Os dados de uso aparecem quando os agentes executam sessões e consomem tokens.", + "refresh": "Atualizar", + "totalCost": "Custo total ({timeframe})", + "totalTokens": "Total de tokens", + "apiRequests": "Requisições API", + "activeAgents": "Agentes ativos", + "taskAttributed": "Atribuído a tarefas", + "usageTrends": "Tendências de uso", + "perTurn": "Por turno", + "cumulative": "Cumulativo", + "noTrendData": "Sem dados de tendência para este período", + "tokenUsageByModel": "Uso de tokens por modelo", + "noModelData": "Sem dados de modelo", + "costDistributionByModel": "Distribuição de custos por modelo", + "noCostData": "Sem dados de custo", + "performanceInsights": "Análises de desempenho", + "mostEfficientModel": "Modelo mais eficiente", + "avgTokensPerRequest": "Média de tokens/requisição", + "optimizationPotential": "Potencial de otimização", + "savingsPossible": "de economia possível", + "exportData": "Exportar dados", + "exportDataDesc": "Baixar registros de uso de tokens, estatísticas de modelos e detalhamento de custos", + "exporting": "Exportando...", + "noAgentData": "Sem dados por agente", + "noAgentDataDesc": "Os registros de uso de tokens aparecerão quando os agentes começarem a reportar", + "agents": "Agentes", + "totalCostDays": "Custo total ({days}d)", + "avgPer1kTokens": "Média $/1K tokens", + "perAgentCost": "Custo por agente", + "agentBreakdown": "Detalhamento por agente", + "inputTokens": "Tokens de entrada", + "outputTokens": "Tokens de saída", + "ioRatio": "Razão E/S", + "lastActive": "Última atividade", + "noTaskCosts": "Sem custos atribuídos a tarefas", + "tokens": "tokens", + "sortBy": "Ordenar", + "noSessionCostData": "Sem dados de custo de sessão", + "noSessionCostDataDesc": "Os detalhamentos por sessão aparecem após o registro do uso.", + "activeStatus": "Ativa", + "inactiveStatus": "Inativa", + "requests": "requisições", + "inShort": "entrada", + "outShort": "saída", + "avgPerReq": "média/req.", + "noTaskCostData": "Sem dados de custo de tarefas", + "noTaskCostDataDesc": "Os custos serão atribuídos às tarefas quando os agentes trabalharem nelas", + "tasksWithCosts": "Tarefas com custos", + "attributedCost": "Custo atribuído", + "attributedTokens": "Tokens atribuídos", + "unattributed": "Não atribuído", + "tasksByCost": "Tarefas por custo", + "reqs": "req." + }, + "superAdmin": { + "accessDenied": "Acesso negado", + "accessDeniedDesc": "O super controle requer privilégios de administrador.", + "loading": "Carregando dados de super administração...", + "title": "Super controle", + "subtitleLocal": "Visão do plano de controle local sobre automações do agendador e estado de tempo de execução.", + "subtitleMultiTenant": "Plano de controle de provisionamento multi-inquilino com portões de aprovação e ações destrutivas mais seguras.", + "addWorkspace": "+ Adicionar espaço de trabalho", + "refresh": "Atualizar", + "activeOrgs": "Organizações ativas", + "pendingInProgress": "Pendente / Em andamento", + "erroredOrgs": "Organizações com erro", + "queuedApprovals": "Aprovações em fila", + "createNewWorkspace": "Criar novo espaço de trabalho", + "createWorkspaceHint": "Preencha os detalhes abaixo e clique em Criar + Fila para provisionar uma nova instância de cliente.", + "slugPlaceholder": "Slug (ex. acme)", + "displayNamePlaceholder": "Nome de exibição", + "linuxUserPlaceholder": "Usuário Linux (opcional)", + "planStandard": "Padrão", + "planPro": "Pro", + "planEnterprise": "Empresarial", + "gatewayPortPlaceholder": "Porta do gateway", + "dashboardPortPlaceholder": "Porta do painel", + "dryRun": "Simulação", + "live": "(real)", + "createAndQueue": "Criar + Fila", + "tabOrganizations": "Organizações", + "tabJobs": "trabalhos", + "tabEvents": "eventos", + "searchOrganizations": "Pesquisar organizações", + "showing": "Exibindo {shown} de {total}", + "colTenant": "Inquilino", + "colSystemUser": "Usuário do sistema", + "colOwner": "Proprietário", + "colStatus": "Status", + "colLatestJob": "Último trabalho", + "colAction": "Ação", + "unassigned": "não atribuído", + "by": "por", + "unknownCreator": "desconhecido", + "localReadOnly": "Local somente leitura", + "queueDecommission": "Enfileirar desativação", + "noMatchingOrgs": "Nenhuma organização correspondente.", + "prev": "Anterior", + "next": "Próximo", + "page": "Página {page} / {total}", + "searchJobs": "Pesquisar trabalhos", + "colJob": "Trabalho", + "colRequestedApproved": "Solicitado/Aprovado", + "reqShort": "Solic.", + "apprShort": "Aprov.", + "view": "Ver", + "viewEvents": "Ver eventos", + "approveAndRun": "Aprovar + Executar", + "approve": "Aprovar", + "reject": "Rejeitar", + "running": "Executando...", + "run": "Executar", + "noMatchingJobs": "Nenhum trabalho correspondente.", + "showingEventsForJob": "Exibindo eventos do trabalho #{jobId}", + "selectJobForEvents": "Selecione um trabalho para inspecionar o log de eventos de provisionamento.", + "noEventsYet": "Ainda não há eventos para este trabalho.", + "queueDecommissionTitle": "Enfileirar desativação: {name}", + "reviewImpact": "Revise o impacto antes de criar o trabalho.", + "dryRunRecommended": "Simulação (recomendada)", + "dryRunDesc": "Sem alterações no sistema, valida comandos e registra uma execução completa do plano.", + "liveExecution": "Execução real", + "liveExecutionDesc": "Irá parar serviços e aplicar alterações de desmontagem após aprovação + execução.", + "removeLinuxUser": "Remover usuário Linux", + "removeLinuxUserDesc": "Executa `userdel -r` e remove o diretório pessoal.", + "removeStateDirs": "Remover dirs. de estado/espaço de trabalho", + "removeStateDirsDesc": "Exclui os caminhos `.openclaw` e `workspace` quando o usuário é mantido.", + "impactSummary": "Resumo do impacto", + "impactStopsService": "Para e desabilita `openclaw-gateway@{user}.service`.", + "impactRemovesEnv": "Remove `/etc/openclaw-tenants/{user}.env`.", + "impactLinuxUserRemoved": "O usuário Linux será removido.", + "impactStateDirsRemoved": "Os diretórios de estado/espaço de trabalho serão removidos.", + "impactRetained": "O usuário Linux e os diretórios são mantidos.", + "reasonOptional": "Motivo (opcional)", + "typeSlugLabel": "Digite", + "toConfirmLive": "para confirmar a desativação real", + "cancel": "Cancelar", + "queueing": "Enfileirando...", + "queueDryRunDecommission": "Enfileirar simulação de desativação", + "queueLiveDecommission": "Enfileirar desativação real", + "slugAndNameRequired": "Slug e nome de exibição são obrigatórios", + "tenantCreated": "Inquilino {slug} criado. Trabalho de inicialização enfileirado.", + "jobExecuted": "Trabalho #{jobId} executado", + "jobApprovedExecuted": "Trabalho #{jobId} aprovado e executado", + "typeToConfirm": "Digite {slug} para confirmar a desativação real", + "decommissionQueuedDryRun": "Simulação de desativação enfileirada para {slug}", + "decommissionQueued": "Desativação enfileirada para {slug}", + "optionalReason": "Motivo opcional para {action}:", + "jobActioned": "Trabalho #{jobId} foi {action}" + }, + "auditTrail": { + "title": "Trilha de auditoria", + "eventsLogged": "{count, plural, one {# evento} other {# eventos}} registrados", + "refresh": "Atualizar", + "allActions": "Todas as ações", + "groupAuth": "Autenticação", + "groupUsers": "Usuários", + "groupAgents": "Agentes", + "groupSystem": "Sistema", + "groupConfig": "Configuração", + "groupWorkspaces": "Espaços de trabalho", + "actionLogin": "Login", + "actionLoginFailed": "Falha de login", + "actionLogout": "Logout", + "actionLoginGoogle": "Login com Google", + "actionGoogleDisconnect": "Google desconectado", + "actionPasswordChange": "Alteração de senha", + "actionProfileUpdate": "Atualização de perfil", + "actionUserCreate": "Usuário criado", + "actionUserUpdate": "Usuário atualizado", + "actionUserDelete": "Usuário excluído", + "actionRoleDenied": "Acesso negado", + "actionAccessRequest": "Acesso solicitado", + "actionAccessApprove": "Acesso aprovado", + "actionAccessDeny": "Acesso negado", + "actionAgentRegister": "Agente registrado", + "actionAgentCreate": "Agente criado", + "actionAgentUpdate": "Agente atualizado", + "actionAgentDelete": "Agente excluído", + "actionAgentConfigSync": "Configuração sincronizada", + "actionLocalAgentSync": "Agentes locais sincronizados", + "actionSettingsUpdate": "Configurações atualizadas", + "actionAutoBackup": "Backup automático", + "actionBackupCreate": "Backup criado", + "actionBackupDelete": "Backup excluído", + "actionHeartbeatCheck": "Verificação de heartbeat", + "actionIntegrationTest": "Teste de integração", + "actionCleanup": "Limpeza", + "actionExport": "Exportação", + "actionTokenRotate": "Token rotacionado", + "actionGatewayConfigUpdate": "Configuração do gateway atualizada", + "actionWorkspaceCreate": "Espaço de trabalho criado", + "actionWorkspaceUpdate": "Espaço de trabalho atualizado", + "actionWorkspaceDelete": "Espaço de trabalho excluído", + "filterByActor": "Filtrar por ator...", + "noEvents": "Nenhum evento de auditoria encontrado", + "userRef": "usuário #{id}", + "previous": "Anterior", + "next": "Próximo", + "pageOf": "Página {page} de {total}", + "adminRequired": "Acesso de administrador necessário para visualizar os logs de auditoria", + "failedFetch": "Falha ao buscar o log de auditoria", + "detailUsername": "usuário", + "detailRole": "função", + "detailName": "nome", + "detailPasswordReset": "senha redefinida", + "detailChanged": "alterado", + "detailSize": "tamanho", + "detailMarkedOffline": "marcado como offline", + "detailAgent": "agente", + "detailSessions": "sessões", + "detailEvents": "eventos", + "detailRemoved": "removido", + "detailType": "tipo" + }, + "securityAudit": { + "title": "Auditoria de Segurança", + "subtitle": "Postura de segurança, eventos de autenticação, pontuações de confiança e detecção de ameaças", + "timeframeHour": "Hora", + "timeframeDay": "Dia", + "timeframeWeek": "Semana", + "timeframeMonth": "Mês", + "loadingSecurityData": "Carregando dados de segurança", + "securityPosture": "Postura de Segurança", + "blendedScore": "Pontuação combinada: 70% configuração de infraestrutura, 30% histórico de eventos.", + "infrastructureScan": "Varredura de Infraestrutura", + "scanCredentials": "Credenciais", + "scanNetwork": "Rede", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "Tempo de Execução", + "scanOs": "Segurança do SO", + "authEvents": "Eventos de Autenticação", + "noAuthEvents": "Nenhum evento de autenticação neste período", + "colType": "Tipo", + "colActor": "Ator", + "colIP": "IP", + "colTime": "Hora", + "agentTrustScores": "Pontuações de Confiança do Agente", + "noAgentTrustData": "Nenhum dado de confiança do agente disponível", + "flagged": "sinalizado", + "secretExposureAlerts": "Alertas de Exposição de Segredos", + "noSecretsDetected": "Nenhum segredo detectado", + "colFile": "Arquivo", + "colPreview": "Visualização", + "colStatus": "Status", + "colDetected": "Detectado", + "statusResolved": "resolvido", + "statusActive": "ativo", + "mcpToolAudit": "Auditoria de Ferramentas MCP", + "noToolUsageData": "Nenhum dado de uso de ferramentas", + "chartSuccess": "Sucesso", + "chartFailure": "Falha", + "rateLimitAbuseSignals": "Sinais de Limite de Taxa / Abuso", + "noRateLimitSignals": "Nenhum sinal de limite de taxa", + "hits": "{hits} acessos", + "injectionAttempts": "Tentativas de Injeção", + "noInjectionAttempts": "Nenhuma tentativa de injeção detectada", + "colSource": "Fonte", + "colInput": "Entrada", + "statusBlocked": "bloqueado", + "statusPassed": "passou", + "securityTimeline": "Linha do Tempo de Segurança ({timeframe})", + "noTimelineData": "Nenhum dado de linha do tempo", + "chartAuthEvents": "Eventos de Auth", + "chartInjections": "Injeções", + "chartSecrets": "Segredos", + "chartToolCalls": "Chamadas de Ferramentas", + "agentEvalDashboard": "Painel de Avaliação de Agentes", + "overallConvergence": "Convergência Geral", + "crossAgentAlignment": "Alinhamento entre agentes nas camadas de avaliação", + "noEvalData": "Nenhum dado de avaliação disponível", + "convergence": "Convergência:", + "drift": "deriva", + "fixPrefix": "Correção: {fix}", + "issueCount": "{count, plural, one {# problema} other {# problemas}}" + }, + "office": { + "title": "Ponte de Comando", + "subtitle": "Monitore sua equipe em tempo real", + "loadingLocalSessions": "Verificando sessões locais...", + "loadingOffice": "Carregando escritório...", + "activeCount": "{count} ativos", + "standbyCount": "{count} em espera", + "alertCount": "{count} alertas", + "offlineCount": "{count} offline", + "buttonDeck": "Ponte", + "buttonCrewChart": "Organograma", + "refresh": "Atualizar", + "emptyDeck": "A ponte está vazia", + "emptyDeckSubtitle": "Implante agentes para vê-los aparecer aqui", + "crewHeader": "TRIPULAÇÃO", + "onlineCount": "{count} online", + "filterAll": "Todos", + "filterWorking": "Trabalhando", + "filterIdle": "Inativo", + "filterNeedsAttention": "Precisa de Atenção", + "filterRunning": "Executando", + "filterNotRunning": "Não Executando", + "noWorkersInFilter": "Nenhum trabalhador neste filtro.", + "noRecentActivity": "Nenhuma atividade recente", + "activeStatus": "ativo", + "idleMinutes": "{minutes}m inativo", + "mainDeck": "PONTE PRINCIPAL", + "radarLabel": "Radar", + "resetView": "Redefinir", + "showCrewButton": "Mostrar Tripulação", + "hideCrewButton": "Ocultar Tripulação", + "showRadarButton": "Mostrar Radar", + "hideRadarButton": "Ocultar Radar", + "showLogButton": "Mostrar Registro", + "hideLogButton": "Ocultar Registro", + "resetLayout": "Redefinir Layout", + "deckLog": "Registro da Ponte", + "noEventsYet": "Nenhum evento ainda. Clique em uma zona ou execute uma ação.", + "legendActive": "Ativo", + "legendStandby": "Em espera", + "legendOther": "Outro", + "hotspotUp": "Cima", + "hotspotDown": "Baixo", + "hotspotLeft": "Esquerda", + "hotspotRight": "Direita", + "hotspotFineMinusX": "Fino -X", + "hotspotFinePlusX": "Fino +X", + "hotspotWider": "Mais largo", + "hotspotNarrower": "Mais estreito", + "hotspotTaller": "Mais alto", + "hotspotShorter": "Mais baixo", + "segmentedBy": "Segmentado por", + "segmentCategory": "Categoria", + "segmentRole": "Papel", + "segmentStatus": "Status", + "currentActivity": "Atividade Atual", + "taskStatTotal": "Total", + "taskStatAssigned": "Atribuídos", + "taskStatActive": "Ativos", + "taskStatDone": "Concluídos", + "sessionLabel": "Sessão:", + "quickActions": "Ações Rápidas", + "actionFocus": "Foco", + "actionPair": "Par", + "actionBreak": "Pausa", + "openFlightDeck": "Abrir no Flight Deck", + "openingFlightDeck": "Abrindo Flight Deck...", + "flightDeckCompanion": "Aplicativo companheiro privado/pro para análise profunda de sessões", + "flightDeckRequired": "Flight Deck Necessário", + "flightDeckDescription": "Flight Deck é o aplicativo companheiro privado/pro do Mission Control.", + "flightDeckNotInstalled": "Parece que o Flight Deck não está instalado nesta máquina. Instale-o para abrir sessões de agentes com controles e diagnósticos mais ricos.", + "maybeLater": "Talvez Depois", + "downloadFlightDeck": "Baixar Flight Deck", + "moving": "em movimento", + "neverSeen": "Nunca visto", + "justNow": "Agora mesmo", + "minutesAgo": "há {minutes}m", + "hoursAgo": "há {hours}h", + "daysAgo": "há {days}d" + }, + "githubSync": { + "title": "Sincronização de Issues do GitHub", + "subtitle": "Importe Issues do GitHub como tarefas do Mission Control", + "loading": "Carregando sincronização do GitHub...", + "connectedAs": "GitHub: {user}", + "notConfigured": "GitHub: não configurado", + "tokenNotConfigured": "Token do GitHub não configurado", + "tokenNotConfiguredDesc": "Defina GITHUB_TOKEN nas Integrações para habilitar a sincronização de issues. Você ainda pode navegar pelo histórico de sincronização e tarefas vinculadas.", + "importIssues": "Importar Issues", + "labelRepository": "Repositório", + "placeholderRepo": "proprietario/repo", + "labelLabels": "Labels (opcional)", + "placeholderLabels": "bug,melhoria", + "labelState": "Estado", + "stateOpen": "Aberto", + "stateClosed": "Fechado", + "stateAll": "Todos", + "labelAssignAgent": "Atribuir a Agente (opcional)", + "unassigned": "Não atribuído", + "buttonPreview": "Visualizar", + "buttonImport": "Importar", + "twoWaySync": "Sincronização Bidirecional", + "syncAll": "Sincronizar Tudo", + "enableSync": "Ativar", + "disableSync": "Desativar", + "syncButton": "Sincronizar", + "noProjectsLinked": "Nenhum projeto vinculado a repositórios do GitHub. Defina um repositório GitHub no Gerenciamento de Projetos.", + "previewTitle": "Visualização ({count} issues)", + "colNumber": "#", + "colTitle": "Título", + "colLabels": "Labels", + "colState": "Estado", + "colCreated": "Criado", + "syncHistory": "Histórico de Sincronização", + "colRepo": "Repositório", + "colIssues": "Issues", + "colStatus": "Status", + "colSyncedAt": "Sincronizado em", + "noSyncHistory": "Nenhum histórico de sincronização. Importe issues acima para começar.", + "linkedTasks": "Tarefas Vinculadas", + "linkedTasksWithCount": "Tarefas Vinculadas ({count})", + "colTask": "Tarefa", + "colPriority": "Prioridade", + "colGitHub": "GitHub", + "colSynced": "Sincronizado", + "noLinkedTasks": "Nenhuma tarefa vinculada a issues do GitHub ainda.", + "syncResultImported": "Importados: {count}", + "syncResultSkipped": "Ignorados: {count}", + "syncResultErrors": "Erros: {count}", + "enterRepo": "Digite um repositório (proprietario/repo)", + "noIssuesFound": "Nenhuma issue encontrada com os filtros atuais", + "failedFetchIssues": "Falha ao buscar issues", + "networkError": "Erro de rede", + "syncFailed": "Falha na sincronização", + "failedToggleSync": "Falha ao alternar sincronização", + "importedFeedback": "{imported} {imported, plural, one {issue importada} other {issues importadas}}, {skipped} ignoradas" + }, + "agentCost": { + "title": "Detalhamento de Custos por Agente", + "subtitle": "Análise de uso de tokens e gastos por agente", + "loadingAgentCosts": "Carregando custos dos agentes", + "viewOverview": "Visão Geral", + "viewPerAgentDB": "Por Agente (BD)", + "timeframeHour": "Hora", + "timeframeDay": "Dia", + "timeframeWeek": "Semana", + "timeframeMonth": "Mês", + "noAgentCostData": "Nenhum dado de custo de agente", + "noAgentCostSubtitle": "Os dados de custo aparecerão quando os agentes começarem a usar tokens", + "refresh": "Atualizar", + "activeAgents": "Agentes Ativos", + "totalCost": "Custo Total ({timeframe})", + "mostExpensive": "Mais Caro", + "mostEfficient": "Mais Eficiente", + "taskAttributed": "Atribuído a Tarefas", + "unattributed": "{cost} não atribuído", + "costDistributionByAgent": "Distribuição de Custos por Agente", + "noCostData": "Sem dados de custo", + "costTrends": "Tendências de Custos (Top 5 Agentes)", + "noTrendData": "Sem dados de tendência", + "costComparison": "Comparação de Custos", + "costEfficiency": "Eficiência de Custos ($/1K Tokens por Agente)", + "agentCostRanking": "Ranking de Custos por Agente", + "noTaskCosts": "Sem custos atribuídos a tarefas para este agente", + "tasksTab": "Tarefas ({count})", + "modelsTab": "Modelos ({count})", + "sessionCount": "{count, plural, one {# sessão} other {# sessões}}", + "requestCount": "{count, plural, one {# requisição} other {# requisições}}", + "tokens": "tokens", + "ofTotal": "{pct}% do total", + "reqs": "{count} requisições", + "inputTokens": "Tokens de Entrada", + "outputTokens": "Tokens de Saída", + "ioRatio": "Proporção E/S", + "lastActive": "Último Ativo", + "modelBreakdown": "Detalhamento por Modelo", + "inSuffix": "entrada", + "outSuffix": "saída", + "noPerAgentData": "Nenhum dado por agente no banco de dados", + "noPerAgentDataSubtitle": "Os registros de uso de tokens aparecerão quando os agentes começarem a enviar heartbeats", + "agentCountDB": "Agentes (BD)", + "totalCostDays": "Custo Total ({days}d)", + "totalTokens": "Total de Tokens", + "avgPer1kTokens": "Média $/1K Tokens", + "perAgentCostDB": "Custo por Agente (BD)", + "agentTokenBreakdown": "Detalhamento de Tokens por Agente", + "chartCost": "Custo ($)" + }, + "tokenDashboard": { + "title": "Painel de Tokens e Custos", + "subtitle": "Monitorar uso de tokens e custos em modelos e sessões", + "viewOverview": "Visão Geral", + "viewSessions": "Sessões", + "timeframeHour": "Hora", + "timeframeDay": "Dia", + "timeframeWeek": "Semana", + "timeframeMonth": "Mês", + "filtersLabel": "Filtros:", + "clearAll": "Limpar tudo", + "timezoneLabel": "Fuso horário:", + "sortByLabel": "Ordenar por:", + "noSessionCostData": "Nenhum dado de custo de sessão", + "noSessionCostSubtitle": "Os detalhamentos por sessão aparecerão quando o uso for registrado.", + "sessionActive": "Ativo", + "sessionInactive": "Inativo", + "requests": "requisições", + "inSuffix": "entrada", + "outSuffix": "saída", + "avgPerRequest": "média/requisição", + "loadingUsageData": "Carregando dados de uso", + "totalTokens": "Total de Tokens ({timeframe})", + "totalCost": "Custo Total ({timeframe})", + "apiRequests": "Requisições de API", + "avgTokensPerRequest": "Média de Tokens/Requisição", + "cacheReadTokens": "Tokens de Leitura em Cache", + "cacheWriteTokens": "Tokens de Escrita em Cache", + "usageTrends": "Tendências de Uso ({timeframe})", + "peakLabel": "Pico:", + "perTurnButton": "Por Turno", + "cumulativeButton": "Cumulativo", + "noTrendData": "Nenhum dado de tendência para este período", + "chartTokens": "Tokens", + "chartRequests": "Requisições", + "tokenUsageByModel": "Uso de Tokens por Modelo", + "noModelUsageData": "Nenhum dado de uso de modelo ainda", + "costDistributionByModel": "Distribuição de Custos por Modelo", + "noCostData": "Nenhum dado de custo ainda", + "costByProvider": "Custos por Provedor", + "noProviderData": "Nenhum dado de provedor ainda", + "exportData": "Exportar Dados", + "exportCsvFiltered": "Exportar CSV (Filtrado)", + "exportCsvFull": "Exportar CSV (Completo)", + "exportJson": "Exportar JSON", + "exporting": "Exportando...", + "exportDescription": "Exportar dados de uso de tokens para análise. \"Filtrado\" exporta apenas os dados exibidos atualmente; \"Completo\" exporta todos os registros do servidor.", + "performanceInsights": "Análises de Desempenho", + "mostEfficientModel": "Modelo Mais Eficiente", + "mostUsedModel": "Modelo Mais Usado", + "optimizationPotential": "Potencial de Otimização", + "savingsPossible": "{pct}% de economia possível", + "modelEfficiencyComparison": "Comparação de Eficiência de Modelos", + "modelPerformance": "Desempenho do Modelo", + "topSessionsByCost": "Sessões Principais por Custo", + "requestsLabel": "Requisições", + "avgCost": "Custo Médio", + "avgTokens": "Tokens Médios", + "noUsageData": "Nenhum dado de uso disponível", + "noUsageDataSubtitle": "O uso de tokens aparecerá aqui quando os agentes começarem a ser executados", + "refresh": "Atualizar" + }, + "memoryBrowser": { + "hideSidebar": "Ocultar barra lateral", + "showSidebar": "Mostrar barra lateral", + "fileCountSize": "{count} arquivos / {size}", + "indexing": "indexando…", + "newFile": "+ novo", + "searchPlaceholder": "Pesquisar arquivos...", + "searchResults": "{count} resultados", + "noFiles": "sem arquivos", + "refresh": "atualizar", + "toggleBacklinks": "Alternar painel de backlinks", + "links": "links", + "edit": "editar", + "delete": "excluir", + "save": "salvar", + "saving": "salvando...", + "cancel": "cancelar", + "selectFilePrompt": "selecionar um arquivo para visualizar", + "orSwitchView": "ou alternar para a visualização de saúde / pipeline", + "schemaWarnings": "Avisos de esquema:", + "editPlaceholder": "Editar conteúdo do arquivo...", + "loadingHermes": "Carregando memória Hermes", + "noHermesData": "Sem dados de memória Hermes", + "hermesMemoryTitle": "Memória Hermes", + "hermesMemoryDesc": "Visualização somente leitura dos arquivos de memória persistente do agente Hermes", + "noAgentMemory": "Nenhum arquivo de memória do agente encontrado", + "noUserMemory": "Nenhum arquivo de memória do usuário encontrado", + "runningDiagnostics": "Executando diagnósticos", + "noHealthData": "Sem dados de saúde", + "runDiagnostics": "Executar diagnósticos", + "healthCategories": "8 categorias / {time}", + "pipelineTitle": "Pipeline de processamento", + "pipelineDesc": "Operações de manutenção de conhecimento inspiradas nos 6 Rs do Ars Contexta", + "pipelineReflect": "Refletir", + "pipelineReflectDesc": "Encontrar oportunidades de conexão entre arquivos", + "pipelineReweave": "Retecido", + "pipelineReweaveDesc": "Encontrar arquivos desatualizados que precisam de atualizações de arquivos mais recentes", + "pipelineGenerateMoc": "Gerar MOC", + "pipelineGenerateMocDesc": "Gerar automaticamente Mapas de Conteúdo a partir de clusters de arquivos", + "processing": "Processando", + "filesProcessed": "{count} arquivos processados", + "noSuggestions": "Sem sugestões — a base de conhecimento está bem conectada", + "mapsOfContent": "Mapas de Conteúdo ({count} grupos)", + "newFileTitle": "novo arquivo", + "directory": "diretório", + "fileName": "nome", + "fileType": "tipo", + "content": "conteúdo", + "contentOptional": "opcional...", + "create": "Criar", + "deleteFileTitle": "excluir arquivo", + "permanentlyDelete": "excluir permanentemente:", + "outgoing": "Saídas ({count})", + "backlinks": "Backlinks ({count})", + "wikiLinks": "Wiki-links ({count})" + }, + "userManagement": { + "adminAccessRequired": "Acesso de administrador necessário", + "failedToLoadUsers": "Falha ao carregar usuários", + "failedToCreate": "Falha ao criar usuário", + "networkError": "Erro de rede", + "userUpdated": "Usuário atualizado", + "failedToUpdate": "Falha ao atualizar", + "deletedUser": "Usuário \"{username}\" excluído", + "failedToDelete": "Falha ao excluir", + "failedToAction": "Falha ao {action} a solicitação", + "requestActioned": "Solicitação {action} para {email}", + "user": "usuário", + "accessDenied": "Acesso negado", + "adminRequired": "O gerenciamento de usuários requer privilégios de administrador.", + "loadingUsers": "Carregando usuários...", + "usersTitle": "Usuários", + "usersSummary": "{count} usuários registrados · {pending} aprovações pendentes", + "addLocalUser": "+ Adicionar usuário local", + "cancel": "Cancelar", + "pendingRequests": "{count, plural, one {# solicitação de acesso pendente} other {# solicitações de acesso pendentes}}", + "identity": "Identidade", + "attempts": "Tentativas", + "lastAttempt": "Última tentativa", + "action": "Ação", + "roleViewer": "Visualizador", + "roleOperator": "Operador", + "roleAdmin": "Administrador", + "noteOptional": "Nota (opcional)", + "confirm": "Confirmar", + "reject": "Rejeitar", + "review": "Revisar", + "newLocalUser": "Novo usuário local", + "username": "Nome de usuário", + "password": "Senha", + "displayName": "Nome de exibição", + "creating": "Criando...", + "createUser": "Criar usuário", + "colUser": "Usuário", + "colProvider": "Provedor", + "colRole": "Função", + "colLastLogin": "Último login", + "colActions": "Ações", + "newPasswordOptional": "Nova senha (opcional)", + "save": "Salvar", + "edit": "Editar", + "delete": "Excluir", + "never": "Nunca", + "createdUser": "Usuário \"{username}\" criado" + }, + "alertRules": { + "title": "Regras de alerta", + "description": "Configurar alertas automáticos para eventos de agentes, tarefas e sistema", + "evaluating": "Avaliando...", + "evaluateNow": "Avaliar agora", + "newRule": "+ Nova regra", + "statTotalRules": "Total de regras", + "statActive": "Ativas", + "statTotalTriggers": "Total de acionamentos", + "evalResultsTitle": "Resultados de avaliação", + "dismiss": "Dispensar", + "triggered": "ACIONADO", + "noRulesToEvaluate": "Nenhuma regra para avaliar", + "loadingRules": "Carregando regras...", + "noRulesConfigured": "Nenhuma regra de alerta configurada", + "createRuleHint": "Criar uma regra para ser notificado sobre eventos do sistema", + "never": "Nunca", + "cooldown": "Resfriamento: {minutes}m", + "triggerCount": "Acionado: {count}x", + "lastTriggered": "Último: {time}", + "deleteRule": "Excluir regra", + "newRuleTitle": "Nova regra de alerta", + "ruleName": "Nome da regra", + "ruleNamePlaceholder": "ex.: Alerta de agente offline", + "ruleDescription": "Descrição", + "optionalDescription": "Descrição opcional", + "entity": "Entidade", + "entityAgent": "Agente", + "entityTask": "Tarefa", + "entitySession": "Sessão", + "entityActivity": "Atividade", + "field": "Campo", + "operator": "Operador", + "value": "Valor", + "valuePlaceholder": "ex.: error", + "cooldownMinutes": "Resfriamento (minutos)", + "notifyRecipient": "Notificar (destinatário)", + "cancel": "Cancelar", + "creating": "Criando...", + "createRule": "Criar regra", + "failedToCreate": "Falha ao criar a regra", + "networkError": "Erro de rede" + }, + "agentSquad": { + "failedToFetch": "Falha ao buscar agentes", + "errorOccurred": "Ocorreu um erro", + "failedToUpdateStatus": "Falha ao atualizar o status do agente", + "loadingAgents": "Carregando agentes", + "title": "Equipe de agentes", + "live": "Ao vivo", + "manual": "Manual", + "addAgent": "+ Adicionar agente", + "refresh": "Atualizar", + "noAgents": "Nenhum agente encontrado", + "addFirstAgent": "Adicione seu primeiro agente para começar", + "session": "Sessão", + "totalTasks": "Total de tarefas", + "inProgress": "Em andamento", + "lastSeen": "Visto pela última vez", + "activity": "Atividade", + "wake": "Acordar", + "busy": "Ocupado", + "sleep": "Dormir", + "statusControl": "Controle de status", + "role": "Função", + "sessionKey": "Chave de sessão", + "notSet": "Não definido", + "soulContent": "Conteúdo SOUL", + "soulPlaceholder": "Personalidade e instruções do agente...", + "taskStatistics": "Estatísticas de tarefas", + "total": "Total", + "assigned": "Atribuídas", + "done": "Concluídas", + "created": "Criado", + "lastUpdated": "Última atualização", + "saveChanges": "Salvar alterações", + "cancel": "Cancelar", + "editAgent": "Editar agente", + "createNewAgent": "Criar novo agente", + "name": "Nome", + "rolePlaceholder": "ex.: pesquisador, desenvolvedor, analista", + "sessionKeyOptional": "Chave de sessão (opcional)", + "sessionKeyPlaceholder": "Identificador de sessão ClawdBot", + "soulContentOptional": "Conteúdo SOUL (opcional)", + "createAgent": "Criar agente", + "failedToUpdate": "Falha ao atualizar o agente", + "failedToCreate": "Falha ao criar o agente", + "never": "Nunca", + "justNow": "Agora mesmo", + "minutesAgo": "há {count}m", + "hoursAgo": "há {count}h", + "daysAgo": "há {count}d" + }, + "multiGateway": { + "title": "Gerenciador de gateways", + "description": "Gerenciar múltiplas conexões de gateway OpenClaw", + "probeAll": "Sondar tudo", + "addGateway": "+ Adicionar gateway", + "connected": "Conectado", + "disconnected": "Desconectado", + "noActiveConnection": "Sem conexão ativa", + "loadingGateways": "Carregando gateways...", + "noGateways": "Nenhum gateway configurado", + "addGatewayHint": "Adicionar um gateway para começar a gerenciar conexões", + "discoveredGateways": "Gateways descobertos", + "discoveredGatewaysDesc": "Gateways OpenClaw encontrados nesta máquina", + "refresh": "Atualizar", + "running": "EM EXECUÇÃO", + "stopped": "PARADO", + "bind": "Bind", + "mode": "Modo", + "register": "Registrar", + "directCliConnections": "Conexões CLI diretas", + "directCliDesc": "Ferramentas CLI conectadas diretamente sem um gateway", + "noDirectConnections": "Sem conexões CLI diretas", + "useApiConnect": "Use", + "toRegisterCli": "para registrar uma ferramenta CLI", + "role": "Função", + "heartbeat": "Heartbeat", + "never": "Nunca", + "disconnect": "Desconectar", + "neverProbed": "Nunca sondado", + "primary": "PRIMÁRIO", + "connectedBadge": "CONECTADO", + "token": "Token", + "tokenSet": "Definido", + "tokenNone": "Nenhum", + "latency": "Latência", + "last": "Último", + "gatewayVersion": "Versão do gateway", + "noHistory": "Sem histórico ainda", + "colorKey": "Legenda de cores", + "colorKeyTitle": "Verde = online; âmbar = erro; vermelho = offline", + "lastLatency": "Última latência: {ms}ms", + "probeGateway": "Sondar gateway", + "probing": "Sondando...", + "probe": "Sondar", + "connectToGateway": "Conectar a este gateway", + "connect": "Conectar", + "setPrimaryTitle": "Definir como principal", + "setPrimary": "Definir como principal", + "removeGateway": "Remover gateway", + "addGatewayTitle": "Adicionar gateway", + "name": "Nome", + "namePlaceholder": "ex.: primary", + "host": "Host", + "port": "Porta", + "tokenField": "Token", + "optional": "Opcional", + "cancel": "Cancelar", + "adding": "Adicionando...", + "addGatewaySubmit": "Adicionar gateway", + "failedToAdd": "Falha ao adicionar o gateway", + "networkError": "Erro de rede" + }, + "nodes": { + "title": "Nós / Instâncias", + "gatewayConnected": "Gateway conectado", + "gatewayUnreachable": "Gateway inacessível", + "tabInstances": "Instâncias ({count})", + "tabDevices": "Dispositivos ({count})", + "loading": "Carregando...", + "noInstances": "Nenhuma instância ativa. Os nós aparecem aqui quando se conectam ao gateway.", + "colName": "Nome", + "colClientId": "ID do cliente", + "colPlatform": "Plataforma", + "colVersion": "Versão", + "colRoles": "Funções", + "colStatus": "Status", + "colConnected": "Conectado", + "colLastActivity": "Última atividade", + "colHostIp": "Host / IP", + "colDeviceId": "ID do dispositivo", + "colPaired": "Pareado", + "colLastSeen": "Visto pela última vez", + "colTrust": "Confiança", + "colActions": "Ações", + "pendingPairingRequests": "Solicitações de pareamento pendentes ({count})", + "approve": "Aprovar", + "approving": "Aprovando...", + "reject": "Rejeitar", + "rejecting": "Rejeitando...", + "noPairedDevices": "Nenhum dispositivo pareado.", + "pairedDevices": "Dispositivos pareados ({count})", + "trusted": "confiável", + "untrusted": "não confiável", + "rotateToken": "Rotacionar token", + "revokeConfirm": "Revogar?", + "yes": "Sim", + "no": "Não", + "revoke": "Revogar", + "hideTokens": "Ocultar tokens", + "tokens": "Tokens ({count})", + "tokenUsed": "usado {time}", + "revoked": "revogado", + "rotate": "Rotacionar" + }, + "activityFeed": { + "title": "Atividade", + "live": "Ao vivo", + "paused": "Pausado", + "refresh": "Atualizar", + "filterAgent": "Agente", + "filterAll": "Todos", + "filterType": "Tipo", + "allTypes": "Todos os tipos", + "filterLimit": "Limite", + "loadingActivities": "Carregando atividades", + "noActivities": "Nenhuma atividade encontrada", + "noActivityForAgent": "Nenhuma atividade registrada para {agent}", + "tryAdjustingFilters": "Tente ajustar seus filtros", + "entityTask": "Tarefa:", + "entityCommentOn": "Comentário em:", + "entityAgent": "Agente:", + "showDetails": "Mostrar detalhes", + "activeSessions": "Sessões ativas", + "agentStatus": "Status", + "lastSeen": "Visto pela última vez", + "lastAction": "Última ação", + "tasksAssigned": "Tarefas atribuídas", + "inProgress": "Em andamento", + "completed": "Concluído", + "events": "{count} eventos", + "newer": "Mais recente", + "older": "Mais antigo", + "pageOf": "Página {page} de {total}", + "footerAgentEvents": "{total} eventos para {agent}", + "footerShowing": "Exibindo {count} atividades{filtered}", + "filtered": " (filtrado)", + "lastUpdated": "Última atualização: {time}" + }, + "standup": { + "title": "Standup diário", + "viewCurrent": "Atual", + "viewHistory": "Histórico", + "generating": "Gerando...", + "generate": "Gerar", + "export": "Exportar", + "standupFor": "Standup de {date}", + "generatedOn": "Gerado em {date}", + "statCompleted": "Concluído", + "statInProgress": "Em andamento", + "statBlocked": "Bloqueado", + "statOverdue": "Vencido", + "teamAccomplishments": "Realizações da equipe", + "teamBlockers": "Bloqueadores da equipe", + "overdueTasks": "Tarefas vencidas", + "unassigned": "Não atribuído", + "individualReports": "Relatórios individuais", + "activitySummary": "Atividade: {actions} ações, {comments} comentários", + "sectionCompleted": "Concluído ({count})", + "sectionInProgress": "Em andamento ({count})", + "sectionAssigned": "Atribuído ({count})", + "sectionBlocked": "Bloqueado ({count})", + "none": "Nenhum", + "noStandupGenerated": "Nenhum standup gerado", + "selectDatePrompt": "Selecione uma data e gere um relatório", + "generateToday": "Gerar standup de hoje", + "noHistory": "Nenhum histórico de standup encontrado", + "historyGenerated": "Gerado: {date}", + "historyAgentsParticipated": "{count} agentes participaram", + "historyCompleted": "Concluído: {count}", + "historyInProgress": "Em andamento: {count}", + "historyBlocked": "Bloqueado: {count}" + }, + "webhooks": { + "title": "Webhooks", + "configured": "{count, plural, one {# webhook configurado} other {# webhooks configurados}}", + "addWebhook": "+ Adicionar webhook", + "secretLabel": "Segredo do webhook (salve agora - exibido apenas uma vez)", + "dismiss": "Dispensar", + "testSuccessful": "Teste bem-sucedido", + "testFailed": "Teste falhou", + "testStatus": "Status:", + "testDuration": "Duração:", + "testError": "Erro:", + "localAutomations": "Automatizações de webhook locais", + "localAutomationsDesc": "Tarefas do agendador local que suportam entrega e novas tentativas de webhook", + "nextRun": "Próxima execução {time}", + "noNextRun": "Nenhuma próxima execução agendada", + "running": "Executando...", + "run": "Executar", + "noWebhooks": "Nenhum webhook configurado", + "noWebhooksDesc": "Adicione um webhook para receber notificações HTTP de eventos", + "allEvents": "Todos os eventos", + "eventCount": "{count, plural, one {# evento} other {# eventos}}", + "deliveries": "{count} entregas", + "failed": "{count} falharam", + "lastFired": "Último disparo {time}", + "sendTestEvent": "Enviar evento de teste", + "testing": "Testando...", + "test": "Testar", + "disable": "Desabilitar", + "enable": "Habilitar", + "delete": "Excluir", + "recentDeliveries": "Entregas recentes", + "noDeliveries": "Nenhuma entrega registrada ainda", + "newWebhook": "Novo webhook", + "formName": "Nome", + "formUrl": "URL", + "formEvents": "Eventos", + "cancel": "Cancelar", + "createWebhook": "Criar webhook" + }, + "skills": { + "title": "Hub de habilidades", + "subtitle": "Gerencie habilidades localmente e navegue por registros externos.", + "localMode": "Modo local", + "gatewayMode": "Modo gateway", + "tabInstalled": "Instalado", + "tabRegistry": "Registro", + "searchPlaceholder": "Busca rápida de habilidades instaladas...", + "searchResults": "Exibindo {count} de {total} habilidades correspondentes a \"{query}\"", + "diskSyncActive": "Sincronização de disco bidirecional ativa (agendador a cada 60s)", + "scanAll": "Verificar todos", + "scanningProgress": "Verificando {done}/{total}...", + "refreshNow": "Atualizar agora", + "scanning": "Verificando:", + "skillsScanned": "{count} habilidades verificadas", + "dismiss": "dispensar", + "addSkill": "Adicionar habilidade", + "initialContent": "Conteúdo inicial do SKILL.md", + "loadingSkills": "Carregando habilidades...", + "skillCount": "{count} de {total} habilidades", + "noMatch": "Nenhuma habilidade corresponde a este filtro.", + "scan": "Verificar", + "view": "Visualizar", + "registrySearchPlaceholder": "Buscar habilidades...", + "searching": "Buscando...", + "search": "Buscar", + "installTo": "Instalar em:", + "installing": "Instalando...", + "install": "Instalar", + "noRegistryResults": "Nenhum resultado encontrado para \"{query}\" em {registry}. Tente uma consulta diferente ou mude de registro.", + "registryPrompt": "Pesquise no ClawdHub, skills.sh ou Awesome OpenClaw para descobrir e instalar habilidades de agentes.", + "skillInstalled": "Habilidade instalada", + "installFailed": "Instalação falhou", + "installingSkill": "Instalando habilidade", + "stepFetching": "Buscando SKILL.md do registro", + "stepScanning": "Executando verificação de segurança", + "stepWriting": "Gravando no disco e registrando", + "security": "Segurança", + "viewInstalled": "Ver instalados", + "done": "Concluído", + "close": "Fechar", + "delete": "Excluir", + "save": "Salvar", + "loadingSkillContent": "Carregando SKILL.md...", + "noContent": "Sem conteúdo." + }, + "orchestration": { + "tabCommand": "Comando", + "tabWorkflows": "Fluxos de trabalho", + "tabPipelines": "Pipelines", + "tabFleet": "Frota", + "selectAgent": "Selecionar agente...", + "commandPlaceholder": "Enviar comando ou mensagem ao agente...", + "send": "Enviar", + "noTemplates": "Nenhum modelo de fluxo de trabalho ainda", + "createFirstTemplate": "Criar seu primeiro modelo", + "cancel": "Cancelar", + "new": "+ Novo", + "editTemplate": "Editar modelo", + "newTemplate": "Novo modelo", + "templateName": "Nome do modelo", + "templateDescription": "Descrição (opcional)", + "taskPromptPlaceholder": "Prompt de tarefa para o agente...", + "timeout": "Tempo limite", + "role": "Função", + "lastRun": "Última execução", + "update": "Atualizar", + "save": "Salvar", + "totalAgents": "Total de agentes", + "online": "Online", + "busy": "Ocupado", + "errors": "Erros" + } +} diff --git a/messages/ru.json b/messages/ru.json new file mode 100644 index 0000000000000000000000000000000000000000..a93f04d8b356dffce4696d244d6ef45b08c70bac --- /dev/null +++ b/messages/ru.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "Сохранить", + "cancel": "Отмена", + "loading": "Загрузка...", + "error": "Ошибка", + "search": "Поиск", + "confirm": "Подтвердить", + "delete": "Удалить", + "edit": "Редактировать", + "close": "Закрыть", + "back": "Назад", + "next": "Далее", + "retry": "Повторить", + "or": "или", + "optional": "необязательно", + "language": "Язык", + "dismiss": "Скрыть", + "continue": "Продолжить", + "selected": "Выбрано", + "detected": "Обнаружено", + "now": "сейчас", + "tryAgain": "Попробовать снова", + "skipToMainContent": "Перейти к основному содержимому", + "builtWithCareBy": "Создано с заботой", + "viewRelease": "Посмотреть релиз", + "updateNow": "Обновить сейчас", + "showDetails": "Показать подробности", + "hideDetails": "Скрыть подробности", + "moreIssues": "+ ещё {count} {count, plural, one {проблема} few {проблемы} other {проблем}}" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "Войдите, чтобы продолжить", + "username": "Имя пользователя", + "password": "Пароль", + "signIn": "Войти", + "signingIn": "Вход...", + "signInWithGoogle": "Войти через Google", + "loadingGoogleSignIn": "Загрузка входа через Google...", + "googleSignInFailed": "Ошибка входа через Google", + "networkError": "Ошибка сети", + "loginFailed": "Ошибка входа", + "enterUsername": "Введите имя пользователя", + "enterPassword": "Введите пароль", + "orchestrationTagline": "Оркестрация агентов OpenClaw", + "accessRequestSubmitted": "Запрос на доступ отправлен", + "accessRequestDescription": "Ваш запрос отправлен администратору на рассмотрение. Вы сможете войти после одобрения.", + "tryAgain": "Попробовать снова", + "noAdminAccount": "Учётная запись администратора ещё не создана", + "noAdminDescription": "Настройте учётную запись администратора, чтобы начать работу с Mission Control.", + "createAdminAccount": "Создать учётную запись администратора", + "welcomeToMC": "Добро пожаловать в Mission Control", + "settingUpMC": "Настройка Mission Control", + "createAdminToStart": "Создайте учётную запись администратора, чтобы начать", + "creatingAdmin": "Создание учётной записи администратора...", + "displayName": "Отображаемое имя", + "confirmPassword": "Подтвердите пароль", + "atLeast12Chars": "Не менее 12 символов", + "repeatPassword": "Повторите пароль", + "passwordsDoNotMatch": "Пароли не совпадают", + "passwordTooShort": "Пароль должен содержать не менее 12 символов", + "moreCharsNeeded": "{count, plural, one {Нужен ещё {count} символ} few {Нужно ещё {count} символа} other {Нужно ещё {count} символов}}", + "firstTimeSetupOnly": "Эта страница доступна только при первоначальной настройке.", + "checkingSetupStatus": "Проверка состояния настройки...", + "setupFailed": "Ошибка настройки", + "failedToCheckSetup": "Не удалось проверить состояние настройки", + "validatingCredentials": "Проверка учётных данных", + "creatingAdminAccount": "Создание учётной записи администратора", + "configuringSession": "Настройка сессии", + "launchingDashboard": "Запуск панели управления", + "usernameHint": "Только строчные буквы, цифры, точки, дефисы и подчёркивания" + }, + "nav": { + "overview": "Обзор", + "agents": "Агенты", + "tasks": "Задачи", + "chat": "Чат", + "channels": "Каналы", + "skills": "Навыки", + "memory": "Память", + "activity": "Активность", + "logs": "Журналы", + "costTracker": "Учёт затрат", + "nodes": "Узлы", + "approvals": "Согласования", + "office": "Офис", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "Оповещения", + "github": "GitHub", + "security": "Безопасность", + "users": "Пользователи", + "audit": "Аудит", + "gateway": "Шлюз", + "gateways": "Шлюзы", + "config": "Конфигурация", + "integrations": "Интеграции", + "debug": "Отладка", + "settings": "Настройки", + "group": { + "observe": "МОНИТОРИНГ", + "automate": "АВТОМАТИЗАЦИЯ", + "admin": "АДМИН" + }, + "collapseSidebar": "Свернуть боковую панель", + "expandSidebar": "Развернуть боковую панель", + "more": "Ещё" + }, + "settings": { + "language": "Язык", + "languageDescription": "Выберите предпочитаемый язык интерфейса", + "general": "Общие", + "security": "Безопасность", + "dataRetention": "Хранение данных", + "chatSettings": "Чат", + "gatewaySettings": "Шлюз", + "title": "Настройки", + "description": "Настройте поведение Mission Control и политики хранения данных", + "discard": "Отменить", + "save": "Сохранить", + "saving": "Сохранение...", + "saveChanges": "Сохранить изменения", + "workspaceManagementLabel": "Управление рабочим пространством:", + "workspaceManagementDesc1": "Для создания рабочих пространств (экземпляров арендаторов) перейдите на панель", + "superAdmin": "Супер-администратор", + "workspaceManagementDesc2": "в разделе Администратор > Супер-администратор на боковой панели. Там вы можете создавать новые клиентские экземпляры, управлять арендаторами и отслеживать задания подготовки.", + "securityDescription": "Сканирование состояния безопасности вашей станции", + "securityScan": "Сканирование безопасности", + "hideScan": "Скрыть сканирование", + "backups": "Резервные копии", + "backupsDescription": "Создавайте резервные копии базы данных MC или состояния шлюза по запросу", + "backupMcDatabase": "Резервная копия БД MC", + "backupGatewayState": "Резервная копия состояния шлюза", + "backingUp": "Создание резервной копии...", + "onboarding": "Онбординг", + "onboardingDescription": "Повторите мастер настройки и сбросьте контрольный список панели управления", + "replayOnboarding": "Повторить онбординг", + "resetting": "Сброс..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "Оркестрация агентов", + "authenticatingOperator": "Аутентификация оператора", + "detectingStationMode": "Определение режима станции", + "loadingControlConfig": "Загрузка конфигурации управления", + "connectingRuntimeLinks": "Подключение связей среды выполнения", + "syncingAgentRegistry": "Синхронизация реестра агентов", + "loadingActiveSessions": "Загрузка активных сессий", + "hydratingWorkspaceBoard": "Инициализация рабочей панели", + "mappingMemoryGraph": "Построение графа памяти", + "indexingSkillCatalog": "Индексация каталога навыков" + }, + "header": { + "workspace": "Рабочее пространство", + "sessions": "Сессии", + "events": "События", + "live": "Живой", + "off": "Выкл", + "local": "Локальный", + "connected": "Подключено", + "disconnected": "Отключено", + "reconnecting": "Переподключение", + "offline": "Офлайн", + "retry": "Попытка {count}", + "jumpToSearch": "Перейти к странице, задаче, агенту...", + "searchPlaceholder": "Поиск задач, агентов, активности или введите команду страницы...", + "searching": "Поиск...", + "noResults": "Результатов не найдено", + "typeToSearch": "Введите для поиска сущностей или мгновенного перехода к страницам", + "gatewayConnection": "Подключение шлюза", + "status": "Статус", + "host": "Хост", + "latency": "Задержка", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "Попытки", + "clickToReconnect": "Нажмите для переподключения", + "down": "Недоступен", + "goToOverview": "Перейти к обзору", + "goToChat": "Перейти к чату", + "goToTasks": "Перейти к задачам", + "goToAgents": "Перейти к агентам", + "goToActivityFeed": "Перейти к ленте активности", + "goToNotifications": "Перейти к уведомлениям", + "goToTokenUsage": "Перейти к использованию токенов", + "goToLogs": "Перейти к журналам", + "goToMemoryBrowser": "Перейти к обозревателю памяти", + "goToIntegrations": "Перейти к интеграциям", + "goToSettings": "Перейти к настройкам", + "goToGateways": "Перейти к шлюзам", + "goToGithubSync": "Перейти к синхронизации GitHub", + "goToOffice": "Перейти к офису", + "goToSkills": "Перейти к навыкам", + "quickNavigation": "Быстрая навигация" + }, + "contextSwitcher": { + "localMode": "Локальный режим", + "connected": "Подключено", + "disconnected": "Отключено", + "interface": "Интерфейс", + "essential": "Базовый", + "full": "Полный", + "organizations": "ОРГАНИЗАЦИИ", + "all": "Все", + "noTools": "нет инструментов", + "unlinked": "не привязан", + "newOrganization": "Новая организация...", + "usernamePlaceholder": "Имя пользователя (пользователь ОС)", + "displayNamePlaceholder": "Отображаемое имя", + "gatewayPortPlaceholder": "Порт шлюза (обязательно)", + "installTools": "УСТАНОВИТЬ ИНСТРУМЕНТЫ", + "usernameAndDisplayRequired": "Имя пользователя и отображаемое имя обязательны", + "invalidUsernameFormat": "Недопустимый формат имени пользователя", + "gatewayPortRequired": "Порт шлюза обязателен", + "creating": "Создание...", + "createUser": "Создать пользователя", + "createAndQueue": "Создать + В очередь" + }, + "localModeBanner": { + "noGatewayDetected": "Шлюз OpenClaw не обнаружен", + "runningInLocalMode": " — работа в локальном режиме. Мониторинг сессий Claude Code, задач и локальных данных.", + "configureGateway": "Настроить шлюз" + }, + "updateBanner": { + "updating": "Обновление...", + "restartingServer": "Перезапуск сервера...", + "updateAvailable": "Доступно обновление: v{version}", + "newerVersionAvailable": " — доступна более новая версия Mission Control.", + "updateFailed": "Ошибка обновления", + "networkError": "Ошибка сети — не удалось связаться с сервером." + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "Обновление OpenClaw...", + "openclawUpdated": "OpenClaw обновлён до v{version}", + "openclawUpdateAvailable": "Обновление OpenClaw: доступна v{version}", + "installed": "установлено: v{version}", + "changelog": "Журнал изменений", + "copied": "Скопировано!", + "copyCommand": "Копировать команду", + "updateFailed": "Ошибка обновления", + "networkError": "Ошибка сети — не удалось связаться с сервером." + }, + "doctorBanner": { + "fixCompleted": "Исправление доктора OpenClaw завершено", + "configDrift": "Обнаружен дрейф конфигурации OpenClaw", + "stateIntegrity": "Предупреждение о целостности состояния OpenClaw", + "securityWarning": "Предупреждение безопасности OpenClaw", + "doctorWarnings": "Предупреждения доктора OpenClaw", + "runningFixes": "Выполнение исправлений доктора OpenClaw...", + "cleaningSessionStores": "Очистка хранилищ сессий...", + "archivingOrphanTranscripts": "Архивация осиротевших транскриптов...", + "recheckingHealth": "Повторная проверка здоровья текущего экземпляра...", + "fixFailed": "Ошибка исправления доктора OpenClaw", + "networkError": "Ошибка сети — не удалось связаться с сервером.", + "runningFix": "Выполнение исправления...", + "runDoctorFix": "Запустить исправление доктора" + }, + "liveFeed": { + "liveFeed": "Живая лента", + "showLiveFeed": "Показать живую ленту", + "collapseFeed": "Свернуть ленту", + "closeFeed": "Закрыть ленту", + "noActivityYet": "Пока нет активности", + "eventsAppearLocal": "События появляются при создании задач или обновлении агентов", + "eventsStreamGateway": "События транслируются сюда со шлюза и локальной базы данных", + "activeSessions": "Активные сессии", + "noActiveSessions": "Нет активных сессий", + "activeSession": "Активная", + "idleSession": "Неактивная" + }, + "errorBoundary": { + "somethingWentWrong": "Что-то пошло не так", + "unexpectedError": "В этой панели произошла непредвиденная ошибка." + }, + "page": { + "showLiveFeed": "Показать живую ленту", + "availableInFullMode": "{panel} доступен в полном режиме.", + "switchToFull": "Переключить на полный", + "goToOverview": "Перейти к обзору", + "requiresGateway": "{panel} требует подключения к шлюзу OpenClaw.", + "configureGateway": "Настройте шлюз для активации этой панели." + }, + "onboarding": { + "stationOnline": "Станция онлайн", + "stationReady": "Ваша станция готова к приёму агентов.", + "welcome": { + "title": "Добро пожаловать в Mission Control", + "description": "Ваша станция для ИИ-агентов. Когда агенты стыкуются здесь, они получают постоянную память, управление задачами, координированные рабочие процессы и полную наблюдаемость. Мы просканировали вашу конфигурацию — вот что онлайн.", + "availableModes": "Доступные режимы", + "localMode": "Локальный режим", + "gatewayMode": "Режим шлюза", + "monitorClaude": "Мониторинг сессий Claude Code на этой машине", + "taskTracking": "Отслеживание задач и мониторинг затрат", + "sessionHistory": "История сессий", + "singlePilot": "Одиночное управление", + "orchestrateAgents": "Оркестрация нескольких агентов на разных машинах", + "memorySkills": "Память, навыки и межагентное взаимодействие", + "webhookIntegrations": "Интеграции Webhook", + "requiresGateway": "Требуется шлюз", + "activeSessionsDetected": "{count, plural, one {Обнаружена {count} активная сессия} few {Обнаружено {count} активные сессии} other {Обнаружено {count} активных сессий}}", + "noActiveSessions": "Нет активных сессий Claude", + "gatewayConnected": "Шлюз подключён", + "localModeNoGateway": "Локальный режим — без шлюза", + "agentsRegistered": "{count, plural, one {{count} агент зарегистрирован} few {{count} агента зарегистрировано} other {{count} агентов зарегистрировано}}", + "noAgentsYet": "Пока нет агентов", + "gatewayRegistered": "Шлюз: Mission Control зарегистрирован", + "gatewayRegistrationPending": "Регистрация шлюза ожидается", + "skipSetup": "Пропустить настройку", + "getStarted": "Начать" + }, + "interfaceMode": { + "title": "Выберите раскладку станции", + "description": "Базовый показывает основные панели, которые операторам нужны чаще всего. Полный открывает все системы станции — память, автоматизацию, аудит безопасности и многое другое. Вы можете переключаться в любое время.", + "essential": "Базовый", + "full": "Полный", + "essentialDescription": "Оптимизированное управление — панели для ежедневного использования: обзор флота, агенты, задачи, чат, лента активности, журналы и настройки.", + "essentialPanels1": "Обзор флота, Агенты, Задачи, Чат", + "essentialPanels2": "Лента активности, Журналы, Настройки", + "essentialTotal": "Всего 7 панелей", + "fullDescription": "Полный доступ к станции — добавляет обозреватель памяти, планирование Cron, Webhooks, оповещения, аудит безопасности, учёт затрат и конфигурацию шлюза.", + "fullIncludes": "Всё из Базового плюс", + "fullPanels": "Память, Cron, Webhooks, Аудит", + "fullTotal": "Все системы станции разблокированы" + }, + "gatewayLink": { + "title": "Связь со шлюзом", + "description": "Mission Control регистрирует свой источник в шлюзе OpenClaw для подключения через WebSocket и удалённого управления агентами.", + "originRegistered": "Источник шлюза зарегистрирован", + "originAdded": "Источник Mission Control добавлен в allowedOrigins шлюза", + "registrationPending": "Регистрация ожидается — будет настроена при следующей проверке возможностей", + "deviceAuthConfigured": "Аутентификация устройства настроена", + "deviceAuthDisabled": "Аутентификация устройства отключена — MC аутентифицируется через токен шлюза", + "deviceAuthWillConfigure": "Будет настроена вместе с регистрацией источника", + "testing": "Тестирование...", + "testConnection": "Проверить подключение", + "gatewayReachable": "Шлюз доступен", + "gatewayUnreachable": "Шлюз недоступен" + }, + "credentials": { + "title": "Защитите свою станцию", + "description": "Пароль администратора защищает консоль вашей станции. API-ключ — это стыковочный пропуск — агенты предъявляют его при регистрации, чтобы только авторизованные агенты могли стыковаться.", + "checkingCredentials": "Проверка учётных данных...", + "adminPassword": "Пароль администратора", + "passwordStrong": "Пароль надёжный и не является стандартным", + "passwordWeak": "Используется стандартный или слабый пароль — измените AUTH_PASS в .env", + "apiKey": "API-ключ", + "apiKeyConfigured": "Настроен — агенты могут стыковаться с этим ключом", + "apiKeyNotSet": "Не задан — без настроенного ключа агенты не смогут стыковаться. Выполните: bash scripts/generate-env.sh --force", + "openSettings": "Открыть настройки", + "securityScan": "Сканирование безопасности", + "securityScanDescription": "Проверьте сеть, среду выполнения и укрепление OpenClaw перед запуском станции.", + "launchStation": "Запустить станцию", + "launchAnyway": "Запустить всё равно" + } + }, + "channels": { + "title": "Каналы", + "loadingChannels": "Загрузка каналов...", + "gatewayConnected": "Шлюз подключён", + "gatewayDisconnected": "Шлюз отключён", + "refresh": "Обновить", + "noChannelsConfigured": "Каналы ещё не настроены. Настройте платформы обмена сообщениями (WhatsApp, Telegram, Discord, Slack и др.) в настройках шлюза OpenClaw.", + "gatewayUnreachable": "Не удаётся подключиться к шлюзу OpenClaw. Проверьте, что он запущен и доступен.", + "statusConnected": "Подключено", + "statusRunning": "Работает", + "statusConfigured": "Настроено", + "statusInactive": "Неактивно", + "probe": "Проверить", + "probing": "Проверка...", + "showQr": "Показать QR", + "relink": "Переподключить", + "waitForScan": "Ожидание сканирования", + "logout": "Выйти", + "loggedOut": "Вы вышли.", + "profile": "Профиль", + "editProfile": "Редактировать профиль", + "edit": "Редактировать", + "noProfileSet": "Профиль не задан", + "displayName": "Отображаемое имя", + "username": "Имя пользователя", + "about": "О себе", + "bio": "Биография", + "avatarUrl": "URL аватара", + "bannerUrl": "URL баннера", + "website": "Сайт", + "lightning": "Lightning", + "saving": "Сохранение...", + "saveAndPublish": "Сохранить и опубликовать", + "importFromRelays": "Импортировать из ретрансляторов", + "hideAdvanced": "Скрыть расширенные", + "showAdvanced": "Показать расширенные", + "cancel": "Отмена", + "profilePublished": "Профиль опубликован на ретрансляторах.", + "saveFailed": "Ошибка сохранения.", + "profileImported": "Профиль импортирован с ретрансляторов.", + "importFailed": "Ошибка импорта.", + "accounts": "Аккаунты ({count})" + }, + "integrations": { + "title": "Интеграции", + "loading": "Загрузка интеграций...", + "connectedCount": "Подключено {connected} из {total}", + "pullAll": "Получить всё", + "discard": "Отменить", + "save": "Сохранить", + "saving": "Сохранение...", + "saveChanges": "Сохранить изменения", + "cancel": "Отмена", + "remove": "Удалить", + "removeTitle": "Удалить интеграцию?", + "removeDescription": "Это удалит {target} из файла .env. Для применения изменений необходимо перезапустить шлюз.", + "notSet": "не задано", + "noIntegrationsInCategory": "В этой категории нет интеграций" + }, + "execApproval": { + "title": "Подтверждения выполнения", + "pendingBadge": "{count} ожидает", + "realtimeLabel": "В реальном времени через WebSocket", + "viewApprovals": "Подтверждения", + "viewAllowlist": "Настройка белого списка", + "filterAll": "Все", + "filterPending": "Ожидающие", + "filterResolved": "Решённые", + "noPendingApprovals": "Нет ожидающих подтверждений. Запросы на выполнение от агентов появятся здесь в виде наложения.", + "noApprovals": "Нет подтверждений для отображения.", + "loadingAllowlist": "Загрузка белого списка...", + "addAgent": "Добавить агента", + "save": "Сохранить", + "saving": "Сохранение...", + "reload": "Перезагрузить", + "noAgentsConfigured": "Агенты не настроены. Введите ID агента выше, чтобы создать белый список.", + "addPattern": "Добавить шаблон", + "noAllowlistPatterns": "Нет шаблонов белого списка. Команды будут требовать ручного подтверждения.", + "previewMatches": "Предпросмотр: {count} недавних команд совпадут", + "andMore": "...и ещё {count}", + "allowOnce": "Разрешить один раз", + "alwaysAllow": "Всегда разрешать", + "deny": "Отклонить", + "statusExpired": "Истекло", + "statusApproved": "Одобрено", + "statusDenied": "Отклонено" + }, + "notifications": { + "title": "Уведомления", + "markAllRead": "Отметить всё прочитанным", + "recipientLabel": "Получатель", + "recipientPlaceholder": "Имя агента (например, my-agent)", + "noNotifications": "Нет уведомлений", + "markRead": "Отметить прочитанным" + }, + "localAgentsDoc": { + "title": "Локальный AGENTS.md", + "noPathFound": "Локальный AGENTS.md пока не найден", + "openInVsCode": "Открыть в VS Code", + "copied": "Скопировано", + "copyPath": "Скопировать путь", + "collapse": "Свернуть", + "expand": "Развернуть", + "loading": "Загрузка локального AGENTS.md...", + "notDetected": "Локальный AGENTS.md не обнаружен.", + "checked": "Проверено: {paths}" + }, + "memoryGraph": { + "loading": "Загрузка графа...", + "retry": "Повторить", + "noMemoryDatabases": "Базы данных памяти не найдены", + "noMemoryDatabasesHint": "Файлы SQLite памяти OpenClaw не обнаружены", + "allAgents": "все агенты", + "filterFiles": "фильтр файлов...", + "statAgents": "агенты", + "statFiles": "файлы", + "statChunks": "фрагменты", + "statSize": "размер", + "legendSessions": "сессии", + "legendMemory": "память", + "legendKnowledge": "знания", + "keyboardHint": "прокрутка для масштаба / перетаскивание для панорамирования / клик по узлу для углубления", + "chunks": "фрагменты", + "text": "текст" + }, + "agentComms": { + "connecting": "Подключение к ленте...", + "eventsCount": "{count} событий", + "connectionGateway": "Шлюз", + "connectionSse": "SSE", + "connectionPolling": "Опрос", + "sourceLive": "В реальном времени", + "sourceMixed": "Смешанный", + "sourceSeeded": "Предзагруженный", + "sessions": "{active}/{total} сессий", + "scrollToLatest": "Прокрутить к последнему", + "toLabel": "Кому:", + "composerPlaceholderTarget": "Сообщение {name}... (Enter для отправки)", + "composerPlaceholderBroadcast": "Выберите сессию или агента выше, или введите для трансляции...", + "send": "Отправить", + "noFeedEvents": "Событий в ленте нет", + "noFilterEvents": "Нет событий {filter}", + "noFeedEventsHint": "Подключитесь к шлюзу или дождитесь активности агента. События из сессий, инструментов, чата и трассировок будут транслироваться в реальном времени.", + "noFilterEventsHint": "Переключитесь на «Все», чтобы увидеть события других категорий, или дождитесь событий {filter}." + }, + "agentDetail": { + "configTab": "Конфигурация", + "filesTab": "Файлы", + "toolsTab": "Инструменты", + "channelsTab": "Каналы", + "cronTab": "Cron", + "modelsTab": "Модели", + "workspaceFiles": "Файлы рабочего пространства", + "refresh": "Обновить", + "charCount": "{count} символов", + "missing": "отсутствует", + "selectFileToView": "Выберите файл для просмотра или редактирования", + "reset": "Сбросить", + "saving": "Сохранение...", + "save": "Сохранить", + "fileNotExistYet": "Этот файл ещё не существует. Вы можете создать его, введя содержимое и сохранив.", + "toolConfiguration": "Конфигурация инструментов", + "profile": "Профиль:", + "saved": "Сохранено", + "allowListCount": "Список разрешений ({count})", + "noAllowList": "Нет явного списка разрешений (используются настройки профиля по умолчанию)", + "addToolAllowList": "Добавить инструмент в список разрешений", + "add": "Добавить", + "alsoAllowCount": "Также разрешить ({count})", + "alsoAllowDesc": "Дополнительные инструменты, разрешённые помимо настроек профиля по умолчанию.", + "none": "Нет", + "denyListCount": "Список запретов ({count})", + "noDeniedTools": "Нет запрещённых инструментов", + "addToolDenyList": "Добавить инструмент в список запретов", + "channelStatus": "Статус каналов", + "channelStatusDesc": "Каналы, доступные для {agent}", + "noChannelsFound": "Каналы не найдены...", + "connectedOf": "{connected}/{total} подключено", + "noAccounts": "Нет аккаунтов", + "configuredCount": "{count} настроено", + "notConfigured": "Не настроено", + "enabledCount": "{count} включено", + "disabled": "Отключено", + "cronJobs": "Задания cron", + "allCronJobsCount": "{count} из {total} заданий", + "agentCronJobsCount": "{count} из {total} заданий", + "agentOnly": "Только агент", + "showAll": "Показать все", + "noCronJobsFound": "Задания cron не найдены", + "noCronJobsAssigned": "Для {agent} нет назначенных заданий cron", + "noSchedule": "нет расписания", + "enabled": "включено", + "lastRun": "Последний:", + "nextRun": "Следующий:", + "modelConfiguration": "Конфигурация моделей", + "modelConfigDesc": "Настройте основную и резервные модели для этого агента.", + "primaryModel": "Основная модель", + "defaultModel": "По умолчанию", + "fallbackChainCount": "Резервная цепочка ({count})", + "fallbackChainDesc": "Модели, которые пробуются по порядку, если основная модель недоступна.", + "noFallbackModels": "Резервные модели не настроены.", + "moveUp": "Вверх", + "moveDown": "Вниз", + "remove": "Удалить", + "addFallbackPlaceholder": "Добавить резервную модель", + "sandboxMode": "Режим", + "sandboxWorkspace": "Рабочее пространство", + "sandboxNetwork": "Сеть", + "sandboxNetworkPlaceholder": "напр., none, host", + "toolsSection": "Инструменты", + "subAgentsSection": "Субагенты", + "addSubAgentPlaceholder": "Добавить субагента", + "addSubAgent": "Добавить", + "subAgentModelOverride": "Переопределение модели субагента", + "defaultInherit": "По умолчанию (наследовать)", + "modelLabel": "Модель:", + "noSubAgents": "Субагенты не настроены.", + "memorySearch": "Поиск в памяти", + "cancel": "Отмена" + }, + "taskBoard": { + "title": "Доска задач", + "allProjects": "Все проекты", + "projects": "Проекты", + "close": "Закрыть", + "spawnSubAgent": "Создать субагента", + "newTask": "Новая задача", + "refresh": "Обновить", + "spawnAgentPlaceholder": "Имя агента", + "spawnTaskPlaceholder": "Описание задачи", + "timeoutTitle": "Тайм-аут (минуты)", + "spawning": "Создание...", + "spawn": "Создать", + "noActiveSpawnRequests": "Нет активных запросов на создание", + "dismissError": "Закрыть ошибку", + "taskBoardAriaLabel": "Доска задач", + "columnAriaLabel": "Колонка {title}, {count} задач", + "colInbox": "Входящие", + "colAssigned": "Назначено", + "colInProgress": "В работе", + "colReview": "На проверке", + "colQualityReview": "Контроль качества", + "colDone": "Готово", + "recurring": "ПОВТОРЯЮЩАЯСЯ", + "spawned": "СОЗДАНА", + "spawnedFromTask": "Создана из задачи #{id}", + "unassigned": "Не назначено", + "due": "Срок:", + "dropTasksHere": "Перетащите задачи сюда", + "priority_low": "Низкий", + "priority_medium": "Средний", + "priority_high": "Высокий", + "priority_critical": "Критический", + "claudeCodeTasks": "Задачи Claude Code", + "collapse": "Свернуть", + "expand": "Развернуть", + "loading": "Загрузка...", + "noTeamTasksFound": "Командные задачи не найдены", + "noTeamTasksDesc": "В данный момент нет активных командных задач Claude Code.", + "taskCount": "{count} {count, plural, one {задача} few {задачи} other {задач}}", + "blocked": "заблокировано", + "hermesScheduledTasks": "Запланированные задачи Hermes", + "noScheduledTasksFound": "Запланированные задачи не найдены", + "noScheduledTasksDesc": "В данный момент нет активных запланированных задач Hermes.", + "noSchedule": "нет расписания", + "enabled": "включено", + "disabled": "отключено", + "createNewTask": "Создать новую задачу", + "fieldTitle": "Заголовок", + "fieldDescription": "Описание", + "fieldPriority": "Приоритет", + "fieldProject": "Проект", + "fieldAssignTo": "Назначить", + "fieldTags": "Теги", + "makeRecurring": "Сделать повторяющейся", + "createRecurringTask": "Создать повторяющуюся задачу", + "createTask": "Создать задачу", + "cancel": "Отмена", + "editTask": "Редактировать задачу", + "fieldStatus": "Статус", + "saveChanges": "Сохранить изменения", + "edit": "Редактировать", + "deleteTaskConfirm": "Удалить \"{title}\"?", + "delete": "Удалить", + "closeTaskDetails": "Закрыть детали задачи", + "noDescription": "Нет описания", + "taskDetailTabs": "Вкладки деталей задачи", + "tabDetails": "Детали", + "tabComments": "Комментарии", + "tabQualityReview": "Контроль качества", + "tabSession": "Сессия", + "ticket": "Тикет", + "project": "Проект", + "status": "Статус", + "priority": "Приоритет", + "assignedTo": "Назначено", + "created": "Создано", + "issue": "Задача", + "branch": "Ветка", + "pr": "PR", + "live": "Активно", + "postingAs": "Публикует", + "newComment": "Новый комментарий...", + "addComment": "Добавить комментарий", + "broadcastToSubscribers": "Трансляция подписчикам", + "broadcastPlaceholder": "Транслировать сообщение всем подписчикам...", + "broadcast": "Транслировать", + "broadcastSent": "Трансляция отправлена {count} подписчикам", + "loadingComments": "Загрузка комментариев...", + "noComments": "Пока нет комментариев", + "aegisQualityReview": "Контроль качества Aegis", + "noReviews": "Пока нет проверок", + "reviewerPlaceholder": "Имя рецензента", + "reviewNotesPlaceholder": "Заметки проверки...", + "submit": "Отправить", + "loadingTranscript": "Загрузка транскрипта...", + "noSessionMessages": "Нет сообщений сессии" + }, + "cronManagement": { + "title": "Управление cron", + "subtitle": "Планирование и управление повторяющимися заданиями", + "loading": "Загрузка...", + "refresh": "Обновить", + "addJob": "Добавить задание", + "calendarView": "Вид календаря", + "calendarViewDescLocal": "Время отображается в вашем местном часовом поясе", + "calendarViewDesc": "Время отображается в UTC", + "prev": "Назад", + "today": "Сегодня", + "next": "Вперёд", + "calMode_agenda": "Повестка", + "calMode_week": "Неделя", + "calMode_month": "Месяц", + "searchPlaceholder": "Поиск заданий...", + "allAgents": "Все агенты", + "allStates": "Все состояния", + "enabled": "Включено", + "disabled": "Отключено", + "all": "Все", + "sortName": "Название", + "sortSchedule": "Расписание", + "sortLastRun": "Последний запуск", + "sortNextRun": "Следующий запуск", + "ascending": "По возрастанию", + "descending": "По убыванию", + "noJobsMatchFilters": "Нет заданий, соответствующих текущим фильтрам.", + "uniqueJobs": "{count} {count, plural, one {уникальное задание} few {уникальных задания} other {уникальных заданий}}", + "noJobsForDay": "На эту дату нет запланированных заданий.", + "jobCount": "{count} {count, plural, one {задание} few {задания} other {заданий}}", + "runsCount": "{count} {count, plural, one {запуск} few {запуска} other {запусков}}", + "totalRunsCount": "Всего {count} {count, plural, one {запуск} few {запуска} other {запусков}}", + "moreJobs": "+{count} ещё", + "firstRun": "первый {time}", + "scheduledJobs": "Запланированные задания", + "jobsCount": "{count} из {total} заданий", + "loadingJobs": "Загрузка заданий...", + "noCronJobsFound": "Задания cron не найдены.", + "colJobName": "Название задания", + "colAgent": "Агент", + "colSchedule": "Расписание", + "colModel": "Модель", + "colStatus": "Статус", + "colLastRun": "Последний запуск", + "colNextRun": "Следующий запуск", + "colActions": "Действия", + "enable": "Включить", + "disable": "Отключить", + "run": "Запустить", + "runNowForce": "Запустить сейчас (принудительно)", + "runNowIfDue": "Запустить сейчас (если пора)", + "clone": "Клонировать", + "history": "История", + "configuration": "Конфигурация", + "delivery": "Доставка", + "source": "Источник", + "localSchedulerAutomation": "Локальный планировщик / Автоматизация", + "command": "Команда", + "timing": "Расписание", + "recentLogs": "Последние логи", + "lastRun": "Последний запуск", + "nextRun": "Следующий запуск", + "timezone": "Часовой пояс", + "remove": "Удалить", + "close": "Закрыть", + "noLogsAvailable": "Логи недоступны.", + "runHistoryTitle": "История запусков: {name}", + "totalRuns": "Всего {count} {count, plural, one {запуск} few {запуска} other {запусков}}", + "filterRunsPlaceholder": "Фильтр запусков...", + "timestamp": "Временная метка", + "duration": "Продолжительность", + "error": "Ошибка", + "noRunHistoryAvailable": "История запусков недоступна.", + "loadMore": "Загрузить ещё", + "addNewCronJob": "Добавить новое задание cron", + "fieldJobName": "Название задания", + "fieldSchedule": "Расписание (формат cron)", + "quickSelect": "Быстрый выбор...", + "scheduleFormatHint": "Формат: минута час день месяц деньНедели", + "fieldCommand": "Команда", + "fieldModelOptional": "Модель (необязательно)", + "modelHint": "Оставьте пустым, чтобы использовать модель по умолчанию агента или шлюза.", + "fieldStaggerOptional": "Смещение (необязательно)", + "seconds": "секунд", + "staggerHint": "Задержка выполнения для предотвращения наложения с другими заданиями по тому же расписанию.", + "fieldDescriptionOptional": "Описание (необязательно)", + "descriptionPlaceholder": "Что делает это задание?", + "cancel": "Отмена", + "claudeCodeTeams": "Команды Claude Code", + "teamsCount": "{count} {count, plural, one {команда} few {команды} other {команд}}", + "collapse": "Свернуть", + "expand": "Развернуть", + "noClaudeCodeTeams": "Команды Claude Code не найдены в ~/.claude/teams/", + "membersCount": "{count} {count, plural, one {участник} few {участника} other {участников}}" + }, + "sessionDetails": { + "title": "Управление сессиями", + "subtitle": "Мониторинг и управление активными сессиями агентов", + "filter": "Фильтр", + "filterAll": "Все сессии", + "filterActive": "Только активные", + "filterIdle": "Только простаивающие", + "sortBy": "Сортировка", + "sortAge": "По времени", + "sortTokens": "По токенам", + "sortModel": "По модели", + "timeWindow": "Временное окно", + "last1h": "Последний час", + "last6h": "Последние 6ч", + "last24h": "Последние 24ч", + "last7d": "Последние 7д", + "allTime": "Все", + "global": "Глобальные", + "unknown": "Неизвестные", + "sessionCount": "{filtered} из {total} сессий", + "activeCount": "{count} активных", + "noSessionsMatch": "Ни одна сессия не соответствует текущему фильтру", + "model": "Модель", + "tokenUsage": "Использование токенов", + "sessionDetails": "Детали сессии", + "kind": "Тип", + "id": "ID", + "lastActivity": "Последняя активность", + "messages": "Сообщения", + "label": "Метка", + "addLabel": "Нажмите для добавления метки...", + "sessionControls": "Управление сессией", + "thinking": "Мышление", + "verbose": "Подробный вывод", + "reasoning": "Рассуждение", + "off": "Выкл", + "on": "Вкл", + "minimal": "Минимальный", + "low": "Низкий", + "medium": "Средний", + "high": "Высокий", + "xhigh": "Очень высокий", + "full": "Полный", + "stream": "Поток", + "modelInformation": "Информация о модели", + "fullName": "Полное название", + "provider": "Провайдер", + "description": "Описание", + "monitor": "Мониторинг", + "pause": "Пауза", + "terminate": "Завершить", + "working": "Обработка...", + "delete": "Удалить", + "deleteConfirm": "Удалить?", + "yes": "Да", + "no": "Нет", + "confirmTerminate": "Вы уверены, что хотите завершить эту сессию?", + "failedMonitor": "Не удалось начать мониторинг сессии", + "failedPause": "Не удалось приостановить сессию", + "failedTerminate": "Не удалось завершить сессию", + "sessionOverview": "Обзор сессий", + "totalSessions": "Всего сессий", + "active": "Активных", + "idle": "Простаивающих", + "subAgents": "Субагенты", + "cronJobs": "Cron-задачи", + "modelDistribution": "Распределение по моделям", + "highTokenUsage": "Высокое использование токенов", + "highTokenUsageDesc": "{count} сессий используют более 80% лимита токенов." + }, + "costTracker": { + "title": "Отслеживание расходов", + "subtitle": "Анализ использования токенов, расходов и затрат по агентам, моделям и сессиям", + "loadingCostData": "Загрузка данных о расходах", + "noUsageData": "Данных об использовании пока нет", + "noUsageDataDesc": "Данные появятся, когда агенты начнут выполнять сессии и потреблять токены.", + "refresh": "Обновить", + "totalCost": "Общие расходы ({timeframe})", + "totalTokens": "Всего токенов", + "apiRequests": "API-запросы", + "activeAgents": "Активные агенты", + "taskAttributed": "Атрибутировано задачам", + "usageTrends": "Тренды использования", + "perTurn": "По ходам", + "cumulative": "Накопительно", + "noTrendData": "Нет данных трендов за этот период", + "tokenUsageByModel": "Использование токенов по моделям", + "noModelData": "Нет данных о моделях", + "costDistributionByModel": "Распределение расходов по моделям", + "noCostData": "Нет данных о расходах", + "performanceInsights": "Анализ производительности", + "mostEfficientModel": "Самая эффективная модель", + "avgTokensPerRequest": "Среднее токенов/запрос", + "optimizationPotential": "Потенциал оптимизации", + "savingsPossible": "возможная экономия", + "exportData": "Экспорт данных", + "exportDataDesc": "Скачать записи об использовании токенов, статистику моделей и детализацию расходов", + "exporting": "Экспортируется...", + "noAgentData": "Нет данных по агентам", + "noAgentDataDesc": "Записи об использовании токенов появятся, когда агенты начнут отчитываться", + "agents": "Агенты", + "totalCostDays": "Общие расходы ({days}д)", + "avgPer1kTokens": "Среднее $/1K токенов", + "perAgentCost": "Расходы на агента", + "agentBreakdown": "Детализация по агентам", + "inputTokens": "Входные токены", + "outputTokens": "Выходные токены", + "ioRatio": "Соотношение В/В", + "lastActive": "Последняя активность", + "noTaskCosts": "Нет расходов, атрибутированных задачам", + "tokens": "токенов", + "sortBy": "Сортировка", + "noSessionCostData": "Нет данных о расходах сессий", + "noSessionCostDataDesc": "Детализация по сессиям появится после записи использования.", + "activeStatus": "Активна", + "inactiveStatus": "Неактивна", + "requests": "запросов", + "inShort": "вход", + "outShort": "выход", + "avgPerReq": "среднее/запрос", + "noTaskCostData": "Нет данных о расходах задач", + "noTaskCostDataDesc": "Расходы будут атрибутированы задачам, когда агенты начнут работать над ними", + "tasksWithCosts": "Задачи с расходами", + "attributedCost": "Атрибутированные расходы", + "attributedTokens": "Атрибутированные токены", + "unattributed": "Неатрибутированные", + "tasksByCost": "Задачи по расходам", + "reqs": "запр." + }, + "superAdmin": { + "accessDenied": "Доступ запрещён", + "accessDeniedDesc": "Суперуправление требует прав администратора.", + "loading": "Загрузка данных суперадминистратора...", + "title": "Суперуправление", + "subtitleLocal": "Локальный вид плоскости управления над автоматизациями планировщика и состоянием среды выполнения.", + "subtitleMultiTenant": "Плоскость управления мультиарендным провизионированием с шлюзами согласования и безопасными деструктивными действиями.", + "addWorkspace": "+ Добавить рабочее пространство", + "refresh": "Обновить", + "activeOrgs": "Активные организации", + "pendingInProgress": "В ожидании / В процессе", + "erroredOrgs": "Организации с ошибками", + "queuedApprovals": "Ожидают согласования", + "createNewWorkspace": "Создать новое рабочее пространство", + "createWorkspaceHint": "Заполните детали ниже и нажмите Создать + Очередь для провизионирования нового экземпляра клиента.", + "slugPlaceholder": "Слаг (например, acme)", + "displayNamePlaceholder": "Отображаемое имя", + "linuxUserPlaceholder": "Пользователь Linux (необязательно)", + "planStandard": "Стандартный", + "planPro": "Про", + "planEnterprise": "Корпоративный", + "gatewayPortPlaceholder": "Порт шлюза", + "dashboardPortPlaceholder": "Порт панели", + "dryRun": "Пробный запуск", + "live": "(реальный)", + "createAndQueue": "Создать + Очередь", + "tabOrganizations": "Организации", + "tabJobs": "задачи", + "tabEvents": "события", + "searchOrganizations": "Поиск организаций", + "showing": "Показано {shown} из {total}", + "colTenant": "Арендатор", + "colSystemUser": "Системный пользователь", + "colOwner": "Владелец", + "colStatus": "Статус", + "colLatestJob": "Последняя задача", + "colAction": "Действие", + "unassigned": "не назначен", + "by": "от", + "unknownCreator": "неизвестный", + "localReadOnly": "Локально (только чтение)", + "queueDecommission": "Поставить в очередь на вывод", + "noMatchingOrgs": "Нет подходящих организаций.", + "prev": "Назад", + "next": "Вперёд", + "page": "Стр. {page} / {total}", + "searchJobs": "Поиск задач", + "colJob": "Задача", + "colRequestedApproved": "Запрошено/Согласовано", + "reqShort": "Запр.", + "apprShort": "Согл.", + "view": "Просмотр", + "viewEvents": "Просмотр событий", + "approveAndRun": "Согласовать + Запустить", + "approve": "Согласовать", + "reject": "Отклонить", + "running": "Выполняется...", + "run": "Запустить", + "noMatchingJobs": "Нет подходящих задач.", + "showingEventsForJob": "Показаны события задачи #{jobId}", + "selectJobForEvents": "Выберите задачу для просмотра журнала событий провизионирования.", + "noEventsYet": "Событий для этой задачи пока нет.", + "queueDecommissionTitle": "Вывод из эксплуатации: {name}", + "reviewImpact": "Проверьте последствия перед созданием задачи.", + "dryRunRecommended": "Пробный запуск (рекомендуется)", + "dryRunDesc": "Без изменений в системе, проверяет команды и записывает полное выполнение плана.", + "liveExecution": "Реальное выполнение", + "liveExecutionDesc": "Остановит службы и применит изменения вывода после согласования + запуска.", + "removeLinuxUser": "Удалить пользователя Linux", + "removeLinuxUserDesc": "Выполняет `userdel -r` и удаляет домашний каталог.", + "removeStateDirs": "Удалить директории состояния/рабочего пространства", + "removeStateDirsDesc": "Удаляет пути `.openclaw` и `workspace` при сохранении пользователя.", + "impactSummary": "Сводка последствий", + "impactStopsService": "Останавливает и отключает `openclaw-gateway@{user}.service`.", + "impactRemovesEnv": "Удаляет `/etc/openclaw-tenants/{user}.env`.", + "impactLinuxUserRemoved": "Пользователь Linux будет удалён.", + "impactStateDirsRemoved": "Директории состояния/рабочего пространства будут удалены.", + "impactRetained": "Пользователь Linux и директории сохраняются.", + "reasonOptional": "Причина (необязательно)", + "typeSlugLabel": "Введите", + "toConfirmLive": "для подтверждения реального вывода", + "cancel": "Отмена", + "queueing": "Постановка в очередь...", + "queueDryRunDecommission": "Поставить в очередь пробный вывод", + "queueLiveDecommission": "Поставить в очередь реальный вывод", + "slugAndNameRequired": "Слаг и отображаемое имя обязательны", + "tenantCreated": "Арендатор {slug} создан. Задача начальной настройки поставлена в очередь.", + "jobExecuted": "Задача #{jobId} выполнена", + "jobApprovedExecuted": "Задача #{jobId} согласована и выполнена", + "typeToConfirm": "Введите {slug} для подтверждения реального вывода", + "decommissionQueuedDryRun": "Пробный вывод для {slug} поставлен в очередь", + "decommissionQueued": "Вывод для {slug} поставлен в очередь", + "optionalReason": "Необязательная причина для {action}:", + "jobActioned": "Задача #{jobId} была {action}" + }, + "auditTrail": { + "title": "Журнал аудита", + "eventsLogged": "Записано {count} событий", + "refresh": "Обновить", + "allActions": "Все действия", + "groupAuth": "Аутентификация", + "groupUsers": "Пользователи", + "groupAgents": "Агенты", + "groupSystem": "Система", + "groupConfig": "Конфигурация", + "groupWorkspaces": "Рабочие пространства", + "actionLogin": "Вход", + "actionLoginFailed": "Неудачный вход", + "actionLogout": "Выход", + "actionLoginGoogle": "Вход через Google", + "actionGoogleDisconnect": "Google отключён", + "actionPasswordChange": "Смена пароля", + "actionProfileUpdate": "Обновление профиля", + "actionUserCreate": "Пользователь создан", + "actionUserUpdate": "Пользователь обновлён", + "actionUserDelete": "Пользователь удалён", + "actionRoleDenied": "Доступ запрещён", + "actionAccessRequest": "Запрос доступа", + "actionAccessApprove": "Доступ одобрен", + "actionAccessDeny": "Доступ отклонён", + "actionAgentRegister": "Агент зарегистрирован", + "actionAgentCreate": "Агент создан", + "actionAgentUpdate": "Агент обновлён", + "actionAgentDelete": "Агент удалён", + "actionAgentConfigSync": "Конфигурация синхронизирована", + "actionLocalAgentSync": "Локальные агенты синхронизированы", + "actionSettingsUpdate": "Настройки обновлены", + "actionAutoBackup": "Автоматическое резервирование", + "actionBackupCreate": "Резервная копия создана", + "actionBackupDelete": "Резервная копия удалена", + "actionHeartbeatCheck": "Проверка heartbeat", + "actionIntegrationTest": "Интеграционный тест", + "actionCleanup": "Очистка", + "actionExport": "Экспорт", + "actionTokenRotate": "Ротация токена", + "actionGatewayConfigUpdate": "Конфигурация шлюза обновлена", + "actionWorkspaceCreate": "Рабочее пространство создано", + "actionWorkspaceUpdate": "Рабочее пространство обновлено", + "actionWorkspaceDelete": "Рабочее пространство удалено", + "filterByActor": "Фильтр по пользователю...", + "noEvents": "События аудита не найдены", + "userRef": "пользователь #{id}", + "previous": "Назад", + "next": "Вперёд", + "pageOf": "Стр. {page} из {total}", + "adminRequired": "Для просмотра журналов аудита требуется доступ администратора", + "failedFetch": "Не удалось загрузить журнал аудита", + "detailUsername": "имя пользователя", + "detailRole": "роль", + "detailName": "имя", + "detailPasswordReset": "пароль сброшен", + "detailChanged": "изменено", + "detailSize": "размер", + "detailMarkedOffline": "помечено как офлайн", + "detailAgent": "агент", + "detailSessions": "сессии", + "detailEvents": "события", + "detailRemoved": "удалено", + "detailType": "тип" + }, + "securityAudit": { + "title": "Аудит Безопасности", + "subtitle": "Состояние безопасности, события аутентификации, оценки доверия и обнаружение угроз", + "timeframeHour": "Час", + "timeframeDay": "День", + "timeframeWeek": "Неделя", + "timeframeMonth": "Месяц", + "loadingSecurityData": "Загрузка данных безопасности", + "securityPosture": "Состояние Безопасности", + "blendedScore": "Комбинированная оценка: 70% конфигурация инфраструктуры, 30% история событий.", + "infrastructureScan": "Сканирование Инфраструктуры", + "scanCredentials": "Учётные данные", + "scanNetwork": "Сеть", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "Среда выполнения", + "scanOs": "Безопасность ОС", + "authEvents": "События Аутентификации", + "noAuthEvents": "Нет событий аутентификации за этот период", + "colType": "Тип", + "colActor": "Субъект", + "colIP": "IP", + "colTime": "Время", + "agentTrustScores": "Оценки Доверия Агентов", + "noAgentTrustData": "Нет данных о доверии агентов", + "flagged": "помечено", + "secretExposureAlerts": "Предупреждения об Утечке Секретов", + "noSecretsDetected": "Секреты не обнаружены", + "colFile": "Файл", + "colPreview": "Предпросмотр", + "colStatus": "Статус", + "colDetected": "Обнаружено", + "statusResolved": "устранено", + "statusActive": "активно", + "mcpToolAudit": "Аудит Инструментов MCP", + "noToolUsageData": "Нет данных об использовании инструментов", + "chartSuccess": "Успех", + "chartFailure": "Сбой", + "rateLimitAbuseSignals": "Сигналы Ограничения Скорости / Злоупотреблений", + "noRateLimitSignals": "Нет сигналов ограничения скорости", + "hits": "{hits} попаданий", + "injectionAttempts": "Попытки Инъекций", + "noInjectionAttempts": "Попытки инъекций не обнаружены", + "colSource": "Источник", + "colInput": "Ввод", + "statusBlocked": "заблокировано", + "statusPassed": "пропущено", + "securityTimeline": "Хронология Безопасности ({timeframe})", + "noTimelineData": "Нет данных хронологии", + "chartAuthEvents": "События Auth", + "chartInjections": "Инъекции", + "chartSecrets": "Секреты", + "chartToolCalls": "Вызовы Инструментов", + "agentEvalDashboard": "Панель Оценки Агентов", + "overallConvergence": "Общая Конвергенция", + "crossAgentAlignment": "Согласованность агентов по уровням оценки", + "noEvalData": "Нет данных оценки", + "convergence": "Конвергенция:", + "drift": "дрейф", + "fixPrefix": "Исправление: {fix}", + "issueCount": "{count, plural, one {# проблема} few {# проблемы} other {# проблем}}" + }, + "office": { + "title": "Командный Мостик", + "subtitle": "Мониторинг команды в реальном времени", + "loadingLocalSessions": "Сканирование локальных сессий...", + "loadingOffice": "Загрузка офиса...", + "activeCount": "{count} активных", + "standbyCount": "{count} в ожидании", + "alertCount": "{count} тревога", + "offlineCount": "{count} не в сети", + "buttonDeck": "Мостик", + "buttonCrewChart": "Диаграмма Команды", + "refresh": "Обновить", + "emptyDeck": "Мостик пуст", + "emptyDeckSubtitle": "Развертывайте агентов, чтобы они отображались здесь", + "crewHeader": "КОМАНДА", + "onlineCount": "{count} в сети", + "filterAll": "Все", + "filterWorking": "Работают", + "filterIdle": "Простаивают", + "filterNeedsAttention": "Требуют внимания", + "filterRunning": "Запущены", + "filterNotRunning": "Не запущены", + "noWorkersInFilter": "Нет работников с этим фильтром.", + "noRecentActivity": "Нет недавней активности", + "activeStatus": "активен", + "idleMinutes": "{minutes}м простоя", + "mainDeck": "ГЛАВНЫЙ МОСТИК", + "radarLabel": "Радар", + "resetView": "Сбросить", + "showCrewButton": "Показать Команду", + "hideCrewButton": "Скрыть Команду", + "showRadarButton": "Показать Радар", + "hideRadarButton": "Скрыть Радар", + "showLogButton": "Показать Журнал", + "hideLogButton": "Скрыть Журнал", + "resetLayout": "Сбросить Макет", + "deckLog": "Журнал Мостика", + "noEventsYet": "Событий нет. Нажмите на зону или выполните действие.", + "legendActive": "Активен", + "legendStandby": "В ожидании", + "legendOther": "Другое", + "hotspotUp": "Вверх", + "hotspotDown": "Вниз", + "hotspotLeft": "Влево", + "hotspotRight": "Вправо", + "hotspotFineMinusX": "Точно -X", + "hotspotFinePlusX": "Точно +X", + "hotspotWider": "Шире", + "hotspotNarrower": "Уже", + "hotspotTaller": "Выше", + "hotspotShorter": "Ниже", + "segmentedBy": "Сегментировано по", + "segmentCategory": "Категория", + "segmentRole": "Роль", + "segmentStatus": "Статус", + "currentActivity": "Текущая Активность", + "taskStatTotal": "Всего", + "taskStatAssigned": "Назначено", + "taskStatActive": "Активно", + "taskStatDone": "Выполнено", + "sessionLabel": "Сессия:", + "quickActions": "Быстрые Действия", + "actionFocus": "Фокус", + "actionPair": "Пара", + "actionBreak": "Перерыв", + "openFlightDeck": "Открыть в Flight Deck", + "openingFlightDeck": "Открывается Flight Deck...", + "flightDeckCompanion": "Приватное/профессиональное приложение для глубокого анализа сессий", + "flightDeckRequired": "Требуется Flight Deck", + "flightDeckDescription": "Flight Deck — приватное/профессиональное приложение-компаньон для Mission Control.", + "flightDeckNotInstalled": "Похоже, Flight Deck не установлен на этом компьютере. Установите его для открытия сессий агентов с расширенными элементами управления и диагностикой.", + "maybeLater": "Позже", + "downloadFlightDeck": "Скачать Flight Deck", + "moving": "перемещается", + "neverSeen": "Не замечен", + "justNow": "Только что", + "minutesAgo": "{minutes}м назад", + "hoursAgo": "{hours}ч назад", + "daysAgo": "{days}д назад" + }, + "githubSync": { + "title": "Синхронизация Issues GitHub", + "subtitle": "Импортируйте Issues GitHub как задачи Mission Control", + "loading": "Загрузка синхронизации GitHub...", + "connectedAs": "GitHub: {user}", + "notConfigured": "GitHub: не настроен", + "tokenNotConfigured": "Токен GitHub не настроен", + "tokenNotConfiguredDesc": "Установите GITHUB_TOKEN в Интеграциях для включения синхронизации issues. Вы по-прежнему можете просматривать историю синхронизации и связанные задачи.", + "importIssues": "Импортировать Issues", + "labelRepository": "Репозиторий", + "placeholderRepo": "владелец/репо", + "labelLabels": "Метки (необязательно)", + "placeholderLabels": "баг,улучшение", + "labelState": "Состояние", + "stateOpen": "Открытые", + "stateClosed": "Закрытые", + "stateAll": "Все", + "labelAssignAgent": "Назначить агенту (необязательно)", + "unassigned": "Не назначено", + "buttonPreview": "Предпросмотр", + "buttonImport": "Импорт", + "twoWaySync": "Двусторонняя Синхронизация", + "syncAll": "Синхронизировать все", + "enableSync": "Включить", + "disableSync": "Отключить", + "syncButton": "Синхронизировать", + "noProjectsLinked": "Нет проектов, связанных с репозиториями GitHub. Настройте репозиторий GitHub в Управлении проектами.", + "previewTitle": "Предпросмотр ({count} issues)", + "colNumber": "#", + "colTitle": "Заголовок", + "colLabels": "Метки", + "colState": "Состояние", + "colCreated": "Создано", + "syncHistory": "История Синхронизации", + "colRepo": "Репозиторий", + "colIssues": "Issues", + "colStatus": "Статус", + "colSyncedAt": "Синхронизировано", + "noSyncHistory": "Нет истории синхронизации. Импортируйте issues выше для начала.", + "linkedTasks": "Связанные Задачи", + "linkedTasksWithCount": "Связанные Задачи ({count})", + "colTask": "Задача", + "colPriority": "Приоритет", + "colGitHub": "GitHub", + "colSynced": "Синхронизировано", + "noLinkedTasks": "Пока нет задач, связанных с issues GitHub.", + "syncResultImported": "Импортировано: {count}", + "syncResultSkipped": "Пропущено: {count}", + "syncResultErrors": "Ошибки: {count}", + "enterRepo": "Введите репозиторий (владелец/репо)", + "noIssuesFound": "Issues, соответствующие фильтрам, не найдены", + "failedFetchIssues": "Не удалось получить issues", + "networkError": "Ошибка сети", + "syncFailed": "Синхронизация не удалась", + "failedToggleSync": "Не удалось переключить синхронизацию", + "importedFeedback": "Импортировано {imported} {imported, plural, one {issue} few {issue} other {issues}}, пропущено {skipped}" + }, + "agentCost": { + "title": "Разбивка Затрат по Агентам", + "subtitle": "Анализ использования токенов и расходов по агентам", + "loadingAgentCosts": "Загрузка затрат агентов", + "viewOverview": "Обзор", + "viewPerAgentDB": "По Агентам (БД)", + "timeframeHour": "Час", + "timeframeDay": "День", + "timeframeWeek": "Неделя", + "timeframeMonth": "Месяц", + "noAgentCostData": "Нет данных о затратах агентов", + "noAgentCostSubtitle": "Данные о затратах появятся после того, как агенты начнут использовать токены", + "refresh": "Обновить", + "activeAgents": "Активные Агенты", + "totalCost": "Общие Затраты ({timeframe})", + "mostExpensive": "Самый Дорогой", + "mostEfficient": "Самый Эффективный", + "taskAttributed": "Отнесено к Задаче", + "unattributed": "{cost} без атрибуции", + "costDistributionByAgent": "Распределение Затрат по Агентам", + "noCostData": "Нет данных о затратах", + "costTrends": "Тенденции Затрат (Топ 5 Агентов)", + "noTrendData": "Нет данных тенденций", + "costComparison": "Сравнение Затрат", + "costEfficiency": "Экономичность ($/1К токенов на агента)", + "agentCostRanking": "Рейтинг Затрат Агентов", + "noTaskCosts": "Нет затрат, отнесенных к задачам этого агента", + "tasksTab": "Задачи ({count})", + "modelsTab": "Модели ({count})", + "sessionCount": "{count, plural, one {# сессия} few {# сессии} other {# сессий}}", + "requestCount": "{count, plural, one {# запрос} few {# запроса} other {# запросов}}", + "tokens": "токенов", + "ofTotal": "{pct}% от общего", + "reqs": "{count} запросов", + "inputTokens": "Входные Токены", + "outputTokens": "Выходные Токены", + "ioRatio": "Соотношение В/В", + "lastActive": "Последняя Активность", + "modelBreakdown": "Разбивка по Моделям", + "inSuffix": "вх.", + "outSuffix": "исх.", + "noPerAgentData": "Нет данных по агентам в базе данных", + "noPerAgentDataSubtitle": "Записи об использовании токенов появятся после начала отправки heartbeat-ов агентами", + "agentCountDB": "Агенты (БД)", + "totalCostDays": "Общие Затраты ({days}д)", + "totalTokens": "Всего Токенов", + "avgPer1kTokens": "Средн. $/1К Токенов", + "perAgentCostDB": "Затраты на Агента (БД)", + "agentTokenBreakdown": "Разбивка Токенов по Агентам", + "chartCost": "Затраты ($)" + }, + "tokenDashboard": { + "title": "Панель Токенов и Затрат", + "subtitle": "Мониторинг использования токенов и затрат по моделям и сессиям", + "viewOverview": "Обзор", + "viewSessions": "Сессии", + "timeframeHour": "Час", + "timeframeDay": "День", + "timeframeWeek": "Неделя", + "timeframeMonth": "Месяц", + "filtersLabel": "Фильтры:", + "clearAll": "Очистить все", + "timezoneLabel": "Часовой пояс:", + "sortByLabel": "Сортировка:", + "noSessionCostData": "Нет данных о затратах сессий", + "noSessionCostSubtitle": "Разбивка по сессиям появится после записи использования.", + "sessionActive": "Активна", + "sessionInactive": "Неактивна", + "requests": "запросов", + "inSuffix": "вх.", + "outSuffix": "исх.", + "avgPerRequest": "средн./запрос", + "loadingUsageData": "Загрузка данных использования", + "totalTokens": "Всего Токенов ({timeframe})", + "totalCost": "Общие Затраты ({timeframe})", + "apiRequests": "API Запросы", + "avgTokensPerRequest": "Средн. Токенов/Запрос", + "cacheReadTokens": "Токены Чтения из Кэша", + "cacheWriteTokens": "Токены Записи в Кэш", + "usageTrends": "Тенденции Использования ({timeframe})", + "peakLabel": "Пик:", + "perTurnButton": "За Ход", + "cumulativeButton": "Накопительно", + "noTrendData": "Нет данных тенденций за этот период", + "chartTokens": "Токены", + "chartRequests": "Запросы", + "tokenUsageByModel": "Использование Токенов по Модели", + "noModelUsageData": "Нет данных об использовании моделей", + "costDistributionByModel": "Распределение Затрат по Модели", + "noCostData": "Нет данных о затратах", + "costByProvider": "Затраты по Провайдеру", + "noProviderData": "Нет данных о провайдерах", + "exportData": "Экспортировать Данные", + "exportCsvFiltered": "Экспорт CSV (Отфильтровано)", + "exportCsvFull": "Экспорт CSV (Полный)", + "exportJson": "Экспорт JSON", + "exporting": "Экспортирование...", + "exportDescription": "Экспортировать данные об использовании токенов для анализа. «Отфильтровано» экспортирует только отображаемые данные; «Полный» экспортирует все записи с сервера.", + "performanceInsights": "Анализ Производительности", + "mostEfficientModel": "Наиболее Эффективная Модель", + "mostUsedModel": "Наиболее Используемая Модель", + "optimizationPotential": "Потенциал Оптимизации", + "savingsPossible": "Возможная экономия {pct}%", + "modelEfficiencyComparison": "Сравнение Эффективности Моделей", + "modelPerformance": "Производительность Моделей", + "topSessionsByCost": "Топ Сессий по Затратам", + "requestsLabel": "Запросы", + "avgCost": "Средн. Затраты", + "avgTokens": "Средн. Токены", + "noUsageData": "Нет данных об использовании", + "noUsageDataSubtitle": "Использование токенов появится здесь после запуска агентов", + "refresh": "Обновить" + }, + "memoryBrowser": { + "hideSidebar": "Скрыть боковую панель", + "showSidebar": "Показать боковую панель", + "fileCountSize": "{count} файлов / {size}", + "indexing": "индексирование…", + "newFile": "+ новый", + "searchPlaceholder": "Поиск файлов...", + "searchResults": "{count} результатов", + "noFiles": "нет файлов", + "refresh": "обновить", + "toggleBacklinks": "Переключить панель обратных ссылок", + "links": "ссылки", + "edit": "изменить", + "delete": "удалить", + "save": "сохранить", + "saving": "сохранение...", + "cancel": "отмена", + "selectFilePrompt": "выберите файл для просмотра", + "orSwitchView": "или перейдите к виду состояния / конвейера", + "schemaWarnings": "Предупреждения схемы:", + "editPlaceholder": "Редактировать содержимое файла...", + "loadingHermes": "Загрузка памяти Hermes", + "noHermesData": "Нет данных памяти Hermes", + "hermesMemoryTitle": "Память Hermes", + "hermesMemoryDesc": "Вид только для чтения постоянных файлов памяти агента Hermes", + "noAgentMemory": "Файл памяти агента не найден", + "noUserMemory": "Файл памяти пользователя не найден", + "runningDiagnostics": "Запуск диагностики", + "noHealthData": "Нет данных о состоянии", + "runDiagnostics": "Запустить диагностику", + "healthCategories": "8 категорий / {time}", + "pipelineTitle": "Конвейер обработки", + "pipelineDesc": "Операции поддержки знаний, вдохновлённые 6 R от Ars Contexta", + "pipelineReflect": "Отразить", + "pipelineReflectDesc": "Найти возможности связи между файлами", + "pipelineReweave": "Переплести", + "pipelineReweaveDesc": "Найти устаревшие файлы, требующие обновления из более новых связанных файлов", + "pipelineGenerateMoc": "Создать MOC", + "pipelineGenerateMocDesc": "Автоматически создавать карты содержимого из кластеров файлов", + "processing": "Обработка", + "filesProcessed": "Обработано файлов: {count}", + "noSuggestions": "Нет предложений — база знаний хорошо связана", + "mapsOfContent": "Карты содержимого ({count} групп)", + "newFileTitle": "новый файл", + "directory": "директория", + "fileName": "имя", + "fileType": "тип", + "content": "содержимое", + "contentOptional": "необязательно...", + "create": "Создать", + "deleteFileTitle": "удалить файл", + "permanentlyDelete": "удалить безвозвратно:", + "outgoing": "Исходящие ({count})", + "backlinks": "Обратные ссылки ({count})", + "wikiLinks": "Wiki-ссылки ({count})" + }, + "userManagement": { + "adminAccessRequired": "Требуется доступ администратора", + "failedToLoadUsers": "Не удалось загрузить пользователей", + "failedToCreate": "Не удалось создать пользователя", + "networkError": "Ошибка сети", + "userUpdated": "Пользователь обновлён", + "failedToUpdate": "Не удалось обновить", + "deletedUser": "Пользователь \"{username}\" удалён", + "failedToDelete": "Не удалось удалить", + "failedToAction": "Не удалось {action} запрос", + "requestActioned": "Запрос {action} для {email}", + "user": "пользователь", + "accessDenied": "Доступ запрещён", + "adminRequired": "Управление пользователями требует прав администратора.", + "loadingUsers": "Загрузка пользователей...", + "usersTitle": "Пользователи", + "usersSummary": "{count} зарегистрированных пользователей · {pending} ожидающих одобрения", + "addLocalUser": "+ Добавить локального пользователя", + "cancel": "Отмена", + "pendingRequests": "{count} ожидающих запросов доступа", + "identity": "Идентичность", + "attempts": "Попытки", + "lastAttempt": "Последняя попытка", + "action": "Действие", + "roleViewer": "Читатель", + "roleOperator": "Оператор", + "roleAdmin": "Администратор", + "noteOptional": "Заметка (необязательно)", + "confirm": "Подтвердить", + "reject": "Отклонить", + "review": "Просмотреть", + "newLocalUser": "Новый локальный пользователь", + "username": "Имя пользователя", + "password": "Пароль", + "displayName": "Отображаемое имя", + "creating": "Создание...", + "createUser": "Создать пользователя", + "colUser": "Пользователь", + "colProvider": "Провайдер", + "colRole": "Роль", + "colLastLogin": "Последний вход", + "colActions": "Действия", + "newPasswordOptional": "Новый пароль (необязательно)", + "save": "Сохранить", + "edit": "Изменить", + "delete": "Удалить", + "never": "Никогда", + "createdUser": "Пользователь \"{username}\" создан" + }, + "alertRules": { + "title": "Правила оповещений", + "description": "Настроить автоматические оповещения для событий агентов, задач и системы", + "evaluating": "Оценка...", + "evaluateNow": "Оценить сейчас", + "newRule": "+ Новое правило", + "statTotalRules": "Всего правил", + "statActive": "Активные", + "statTotalTriggers": "Всего срабатываний", + "evalResultsTitle": "Результаты оценки", + "dismiss": "Закрыть", + "triggered": "СРАБОТАЛО", + "noRulesToEvaluate": "Нет правил для оценки", + "loadingRules": "Загрузка правил...", + "noRulesConfigured": "Правила оповещений не настроены", + "createRuleHint": "Создайте правило для получения уведомлений о системных событиях", + "never": "Никогда", + "cooldown": "Задержка: {minutes}м", + "triggerCount": "Срабатываний: {count}x", + "lastTriggered": "Последнее: {time}", + "deleteRule": "Удалить правило", + "newRuleTitle": "Новое правило оповещения", + "ruleName": "Название правила", + "ruleNamePlaceholder": "например, Агент офлайн", + "ruleDescription": "Описание", + "optionalDescription": "Необязательное описание", + "entity": "Сущность", + "entityAgent": "Агент", + "entityTask": "Задача", + "entitySession": "Сессия", + "entityActivity": "Активность", + "field": "Поле", + "operator": "Оператор", + "value": "Значение", + "valuePlaceholder": "например, error", + "cooldownMinutes": "Задержка (минуты)", + "notifyRecipient": "Уведомить (получатель)", + "cancel": "Отмена", + "creating": "Создание...", + "createRule": "Создать правило", + "failedToCreate": "Не удалось создать правило", + "networkError": "Ошибка сети" + }, + "agentSquad": { + "failedToFetch": "Не удалось получить агентов", + "errorOccurred": "Произошла ошибка", + "failedToUpdateStatus": "Не удалось обновить статус агента", + "loadingAgents": "Загрузка агентов", + "title": "Команда агентов", + "live": "В эфире", + "manual": "Вручную", + "addAgent": "+ Добавить агента", + "refresh": "Обновить", + "noAgents": "Агенты не найдены", + "addFirstAgent": "Добавьте первого агента для начала работы", + "session": "Сессия", + "totalTasks": "Всего задач", + "inProgress": "В работе", + "lastSeen": "Последний раз виден", + "activity": "Активность", + "wake": "Разбудить", + "busy": "Занят", + "sleep": "Спать", + "statusControl": "Управление статусом", + "role": "Роль", + "sessionKey": "Ключ сессии", + "notSet": "Не задано", + "soulContent": "Содержимое SOUL", + "soulPlaceholder": "Личность и инструкции агента...", + "taskStatistics": "Статистика задач", + "total": "Всего", + "assigned": "Назначено", + "done": "Выполнено", + "created": "Создан", + "lastUpdated": "Последнее обновление", + "saveChanges": "Сохранить изменения", + "cancel": "Отмена", + "editAgent": "Редактировать агента", + "createNewAgent": "Создать нового агента", + "name": "Имя", + "rolePlaceholder": "например, исследователь, разработчик, аналитик", + "sessionKeyOptional": "Ключ сессии (необязательно)", + "sessionKeyPlaceholder": "Идентификатор сессии ClawdBot", + "soulContentOptional": "Содержимое SOUL (необязательно)", + "createAgent": "Создать агента", + "failedToUpdate": "Не удалось обновить агента", + "failedToCreate": "Не удалось создать агента", + "never": "Никогда", + "justNow": "Только что", + "minutesAgo": "{count}м назад", + "hoursAgo": "{count}ч назад", + "daysAgo": "{count}д назад" + }, + "multiGateway": { + "title": "Менеджер шлюзов", + "description": "Управление несколькими подключениями шлюза OpenClaw", + "probeAll": "Проверить все", + "addGateway": "+ Добавить шлюз", + "connected": "Подключено", + "disconnected": "Отключено", + "noActiveConnection": "Нет активного подключения", + "loadingGateways": "Загрузка шлюзов...", + "noGateways": "Шлюзы не настроены", + "addGatewayHint": "Добавьте шлюз для управления подключениями", + "discoveredGateways": "Обнаруженные шлюзы", + "discoveredGatewaysDesc": "Шлюзы OpenClaw, найденные на этом компьютере", + "refresh": "Обновить", + "running": "РАБОТАЕТ", + "stopped": "ОСТАНОВЛЕН", + "bind": "Привязка", + "mode": "Режим", + "register": "Зарегистрировать", + "directCliConnections": "Прямые подключения CLI", + "directCliDesc": "Инструменты CLI, подключённые напрямую без шлюза", + "noDirectConnections": "Нет прямых подключений CLI", + "useApiConnect": "Используйте", + "toRegisterCli": "для регистрации инструмента CLI", + "role": "Роль", + "heartbeat": "Пульс", + "never": "Никогда", + "disconnect": "Отключить", + "neverProbed": "Никогда не проверялся", + "primary": "ОСНОВНОЙ", + "connectedBadge": "ПОДКЛЮЧЕНО", + "token": "Токен", + "tokenSet": "Установлен", + "tokenNone": "Нет", + "latency": "Задержка", + "last": "Последний", + "gatewayVersion": "Версия шлюза", + "noHistory": "История отсутствует", + "colorKey": "Условные обозначения", + "colorKeyTitle": "Зелёный = онлайн; янтарный = ошибка; красный = офлайн", + "lastLatency": "Последняя задержка: {ms}мс", + "probeGateway": "Проверить шлюз", + "probing": "Проверка...", + "probe": "Проверить", + "connectToGateway": "Подключиться к этому шлюзу", + "connect": "Подключить", + "setPrimaryTitle": "Установить как основной", + "setPrimary": "Установить как основной", + "removeGateway": "Удалить шлюз", + "addGatewayTitle": "Добавить шлюз", + "name": "Имя", + "namePlaceholder": "например, primary", + "host": "Хост", + "port": "Порт", + "tokenField": "Токен", + "optional": "Необязательно", + "cancel": "Отмена", + "adding": "Добавление...", + "addGatewaySubmit": "Добавить шлюз", + "failedToAdd": "Не удалось добавить шлюз", + "networkError": "Ошибка сети" + }, + "nodes": { + "title": "Узлы / Экземпляры", + "gatewayConnected": "Шлюз подключён", + "gatewayUnreachable": "Шлюз недоступен", + "tabInstances": "Экземпляры ({count})", + "tabDevices": "Устройства ({count})", + "loading": "Загрузка...", + "noInstances": "Нет активных экземпляров. Узлы отображаются здесь при подключении к шлюзу.", + "colName": "Имя", + "colClientId": "ID клиента", + "colPlatform": "Платформа", + "colVersion": "Версия", + "colRoles": "Роли", + "colStatus": "Статус", + "colConnected": "Подключён", + "colLastActivity": "Последняя активность", + "colHostIp": "Хост / IP", + "colDeviceId": "ID устройства", + "colPaired": "Сопряжено", + "colLastSeen": "Последний раз", + "colTrust": "Доверие", + "colActions": "Действия", + "pendingPairingRequests": "Ожидающие запросы сопряжения ({count})", + "approve": "Одобрить", + "approving": "Одобрение...", + "reject": "Отклонить", + "rejecting": "Отклонение...", + "noPairedDevices": "Нет сопряжённых устройств.", + "pairedDevices": "Сопряжённые устройства ({count})", + "trusted": "доверенное", + "untrusted": "недоверенное", + "rotateToken": "Ротировать токен", + "revokeConfirm": "Отозвать?", + "yes": "Да", + "no": "Нет", + "revoke": "Отозвать", + "hideTokens": "Скрыть токены", + "tokens": "Токены ({count})", + "tokenUsed": "использован {time}", + "revoked": "отозван", + "rotate": "Ротировать" + }, + "activityFeed": { + "title": "Активность", + "live": "В эфире", + "paused": "Пауза", + "refresh": "Обновить", + "filterAgent": "Агент", + "filterAll": "Все", + "filterType": "Тип", + "allTypes": "Все типы", + "filterLimit": "Лимит", + "loadingActivities": "Загрузка активности", + "noActivities": "Активность не найдена", + "noActivityForAgent": "Активность для {agent} не записана", + "tryAdjustingFilters": "Попробуйте изменить фильтры", + "entityTask": "Задача:", + "entityCommentOn": "Комментарий к:", + "entityAgent": "Агент:", + "showDetails": "Показать детали", + "activeSessions": "Активные сессии", + "agentStatus": "Статус", + "lastSeen": "Последний раз", + "lastAction": "Последнее действие", + "tasksAssigned": "Назначенные задачи", + "inProgress": "В работе", + "completed": "Завершено", + "events": "{count} событий", + "newer": "Новее", + "older": "Старее", + "pageOf": "Страница {page} из {total}", + "footerAgentEvents": "{total} событий для {agent}", + "footerShowing": "Показано {count} активностей{filtered}", + "filtered": " (отфильтровано)", + "lastUpdated": "Обновлено: {time}" + }, + "standup": { + "title": "Ежедневный стендап", + "viewCurrent": "Текущий", + "viewHistory": "История", + "generating": "Генерация...", + "generate": "Сгенерировать", + "export": "Экспорт", + "standupFor": "Стендап за {date}", + "generatedOn": "Сгенерировано {date}", + "statCompleted": "Завершено", + "statInProgress": "В работе", + "statBlocked": "Заблокировано", + "statOverdue": "Просрочено", + "teamAccomplishments": "Достижения команды", + "teamBlockers": "Блокеры команды", + "overdueTasks": "Просроченные задачи", + "unassigned": "Не назначено", + "individualReports": "Индивидуальные отчёты", + "activitySummary": "Активность: {actions} действий, {comments} комментариев", + "sectionCompleted": "Завершено ({count})", + "sectionInProgress": "В работе ({count})", + "sectionAssigned": "Назначено ({count})", + "sectionBlocked": "Заблокировано ({count})", + "none": "Нет", + "noStandupGenerated": "Стендап не сгенерирован", + "selectDatePrompt": "Выберите дату и сгенерируйте отчёт", + "generateToday": "Сгенерировать сегодняшний стендап", + "noHistory": "История стендапов не найдена", + "historyGenerated": "Сгенерировано: {date}", + "historyAgentsParticipated": "Участвовало {count} агентов", + "historyCompleted": "Завершено: {count}", + "historyInProgress": "В работе: {count}", + "historyBlocked": "Заблокировано: {count}" + }, + "webhooks": { + "title": "Вебхуки", + "configured": "Настроено {count} вебхуков", + "addWebhook": "+ Добавить вебхук", + "secretLabel": "Секрет вебхука (сохраните сейчас — показывается только раз)", + "dismiss": "Закрыть", + "testSuccessful": "Тест успешен", + "testFailed": "Тест не прошёл", + "testStatus": "Статус:", + "testDuration": "Длительность:", + "testError": "Ошибка:", + "localAutomations": "Локальные автоматизации вебхуков", + "localAutomationsDesc": "Локальные задачи планировщика с поддержкой доставки и повторов вебхуков", + "nextRun": "Следующий запуск {time}", + "noNextRun": "Следующий запуск не запланирован", + "running": "Выполняется...", + "run": "Запустить", + "noWebhooks": "Вебхуки не настроены", + "noWebhooksDesc": "Добавьте вебхук для получения HTTP-уведомлений о событиях", + "allEvents": "Все события", + "eventCount": "{count} событий", + "deliveries": "{count} доставок", + "failed": "{count} неудачных", + "lastFired": "Последнее срабатывание {time}", + "sendTestEvent": "Отправить тестовое событие", + "testing": "Тестирование...", + "test": "Тест", + "disable": "Отключить", + "enable": "Включить", + "delete": "Удалить", + "recentDeliveries": "Последние доставки", + "noDeliveries": "Доставки ещё не записаны", + "newWebhook": "Новый вебхук", + "formName": "Имя", + "formUrl": "URL", + "formEvents": "События", + "cancel": "Отмена", + "createWebhook": "Создать вебхук" + }, + "skills": { + "title": "Центр навыков", + "subtitle": "Управляйте навыками локально и просматривайте внешние реестры.", + "localMode": "Локальный режим", + "gatewayMode": "Режим шлюза", + "tabInstalled": "Установлено", + "tabRegistry": "Реестр", + "searchPlaceholder": "Быстрый поиск установленных навыков...", + "searchResults": "Показано {count} из {total} навыков, соответствующих \"{query}\"", + "diskSyncActive": "Двусторонняя синхронизация диска активна (планировщик каждые 60с)", + "scanAll": "Сканировать все", + "scanningProgress": "Сканирование {done}/{total}...", + "refreshNow": "Обновить сейчас", + "scanning": "Сканирование:", + "skillsScanned": "Отсканировано {count} навыков", + "dismiss": "закрыть", + "addSkill": "Добавить навык", + "initialContent": "Начальное содержимое SKILL.md", + "loadingSkills": "Загрузка навыков...", + "skillCount": "{count} из {total} навыков", + "noMatch": "Навыки, соответствующие этому фильтру, не найдены.", + "scan": "Сканировать", + "view": "Просмотр", + "registrySearchPlaceholder": "Поиск навыков...", + "searching": "Поиск...", + "search": "Искать", + "installTo": "Установить в:", + "installing": "Установка...", + "install": "Установить", + "noRegistryResults": "Результаты для \"{query}\" в {registry} не найдены. Попробуйте другой запрос или смените реестр.", + "registryPrompt": "Ищите в ClawdHub, skills.sh или Awesome OpenClaw для обнаружения и установки навыков агентов.", + "skillInstalled": "Навык установлен", + "installFailed": "Установка не удалась", + "installingSkill": "Установка навыка", + "stepFetching": "Получение SKILL.md из реестра", + "stepScanning": "Выполнение проверки безопасности", + "stepWriting": "Запись на диск и регистрация", + "security": "Безопасность", + "viewInstalled": "Просмотр установленных", + "done": "Готово", + "close": "Закрыть", + "delete": "Удалить", + "save": "Сохранить", + "loadingSkillContent": "Загрузка SKILL.md...", + "noContent": "Нет содержимого." + }, + "orchestration": { + "tabCommand": "Команда", + "tabWorkflows": "Рабочие процессы", + "tabPipelines": "Конвейеры", + "tabFleet": "Парк", + "selectAgent": "Выберите агента...", + "commandPlaceholder": "Отправить команду или сообщение агенту...", + "send": "Отправить", + "noTemplates": "Нет шаблонов рабочих процессов", + "createFirstTemplate": "Создать первый шаблон", + "cancel": "Отмена", + "new": "+ Создать", + "editTemplate": "Редактировать шаблон", + "newTemplate": "Новый шаблон", + "templateName": "Название шаблона", + "templateDescription": "Описание (необязательно)", + "taskPromptPlaceholder": "Задача-промпт для агента...", + "timeout": "Таймаут", + "role": "Роль", + "lastRun": "Последний запуск", + "update": "Обновить", + "save": "Сохранить", + "totalAgents": "Всего агентов", + "online": "Онлайн", + "busy": "Занят", + "errors": "Ошибки" + } +} diff --git a/messages/zh.json b/messages/zh.json new file mode 100644 index 0000000000000000000000000000000000000000..6b6692755798c5afffe634d9b0ecc0060eb1f089 --- /dev/null +++ b/messages/zh.json @@ -0,0 +1,1853 @@ +{ + "common": { + "save": "保存", + "cancel": "取消", + "loading": "加载中...", + "error": "错误", + "search": "搜索", + "confirm": "确认", + "delete": "删除", + "edit": "编辑", + "close": "关闭", + "back": "返回", + "next": "下一步", + "retry": "重试", + "or": "或", + "optional": "可选", + "language": "语言", + "dismiss": "忽略", + "continue": "继续", + "selected": "已选择", + "detected": "已检测", + "now": "现在", + "tryAgain": "重试", + "skipToMainContent": "跳到主要内容", + "builtWithCareBy": "用心构建,来自", + "viewRelease": "查看版本", + "updateNow": "立即更新", + "showDetails": "显示详情", + "hideDetails": "隐藏详情", + "moreIssues": "+ {count} 个更多问题" + }, + "auth": { + "missionControl": "Mission Control", + "signInToContinue": "登录以继续", + "username": "用户名", + "password": "密码", + "signIn": "登录", + "signingIn": "登录中...", + "signInWithGoogle": "使用 Google 登录", + "loadingGoogleSignIn": "正在加载 Google 登录...", + "googleSignInFailed": "Google 登录失败", + "networkError": "网络错误", + "loginFailed": "登录失败", + "enterUsername": "输入用户名", + "enterPassword": "输入密码", + "orchestrationTagline": "OpenClaw 智能体编排", + "accessRequestSubmitted": "访问请求已提交", + "accessRequestDescription": "您的请求已发送给管理员审核。审核通过后即可登录。", + "tryAgain": "重试", + "noAdminAccount": "尚未创建管理员账户", + "noAdminDescription": "创建管理员账户以开始使用 Mission Control。", + "createAdminAccount": "创建管理员账户", + "welcomeToMC": "欢迎使用 Mission Control", + "settingUpMC": "正在设置 Mission Control", + "createAdminToStart": "创建管理员账户以开始使用", + "creatingAdmin": "正在创建管理员账户...", + "displayName": "显示名称", + "confirmPassword": "确认密码", + "atLeast12Chars": "至少 12 个字符", + "repeatPassword": "重复输入密码", + "passwordsDoNotMatch": "密码不匹配", + "passwordTooShort": "密码至少需要 12 个字符", + "moreCharsNeeded": "还需要 {count} 个字符", + "firstTimeSetupOnly": "此页面仅在首次设置时可用。", + "checkingSetupStatus": "正在检查设置状态...", + "setupFailed": "设置失败", + "failedToCheckSetup": "无法检查设置状态", + "validatingCredentials": "正在验证凭据", + "creatingAdminAccount": "正在创建管理员账户", + "configuringSession": "正在配置会话", + "launchingDashboard": "正在启动仪表板", + "usernameHint": "仅允许小写字母、数字、点、连字符和下划线" + }, + "nav": { + "overview": "概览", + "agents": "智能体", + "tasks": "任务", + "chat": "聊天", + "channels": "频道", + "skills": "技能", + "memory": "记忆", + "activity": "活动", + "logs": "日志", + "costTracker": "费用追踪", + "nodes": "节点", + "approvals": "审批", + "office": "办公室", + "cron": "Cron", + "webhooks": "Webhooks", + "alerts": "告警", + "github": "GitHub", + "security": "安全", + "users": "用户", + "audit": "审计", + "gateway": "网关", + "gateways": "网关", + "config": "配置", + "integrations": "集成", + "debug": "调试", + "settings": "设置", + "group": { + "observe": "监控", + "automate": "自动化", + "admin": "管理" + }, + "collapseSidebar": "折叠侧边栏", + "expandSidebar": "展开侧边栏", + "more": "更多" + }, + "settings": { + "language": "语言", + "languageDescription": "选择您偏好的显示语言", + "general": "通用", + "security": "安全", + "dataRetention": "数据保留", + "chatSettings": "聊天", + "gatewaySettings": "网关", + "title": "设置", + "description": "配置 Mission Control 行为和数据保留策略", + "discard": "放弃", + "save": "保存", + "saving": "保存中...", + "saveChanges": "保存更改", + "workspaceManagementLabel": "工作区管理:", + "workspaceManagementDesc1": "要创建或管理工作区(租户实例),请转至", + "superAdmin": "超级管理员", + "workspaceManagementDesc2": "面板(侧边栏中的管理员 > 超级管理员)。在那里可以创建新客户端实例、管理租户并监控配置任务。", + "securityDescription": "扫描您的站点安全态势", + "securityScan": "安全扫描", + "hideScan": "隐藏扫描", + "backups": "备份", + "backupsDescription": "按需备份 MC 数据库或网关状态", + "backupMcDatabase": "备份 MC 数据库", + "backupGatewayState": "备份网关状态", + "backingUp": "备份中...", + "onboarding": "引导设置", + "onboardingDescription": "重放设置向导并重置仪表板清单", + "replayOnboarding": "重放引导", + "resetting": "重置中..." + }, + "boot": { + "missionControl": "Mission Control", + "agentOrchestration": "智能体编排", + "authenticatingOperator": "正在验证操作员身份", + "detectingStationMode": "正在检测站点模式", + "loadingControlConfig": "正在加载控制配置", + "connectingRuntimeLinks": "正在连接运行时链路", + "syncingAgentRegistry": "正在同步智能体注册表", + "loadingActiveSessions": "正在加载活跃会话", + "hydratingWorkspaceBoard": "正在初始化工作区面板", + "mappingMemoryGraph": "正在映射记忆图谱", + "indexingSkillCatalog": "正在索引技能目录" + }, + "header": { + "workspace": "工作区", + "sessions": "会话", + "events": "事件", + "live": "实时", + "off": "关闭", + "local": "本地", + "connected": "已连接", + "disconnected": "已断开", + "reconnecting": "正在重连", + "offline": "离线", + "retry": "重试 {count}", + "jumpToSearch": "跳转到页面、任务、智能体...", + "searchPlaceholder": "搜索任务、智能体、活动,或输入页面命令...", + "searching": "搜索中...", + "noResults": "未找到结果", + "typeToSearch": "输入以搜索实体或快速跳转页面", + "gatewayConnection": "网关连接", + "status": "状态", + "host": "主机", + "latency": "延迟", + "webSocket": "WebSocket", + "sse": "SSE", + "retries": "重试次数", + "clickToReconnect": "点击重新连接", + "down": "离线", + "goToOverview": "前往概览", + "goToChat": "前往聊天", + "goToTasks": "前往任务", + "goToAgents": "前往智能体", + "goToActivityFeed": "前往活动流", + "goToNotifications": "前往通知", + "goToTokenUsage": "前往令牌用量", + "goToLogs": "前往日志", + "goToMemoryBrowser": "前往记忆浏览器", + "goToIntegrations": "前往集成", + "goToSettings": "前往设置", + "goToGateways": "前往网关", + "goToGithubSync": "前往 GitHub 同步", + "goToOffice": "前往办公室", + "goToSkills": "前往技能", + "quickNavigation": "快速导航" + }, + "contextSwitcher": { + "localMode": "本地模式", + "connected": "已连接", + "disconnected": "已断开", + "interface": "界面", + "essential": "精简", + "full": "完整", + "organizations": "组织", + "all": "全部", + "noTools": "无工具", + "unlinked": "未关联", + "newOrganization": "新建组织...", + "usernamePlaceholder": "用户名(操作系统用户)", + "displayNamePlaceholder": "显示名称", + "gatewayPortPlaceholder": "网关端口(必填)", + "installTools": "安装工具", + "usernameAndDisplayRequired": "用户名和显示名称为必填项", + "invalidUsernameFormat": "用户名格式无效", + "gatewayPortRequired": "网关端口为必填项", + "creating": "创建中...", + "createUser": "创建用户", + "createAndQueue": "创建并排队" + }, + "localModeBanner": { + "noGatewayDetected": "未检测到 OpenClaw 网关", + "runningInLocalMode": " — 正在以本地模式运行。监控 Claude Code 会话、任务和本地数据。", + "configureGateway": "配置网关" + }, + "updateBanner": { + "updating": "更新中...", + "restartingServer": "正在重启服务器...", + "updateAvailable": "有可用更新:v{version}", + "newerVersionAvailable": " — Mission Control 有新版本可用。", + "updateFailed": "更新失败", + "networkError": "网络错误 — 无法连接到服务器。" + }, + "openclawUpdateBanner": { + "updatingOpenClaw": "正在更新 OpenClaw...", + "openclawUpdated": "OpenClaw 已更新至 v{version}", + "openclawUpdateAvailable": "OpenClaw 更新:v{version} 可用", + "installed": "已安装:v{version}", + "changelog": "更新日志", + "copied": "已复制!", + "copyCommand": "复制命令", + "updateFailed": "更新失败", + "networkError": "网络错误 — 无法连接到服务器。" + }, + "doctorBanner": { + "fixCompleted": "OpenClaw 诊断修复完成", + "configDrift": "检测到 OpenClaw 配置偏移", + "stateIntegrity": "OpenClaw 状态完整性警告", + "securityWarning": "OpenClaw 安全警告", + "doctorWarnings": "OpenClaw 诊断警告", + "runningFixes": "正在运行 OpenClaw 诊断修复...", + "cleaningSessionStores": "正在清理会话存储...", + "archivingOrphanTranscripts": "正在归档孤立的转录记录...", + "recheckingHealth": "正在重新检查当前实例健康状态...", + "fixFailed": "OpenClaw 诊断修复失败", + "networkError": "网络错误 — 无法连接到服务器。", + "runningFix": "正在修复...", + "runDoctorFix": "运行诊断修复" + }, + "liveFeed": { + "liveFeed": "实时动态", + "showLiveFeed": "显示实时动态", + "collapseFeed": "折叠动态", + "closeFeed": "关闭动态", + "noActivityYet": "暂无活动", + "eventsAppearLocal": "创建任务或智能体更新时,事件会在此显示", + "eventsStreamGateway": "事件从网关和本地数据库流式传输到此处", + "activeSessions": "活跃会话", + "noActiveSessions": "无活跃会话", + "activeSession": "活跃", + "idleSession": "空闲" + }, + "errorBoundary": { + "somethingWentWrong": "出了点问题", + "unexpectedError": "此面板发生了意外错误。" + }, + "page": { + "showLiveFeed": "显示实时动态", + "availableInFullMode": "{panel}在完整模式下可用。", + "switchToFull": "切换到完整模式", + "goToOverview": "前往概览", + "requiresGateway": "{panel}需要 OpenClaw 网关连接。", + "configureGateway": "配置网关以启用此面板。" + }, + "onboarding": { + "stationOnline": "站点已上线", + "stationReady": "您的站点已准备好迎接智能体。", + "welcome": { + "title": "欢迎使用 Mission Control", + "description": "您的 AI 智能体站点。当智能体停靠在此,它们将获得持久记忆、任务管理、协调工作流和全面的可观测性。我们已扫描您的设置 — 以下是在线状态。", + "availableModes": "可用模式", + "localMode": "本地模式", + "gatewayMode": "网关模式", + "monitorClaude": "监控此机器上的 Claude Code 会话", + "taskTracking": "任务跟踪和费用监控", + "sessionHistory": "会话历史", + "singlePilot": "单人操作", + "orchestrateAgents": "跨机器编排多个智能体", + "memorySkills": "记忆、技能和智能体间通信", + "webhookIntegrations": "Webhook 集成", + "requiresGateway": "需要网关", + "activeSessionsDetected": "检测到 {count} 个活跃会话", + "noActiveSessions": "无活跃的 Claude 会话", + "gatewayConnected": "网关已连接", + "localModeNoGateway": "本地模式 — 无网关", + "agentsRegistered": "已注册 {count} 个智能体", + "noAgentsYet": "暂无智能体", + "gatewayRegistered": "网关:Mission Control 已注册", + "gatewayRegistrationPending": "网关注册待处理", + "skipSetup": "跳过设置", + "getStarted": "开始使用" + }, + "interfaceMode": { + "title": "选择您的站点布局", + "description": "精简模式显示操作员最常用的核心面板。完整模式解锁站点上的所有系统 — 记忆、自动化、安全审计等。您可以随时切换。", + "essential": "精简", + "full": "完整", + "essentialDescription": "精简操作 — 您日常使用的面板:舰队概览、智能体、任务、聊天、活动流、日志和设置。", + "essentialPanels1": "舰队概览、智能体、任务、聊天", + "essentialPanels2": "活动流、日志、设置", + "essentialTotal": "共 7 个面板", + "fullDescription": "完整站点访问 — 新增记忆浏览器、Cron 调度、Webhooks、告警、安全审计、费用追踪和网关配置。", + "fullIncludes": "包含精简模式的所有内容,另加", + "fullPanels": "记忆、Cron、Webhooks、审计", + "fullTotal": "所有站点系统已解锁" + }, + "gatewayLink": { + "title": "网关链接", + "description": "Mission Control 将其来源注册到 OpenClaw 网关,以便通过 WebSocket 连接并远程管理智能体。", + "originRegistered": "网关来源已注册", + "originAdded": "Mission Control 来源已添加到网关 allowedOrigins", + "registrationPending": "注册待处理 — 将在下次能力检查时配置", + "deviceAuthConfigured": "设备认证已配置", + "deviceAuthDisabled": "设备认证已禁用 — MC 通过网关令牌进行认证", + "deviceAuthWillConfigure": "将随来源注册一起配置", + "testing": "测试中...", + "testConnection": "测试连接", + "gatewayReachable": "网关可达", + "gatewayUnreachable": "网关不可达" + }, + "credentials": { + "title": "保护您的站点", + "description": "管理员密码保护您的站点控制台。API 密钥是停靠凭据 — 智能体在注册时出示它,这样只有授权的智能体才能停靠。", + "checkingCredentials": "正在检查凭据...", + "adminPassword": "管理员密码", + "passwordStrong": "密码强度高且非默认密码", + "passwordWeak": "使用了默认或弱密码 — 请在 .env 中更改 AUTH_PASS", + "apiKey": "API 密钥", + "apiKeyConfigured": "已配置 — 智能体可使用此密钥停靠", + "apiKeyNotSet": "未设置 — 没有配置密钥,智能体将无法停靠。运行:bash scripts/generate-env.sh --force", + "openSettings": "打开设置", + "securityScan": "安全扫描", + "securityScanDescription": "在启动站点前验证网络、运行时和 OpenClaw 加固状态。", + "launchStation": "启动站点", + "launchAnyway": "仍然启动" + } + }, + "channels": { + "title": "频道", + "loadingChannels": "加载频道中...", + "gatewayConnected": "网关已连接", + "gatewayDisconnected": "网关已断开", + "refresh": "刷新", + "noChannelsConfigured": "尚未配置频道。请在 OpenClaw 网关设置中配置消息平台(WhatsApp、Telegram、Discord、Slack 等)。", + "gatewayUnreachable": "无法连接 OpenClaw 网关,请确认其正在运行并可访问。", + "statusConnected": "已连接", + "statusRunning": "运行中", + "statusConfigured": "已配置", + "statusInactive": "未激活", + "probe": "探测", + "probing": "探测中...", + "showQr": "显示二维码", + "relink": "重新关联", + "waitForScan": "等待扫码", + "logout": "登出", + "loggedOut": "已登出。", + "profile": "资料", + "editProfile": "编辑资料", + "edit": "编辑", + "noProfileSet": "未设置资料", + "displayName": "显示名称", + "username": "用户名", + "about": "简介", + "bio": "个人简介", + "avatarUrl": "头像 URL", + "bannerUrl": "横幅 URL", + "website": "网站", + "lightning": "闪电地址", + "saving": "保存中...", + "saveAndPublish": "保存并发布", + "importFromRelays": "从中继导入", + "hideAdvanced": "隐藏高级选项", + "showAdvanced": "显示高级选项", + "cancel": "取消", + "profilePublished": "资料已发布到中继。", + "saveFailed": "保存失败。", + "profileImported": "已从中继导入资料。", + "importFailed": "导入失败。", + "accounts": "账户({count})" + }, + "integrations": { + "title": "集成", + "loading": "加载集成中...", + "connectedCount": "已连接 {connected}/{total}", + "pullAll": "全部拉取", + "discard": "放弃", + "save": "保存", + "saving": "保存中...", + "saveChanges": "保存更改", + "cancel": "取消", + "remove": "移除", + "removeTitle": "移除集成?", + "removeDescription": "这将从 .env 文件中移除 {target}。需重启网关才能生效。", + "notSet": "未设置", + "noIntegrationsInCategory": "此分类下没有集成" + }, + "execApproval": { + "title": "执行审批", + "pendingBadge": "{count} 待审", + "realtimeLabel": "通过 WebSocket 实时更新", + "viewApprovals": "审批", + "viewAllowlist": "白名单配置", + "filterAll": "全部", + "filterPending": "待处理", + "filterResolved": "已解决", + "noPendingApprovals": "无待审批项。来自代理的执行请求将以覆盖层形式显示于此。", + "noApprovals": "无审批记录。", + "loadingAllowlist": "加载白名单中...", + "addAgent": "添加代理", + "save": "保存", + "saving": "保存中...", + "reload": "重新加载", + "noAgentsConfigured": "未配置代理。请在上方输入代理 ID 以创建白名单。", + "addPattern": "添加模式", + "noAllowlistPatterns": "无白名单模式。所有命令均需手动审批。", + "previewMatches": "预览:{count} 条最近命令将匹配", + "andMore": "...以及另 {count} 条", + "allowOnce": "允许一次", + "alwaysAllow": "始终允许", + "deny": "拒绝", + "statusExpired": "已过期", + "statusApproved": "已批准", + "statusDenied": "已拒绝" + }, + "notifications": { + "title": "通知", + "markAllRead": "全部标为已读", + "recipientLabel": "收件人", + "recipientPlaceholder": "代理名称(例如:my-agent)", + "noNotifications": "无通知", + "markRead": "标为已读" + }, + "localAgentsDoc": { + "title": "本地 AGENTS.md", + "noPathFound": "尚未找到本地 AGENTS.md", + "openInVsCode": "在 VS Code 中打开", + "copied": "已复制", + "copyPath": "复制路径", + "collapse": "折叠", + "expand": "展开", + "loading": "加载本地 AGENTS.md 中...", + "notDetected": "未检测到本地 AGENTS.md。", + "checked": "已检查:{paths}" + }, + "memoryGraph": { + "loading": "加载图谱中...", + "retry": "重试", + "noMemoryDatabases": "未找到内存数据库", + "noMemoryDatabasesHint": "未检测到 OpenClaw 内存 SQLite 文件", + "allAgents": "所有代理", + "filterFiles": "过滤文件...", + "statAgents": "代理", + "statFiles": "文件", + "statChunks": "块", + "statSize": "大小", + "legendSessions": "会话", + "legendMemory": "内存", + "legendKnowledge": "知识", + "keyboardHint": "滚动缩放 / 拖拽平移 / 点击节点深入", + "chunks": "块", + "text": "文本" + }, + "agentComms": { + "connecting": "连接到 Feed 中...", + "eventsCount": "{count} 条事件", + "connectionGateway": "网关", + "connectionSse": "SSE", + "connectionPolling": "轮询", + "sourceLive": "实时", + "sourceMixed": "混合", + "sourceSeeded": "预置", + "sessions": "{active}/{total} 会话", + "scrollToLatest": "滚动到最新", + "toLabel": "发送至:", + "composerPlaceholderTarget": "消息 {name}...(回车发送)", + "composerPlaceholderBroadcast": "选择上方会话或代理,或直接输入广播...", + "send": "发送", + "noFeedEvents": "暂无 Feed 事件", + "noFilterEvents": "无 {filter} 事件", + "noFeedEventsHint": "连接到网关或等待代理活动。会话、工具、聊天和追踪事件将实时流式显示。", + "noFilterEventsHint": "切换到「全部」查看其他分类事件,或等待 {filter} 事件到达。" + }, + "nodes": { + "title": "节点 / 实例", + "gatewayConnected": "网关已连接", + "gatewayUnreachable": "网关不可达", + "tabInstances": "实例 ({count})", + "tabDevices": "设备 ({count})", + "loading": "加载中...", + "noInstances": "没有活跃实例。节点连接到网关后会显示在此处。", + "colName": "名称", + "colClientId": "客户端 ID", + "colPlatform": "平台", + "colVersion": "版本", + "colRoles": "角色", + "colStatus": "状态", + "colConnected": "已连接", + "colLastActivity": "最近活动", + "colHostIp": "主机 / IP", + "colDeviceId": "设备 ID", + "colPaired": "配对时间", + "colLastSeen": "最近在线", + "colTrust": "信任", + "colActions": "操作", + "pendingPairingRequests": "待处理配对请求 ({count})", + "approve": "批准", + "approving": "批准中...", + "reject": "拒绝", + "rejecting": "拒绝中...", + "noPairedDevices": "没有已配对的设备。", + "pairedDevices": "已配对设备 ({count})", + "trusted": "已信任", + "untrusted": "未信任", + "rotateToken": "轮换令牌", + "revokeConfirm": "撤销?", + "yes": "是", + "no": "否", + "revoke": "撤销", + "hideTokens": "隐藏令牌", + "tokens": "令牌 ({count})", + "tokenUsed": "{time} 使用", + "revoked": "已撤销", + "rotate": "轮换" + }, + "activityFeed": { + "title": "活动", + "live": "实时", + "paused": "已暂停", + "refresh": "刷新", + "filterAgent": "代理", + "filterAll": "全部", + "filterType": "类型", + "allTypes": "所有类型", + "filterLimit": "限制", + "loadingActivities": "加载活动中", + "noActivities": "未找到活动", + "noActivityForAgent": "未记录 {agent} 的活动", + "tryAdjustingFilters": "尝试调整筛选条件", + "entityTask": "任务:", + "entityCommentOn": "评论于:", + "entityAgent": "代理:", + "showDetails": "显示详情", + "activeSessions": "活跃会话", + "agentStatus": "状态", + "lastSeen": "最近在线", + "lastAction": "最近操作", + "tasksAssigned": "已分配任务", + "inProgress": "进行中", + "completed": "已完成", + "events": "{count} 个事件", + "newer": "更新", + "older": "更早", + "pageOf": "第 {page} 页,共 {total} 页", + "footerAgentEvents": "{agent} 的 {total} 个事件", + "footerShowing": "显示 {count} 条活动{filtered}", + "filtered": "(已筛选)", + "lastUpdated": "最后更新:{time}" + }, + "standup": { + "title": "每日站会", + "viewCurrent": "当前", + "viewHistory": "历史", + "generating": "生成中...", + "generate": "生成", + "export": "导出", + "standupFor": "{date} 的站会", + "generatedOn": "生成于 {date}", + "statCompleted": "已完成", + "statInProgress": "进行中", + "statBlocked": "受阻", + "statOverdue": "逾期", + "teamAccomplishments": "团队成就", + "teamBlockers": "团队阻碍", + "overdueTasks": "逾期任务", + "unassigned": "未分配", + "individualReports": "个人报告", + "activitySummary": "活动:{actions} 次操作,{comments} 条评论", + "sectionCompleted": "已完成 ({count})", + "sectionInProgress": "进行中 ({count})", + "sectionAssigned": "已分配 ({count})", + "sectionBlocked": "受阻 ({count})", + "none": "无", + "noStandupGenerated": "未生成站会", + "selectDatePrompt": "选择日期并生成报告", + "generateToday": "生成今日站会", + "noHistory": "未找到站会历史", + "historyGenerated": "生成于:{date}", + "historyAgentsParticipated": "{count} 个代理参与", + "historyCompleted": "已完成:{count}", + "historyInProgress": "进行中:{count}", + "historyBlocked": "受阻:{count}" + }, + "webhooks": { + "title": "Webhooks", + "configured": "已配置 {count} 个 Webhook", + "addWebhook": "+ 添加 Webhook", + "secretLabel": "Webhook 密钥(立即保存 - 仅显示一次)", + "dismiss": "关闭", + "testSuccessful": "测试成功", + "testFailed": "测试失败", + "testStatus": "状态:", + "testDuration": "耗时:", + "testError": "错误:", + "localAutomations": "本地 Webhook 自动化", + "localAutomationsDesc": "支持 Webhook 传递和重试的本地调度任务", + "nextRun": "下次运行 {time}", + "noNextRun": "未安排下次运行", + "running": "运行中...", + "run": "运行", + "noWebhooks": "未配置 Webhook", + "noWebhooksDesc": "添加 Webhook 以接收事件的 HTTP 通知", + "allEvents": "所有事件", + "eventCount": "{count} 个事件", + "deliveries": "{count} 次投递", + "failed": "{count} 次失败", + "lastFired": "最后触发 {time}", + "sendTestEvent": "发送测试事件", + "testing": "测试中...", + "test": "测试", + "disable": "禁用", + "enable": "启用", + "delete": "删除", + "recentDeliveries": "最近投递", + "noDeliveries": "暂无投递记录", + "newWebhook": "新建 Webhook", + "formName": "名称", + "formUrl": "URL", + "formEvents": "事件", + "cancel": "取消", + "createWebhook": "创建 Webhook" + }, + "skills": { + "title": "技能中心", + "subtitle": "本地管理技能并浏览外部注册表。", + "localMode": "本地模式", + "gatewayMode": "网关模式", + "tabInstalled": "已安装", + "tabRegistry": "注册表", + "searchPlaceholder": "快速查找已安装技能...", + "searchResults": "显示 {total} 个技能中匹配 \"{query}\" 的 {count} 个", + "diskSyncActive": "双向磁盘同步已激活(调度器每 60 秒同步)", + "scanAll": "全部扫描", + "scanningProgress": "扫描中 {done}/{total}...", + "refreshNow": "立即刷新", + "scanning": "扫描:", + "skillsScanned": "已扫描 {count} 个技能", + "dismiss": "关闭", + "addSkill": "添加技能", + "initialContent": "初始 SKILL.md 内容", + "loadingSkills": "加载技能中...", + "skillCount": "{total} 个技能中的 {count} 个", + "noMatch": "没有匹配此筛选条件的技能。", + "scan": "扫描", + "view": "查看", + "registrySearchPlaceholder": "搜索技能...", + "searching": "搜索中...", + "search": "搜索", + "installTo": "安装到:", + "installing": "安装中...", + "install": "安装", + "noRegistryResults": "在 {registry} 上未找到 \"{query}\" 的结果。请尝试不同的查询或切换注册表。", + "registryPrompt": "搜索 ClawdHub、skills.sh 或 Awesome OpenClaw 以发现并安装代理技能。", + "skillInstalled": "技能已安装", + "installFailed": "安装失败", + "installingSkill": "正在安装技能", + "stepFetching": "从注册表获取 SKILL.md", + "stepScanning": "运行安全扫描", + "stepWriting": "写入磁盘并注册", + "security": "安全", + "viewInstalled": "查看已安装", + "done": "完成", + "close": "关闭", + "delete": "删除", + "save": "保存", + "loadingSkillContent": "加载 SKILL.md...", + "noContent": "无内容。" + }, + "orchestration": { + "tabCommand": "命令", + "tabWorkflows": "工作流", + "tabPipelines": "管道", + "tabFleet": "集群", + "selectAgent": "选择代理...", + "commandPlaceholder": "向代理发送命令或消息...", + "send": "发送", + "noTemplates": "暂无工作流模板", + "createFirstTemplate": "创建第一个模板", + "cancel": "取消", + "new": "+ 新建", + "editTemplate": "编辑模板", + "newTemplate": "新建模板", + "templateName": "模板名称", + "templateDescription": "描述(可选)", + "taskPromptPlaceholder": "代理的任务提示...", + "timeout": "超时", + "role": "角色", + "lastRun": "最后运行", + "update": "更新", + "save": "保存", + "totalAgents": "代理总数", + "online": "在线", + "busy": "忙碌", + "errors": "错误" + }, + "agentDetail": { + "configTab": "配置", + "filesTab": "文件", + "toolsTab": "工具", + "channelsTab": "频道", + "cronTab": "定时任务", + "modelsTab": "模型", + "workspaceFiles": "工作区文件", + "refresh": "刷新", + "charCount": "{count} 字符", + "missing": "缺失", + "selectFileToView": "选择文件以查看或编辑", + "reset": "重置", + "saving": "保存中...", + "save": "保存", + "fileNotExistYet": "此文件尚不存在。您可以输入内容并保存来创建它。", + "toolConfiguration": "工具配置", + "profile": "配置文件:", + "saved": "已保存", + "allowListCount": "允许列表 ({count})", + "noAllowList": "无明确允许列表(使用配置文件默认值)", + "addToolAllowList": "添加工具到允许列表", + "add": "添加", + "alsoAllowCount": "额外允许 ({count})", + "alsoAllowDesc": "在配置文件默认值之上额外允许的工具。", + "none": "无", + "denyListCount": "拒绝列表 ({count})", + "noDeniedTools": "无拒绝的工具", + "addToolDenyList": "添加工具到拒绝列表", + "channelStatus": "频道状态", + "channelStatusDesc": "{agent} 可用的频道", + "noChannelsFound": "未找到频道...", + "connectedOf": "{connected}/{total} 已连接", + "noAccounts": "无账户", + "configuredCount": "{count} 已配置", + "notConfigured": "未配置", + "enabledCount": "{count} 已启用", + "disabled": "已禁用", + "cronJobs": "定时任务", + "allCronJobsCount": "{count}/{total} 个任务", + "agentCronJobsCount": "{count}/{total} 个任务", + "agentOnly": "仅代理", + "showAll": "显示全部", + "noCronJobsFound": "未找到定时任务", + "noCronJobsAssigned": "{agent} 没有分配定时任务", + "noSchedule": "无计划", + "enabled": "已启用", + "lastRun": "上次:", + "nextRun": "下次:", + "modelConfiguration": "模型配置", + "modelConfigDesc": "为此代理配置主模型和备用模型。", + "primaryModel": "主模型", + "defaultModel": "默认", + "fallbackChainCount": "备用链 ({count})", + "fallbackChainDesc": "当主模型失败或不可用时按顺序尝试的模型。", + "noFallbackModels": "未配置备用模型。", + "moveUp": "上移", + "moveDown": "下移", + "remove": "移除", + "addFallbackPlaceholder": "添加备用模型", + "sandboxMode": "模式", + "sandboxWorkspace": "工作区", + "sandboxNetwork": "网络", + "sandboxNetworkPlaceholder": "例如:none、host", + "toolsSection": "工具", + "subAgentsSection": "子代理", + "addSubAgentPlaceholder": "添加子代理", + "addSubAgent": "添加", + "subAgentModelOverride": "子代理模型覆盖", + "defaultInherit": "默认(继承)", + "modelLabel": "模型:", + "noSubAgents": "未配置子代理。", + "memorySearch": "记忆搜索", + "cancel": "取消" + }, + "taskBoard": { + "title": "任务看板", + "allProjects": "所有项目", + "projects": "项目", + "close": "关闭", + "spawnSubAgent": "创建子代理", + "newTask": "新建任务", + "refresh": "刷新", + "spawnAgentPlaceholder": "代理名称", + "spawnTaskPlaceholder": "任务描述", + "timeoutTitle": "超时(分钟)", + "spawning": "创建中...", + "spawn": "创建", + "noActiveSpawnRequests": "无活跃创建请求", + "dismissError": "关闭错误", + "taskBoardAriaLabel": "任务看板", + "columnAriaLabel": "{title} 列,{count} 个任务", + "colInbox": "收件箱", + "colAssigned": "已分配", + "colInProgress": "进行中", + "colReview": "审查", + "colQualityReview": "质量审查", + "colDone": "完成", + "recurring": "循环", + "spawned": "已生成", + "spawnedFromTask": "从任务 #{id} 生成", + "unassigned": "未分配", + "due": "截止:", + "dropTasksHere": "拖放任务至此", + "priority_low": "低", + "priority_medium": "中", + "priority_high": "高", + "priority_critical": "紧急", + "claudeCodeTasks": "Claude Code 任务", + "collapse": "折叠", + "expand": "展开", + "loading": "加载中...", + "noTeamTasksFound": "未找到团队任务", + "noTeamTasksDesc": "当前没有活跃的 Claude Code 团队任务。", + "taskCount": "{count} 个任务", + "blocked": "已阻塞", + "hermesScheduledTasks": "Hermes 计划任务", + "noScheduledTasksFound": "未找到计划任务", + "noScheduledTasksDesc": "当前没有活跃的 Hermes 计划任务。", + "noSchedule": "无计划", + "enabled": "已启用", + "disabled": "已禁用", + "createNewTask": "创建新任务", + "fieldTitle": "标题", + "fieldDescription": "描述", + "fieldPriority": "优先级", + "fieldProject": "项目", + "fieldAssignTo": "分配给", + "fieldTags": "标签", + "makeRecurring": "设为循环", + "createRecurringTask": "创建循环任务", + "createTask": "创建任务", + "cancel": "取消", + "editTask": "编辑任务", + "fieldStatus": "状态", + "saveChanges": "保存更改", + "edit": "编辑", + "deleteTaskConfirm": "删除\"{title}\"?", + "delete": "删除", + "closeTaskDetails": "关闭任务详情", + "noDescription": "无描述", + "taskDetailTabs": "任务详情标签", + "tabDetails": "详情", + "tabComments": "评论", + "tabQualityReview": "质量审查", + "tabSession": "会话", + "ticket": "工单", + "project": "项目", + "status": "状态", + "priority": "优先级", + "assignedTo": "分配给", + "created": "创建时间", + "issue": "议题", + "branch": "分支", + "pr": "PR", + "live": "实时", + "postingAs": "发布身份", + "newComment": "新评论...", + "addComment": "添加评论", + "broadcastToSubscribers": "广播给订阅者", + "broadcastPlaceholder": "向所有订阅者广播消息...", + "broadcast": "广播", + "broadcastSent": "已广播给 {count} 名订阅者", + "loadingComments": "加载评论中...", + "noComments": "暂无评论", + "aegisQualityReview": "Aegis 质量审查", + "noReviews": "暂无审查", + "reviewerPlaceholder": "审查者姓名", + "reviewNotesPlaceholder": "审查备注...", + "submit": "提交", + "loadingTranscript": "加载记录中...", + "noSessionMessages": "无会话消息" + }, + "cronManagement": { + "title": "定时任务管理", + "subtitle": "安排和管理定期任务", + "loading": "加载中...", + "refresh": "刷新", + "addJob": "添加任务", + "calendarView": "日历视图", + "calendarViewDescLocal": "时间以您的本地时区显示", + "calendarViewDesc": "时间以 UTC 显示", + "prev": "上一个", + "today": "今天", + "next": "下一个", + "calMode_agenda": "议程", + "calMode_week": "周", + "calMode_month": "月", + "searchPlaceholder": "搜索任务...", + "allAgents": "所有代理", + "allStates": "所有状态", + "enabled": "已启用", + "disabled": "已禁用", + "all": "全部", + "sortName": "名称", + "sortSchedule": "计划", + "sortLastRun": "上次运行", + "sortNextRun": "下次运行", + "ascending": "升序", + "descending": "降序", + "noJobsMatchFilters": "没有任务匹配当前过滤条件。", + "uniqueJobs": "{count} 个唯一任务", + "noJobsForDay": "此日期没有计划任务。", + "jobCount": "{count} 个任务", + "runsCount": "{count} 次运行", + "totalRunsCount": "共 {count} 次运行", + "moreJobs": "+{count} 更多", + "firstRun": "首次 {time}", + "scheduledJobs": "计划任务", + "jobsCount": "{count}/{total} 个任务", + "loadingJobs": "加载任务中...", + "noCronJobsFound": "未找到定时任务。", + "colJobName": "任务名称", + "colAgent": "代理", + "colSchedule": "计划", + "colModel": "模型", + "colStatus": "状态", + "colLastRun": "上次运行", + "colNextRun": "下次运行", + "colActions": "操作", + "enable": "启用", + "disable": "禁用", + "run": "运行", + "runNowForce": "立即运行(强制)", + "runNowIfDue": "立即运行(如到期)", + "clone": "克隆", + "history": "历史", + "configuration": "配置", + "delivery": "交付", + "source": "来源", + "localSchedulerAutomation": "本地调度器 / 自动化", + "command": "命令", + "timing": "时序", + "recentLogs": "最近日志", + "lastRun": "上次运行", + "nextRun": "下次运行", + "timezone": "时区", + "remove": "删除", + "close": "关闭", + "noLogsAvailable": "无可用日志。", + "runHistoryTitle": "运行历史:{name}", + "totalRuns": "共 {count} 次运行", + "filterRunsPlaceholder": "过滤运行记录...", + "timestamp": "时间戳", + "duration": "持续时间", + "error": "错误", + "noRunHistoryAvailable": "无可用运行历史。", + "loadMore": "加载更多", + "addNewCronJob": "添加新定时任务", + "fieldJobName": "任务名称", + "fieldSchedule": "计划(Cron 格式)", + "quickSelect": "快速选择...", + "scheduleFormatHint": "格式:分 时 日 月 星期", + "fieldCommand": "命令", + "fieldModelOptional": "模型(可选)", + "modelHint": "留空以使用代理或网关默认模型。", + "fieldStaggerOptional": "错开偏移(可选)", + "seconds": "秒", + "staggerHint": "延迟执行以避免与同一计划的其他任务重叠。", + "fieldDescriptionOptional": "描述(可选)", + "descriptionPlaceholder": "此任务做什么?", + "cancel": "取消", + "claudeCodeTeams": "Claude Code 团队", + "teamsCount": "{count} 个团队", + "collapse": "折叠", + "expand": "展开", + "noClaudeCodeTeams": "在 ~/.claude/teams/ 中未找到 Claude Code 团队", + "membersCount": "{count} 名成员" + }, + "sessionDetails": { + "title": "会话管理", + "subtitle": "监控和管理活动的代理会话", + "filter": "筛选", + "filterAll": "全部会话", + "filterActive": "仅活跃", + "filterIdle": "仅空闲", + "sortBy": "排序方式", + "sortAge": "时间", + "sortTokens": "令牌用量", + "sortModel": "模型", + "timeWindow": "时间窗口", + "last1h": "最近1小时", + "last6h": "最近6小时", + "last24h": "最近24小时", + "last7d": "最近7天", + "allTime": "全部", + "global": "全局", + "unknown": "未知", + "sessionCount": "{filtered} / {total} 个会话", + "activeCount": "{count} 个活跃", + "noSessionsMatch": "无会话匹配当前筛选条件", + "model": "模型", + "tokenUsage": "令牌用量", + "sessionDetails": "会话详情", + "kind": "类型", + "id": "ID", + "lastActivity": "最后活动", + "messages": "消息数", + "label": "标签", + "addLabel": "点击添加标签...", + "sessionControls": "会话控制", + "thinking": "思考", + "verbose": "详细", + "reasoning": "推理", + "off": "关闭", + "on": "开启", + "minimal": "极简", + "low": "低", + "medium": "中", + "high": "高", + "xhigh": "极高", + "full": "完整", + "stream": "流式", + "modelInformation": "模型信息", + "fullName": "完整名称", + "provider": "提供商", + "description": "描述", + "monitor": "监控", + "pause": "暂停", + "terminate": "终止", + "working": "处理中...", + "delete": "删除", + "deleteConfirm": "确认删除?", + "yes": "是", + "no": "否", + "confirmTerminate": "确定要终止此会话吗?", + "failedMonitor": "监控会话失败", + "failedPause": "暂停会话失败", + "failedTerminate": "终止会话失败", + "sessionOverview": "会话概览", + "totalSessions": "总会话数", + "active": "活跃", + "idle": "空闲", + "subAgents": "子代理", + "cronJobs": "定时任务", + "modelDistribution": "模型分布", + "highTokenUsage": "令牌用量过高", + "highTokenUsageDesc": "{count} 个会话的令牌用量超过 80%。" + }, + "costTracker": { + "title": "成本跟踪", + "subtitle": "跨代理、模型和会话的令牌用量、成本及支出分析", + "loadingCostData": "加载成本数据中", + "noUsageData": "暂无使用数据", + "noUsageDataDesc": "代理运行会话并消耗令牌后将显示使用数据。启动会话或对接代理以开始跟踪成本。", + "refresh": "刷新", + "totalCost": "总成本({timeframe})", + "totalTokens": "令牌总量", + "apiRequests": "API 请求数", + "activeAgents": "活跃代理", + "taskAttributed": "任务归因", + "usageTrends": "使用趋势", + "perTurn": "按轮次", + "cumulative": "累计", + "noTrendData": "该时间段无趋势数据", + "tokenUsageByModel": "按模型的令牌用量", + "noModelData": "无模型数据", + "costDistributionByModel": "按模型的成本分布", + "noCostData": "无成本数据", + "performanceInsights": "性能洞察", + "mostEfficientModel": "最高效模型", + "avgTokensPerRequest": "平均令牌/请求", + "optimizationPotential": "优化潜力", + "savingsPossible": "可节省", + "exportData": "导出数据", + "exportDataDesc": "下载令牌用量记录、模型统计及成本明细", + "exporting": "导出中...", + "noAgentData": "无代理数据", + "noAgentDataDesc": "代理开始上报后将显示令牌用量记录", + "agents": "代理", + "totalCostDays": "总成本({days}天)", + "avgPer1kTokens": "平均 $/1K 令牌", + "perAgentCost": "代理成本", + "agentBreakdown": "代理明细", + "inputTokens": "输入令牌", + "outputTokens": "输出令牌", + "ioRatio": "输入/输出比", + "lastActive": "最后活跃", + "noTaskCosts": "无任务归因成本", + "tokens": "令牌", + "sortBy": "排序", + "noSessionCostData": "无会话成本数据", + "noSessionCostDataDesc": "记录使用情况后将显示会话级明细。", + "activeStatus": "活跃", + "inactiveStatus": "非活跃", + "requests": "请求", + "inShort": "输入", + "outShort": "输出", + "avgPerReq": "平均/请求", + "noTaskCostData": "无任务成本数据", + "noTaskCostDataDesc": "代理处理已分配任务后将归因成本", + "tasksWithCosts": "有成本的任务", + "attributedCost": "归因成本", + "attributedTokens": "归因令牌", + "unattributed": "未归因", + "tasksByCost": "按成本排序的任务", + "reqs": "请求" + }, + "superAdmin": { + "accessDenied": "访问被拒绝", + "accessDeniedDesc": "超级控制台需要管理员权限。", + "loading": "加载超级管理数据中...", + "title": "超级控制台", + "subtitleLocal": "本地调度自动化和运行时状态的控制平面视图。", + "subtitleMultiTenant": "具有审批门控和更安全破坏性操作的多租户预置控制平面。", + "addWorkspace": "+ 添加工作区", + "refresh": "刷新", + "activeOrgs": "活跃组织", + "pendingInProgress": "待处理 / 进行中", + "erroredOrgs": "异常组织", + "queuedApprovals": "待审批队列", + "createNewWorkspace": "创建新工作区", + "createWorkspaceHint": "填写以下工作区详情,点击\"创建 + 排队\"以预置新客户端实例。", + "slugPlaceholder": "标识符(如 acme)", + "displayNamePlaceholder": "显示名称", + "linuxUserPlaceholder": "Linux 用户(可选)", + "planStandard": "标准版", + "planPro": "专业版", + "planEnterprise": "企业版", + "gatewayPortPlaceholder": "网关端口", + "dashboardPortPlaceholder": "面板端口", + "dryRun": "预演", + "live": "(实际)", + "createAndQueue": "创建 + 排队", + "tabOrganizations": "组织", + "tabJobs": "任务", + "tabEvents": "事件", + "searchOrganizations": "搜索组织", + "showing": "显示 {shown} / {total}", + "colTenant": "租户", + "colSystemUser": "系统用户", + "colOwner": "所有者", + "colStatus": "状态", + "colLatestJob": "最新任务", + "colAction": "操作", + "unassigned": "未分配", + "by": "由", + "unknownCreator": "未知", + "localReadOnly": "本地只读", + "queueDecommission": "排队停用", + "noMatchingOrgs": "无匹配的组织。", + "prev": "上一页", + "next": "下一页", + "page": "第 {page} / {total} 页", + "searchJobs": "搜索任务", + "colJob": "任务", + "colRequestedApproved": "请求方/审批方", + "reqShort": "请求", + "apprShort": "审批", + "view": "查看", + "viewEvents": "查看事件", + "approveAndRun": "审批 + 执行", + "approve": "审批", + "reject": "拒绝", + "running": "执行中...", + "run": "执行", + "noMatchingJobs": "无匹配的任务。", + "showingEventsForJob": "显示任务 #{jobId} 的事件", + "selectJobForEvents": "选择任务以查看预置事件日志。", + "noEventsYet": "此任务暂无事件。", + "queueDecommissionTitle": "排队停用:{name}", + "reviewImpact": "创建任务前请检查影响范围。", + "dryRunRecommended": "预演(推荐)", + "dryRunDesc": "不修改系统,验证命令并记录完整的计划执行。", + "liveExecution": "实际执行", + "liveExecutionDesc": "审批并执行后将停止服务并应用清理变更。", + "removeLinuxUser": "删除 Linux 用户", + "removeLinuxUserDesc": "执行 `userdel -r` 并删除主目录。", + "removeStateDirs": "删除状态/工作区目录", + "removeStateDirsDesc": "保留用户时删除 `.openclaw` 和 `workspace` 路径。", + "impactSummary": "影响摘要", + "impactStopsService": "停止并禁用 `openclaw-gateway@{user}.service`。", + "impactRemovesEnv": "删除 `/etc/openclaw-tenants/{user}.env`。", + "impactLinuxUserRemoved": "Linux 用户将被删除。", + "impactStateDirsRemoved": "状态/工作区目录将被删除。", + "impactRetained": "Linux 用户和目录将保留。", + "reasonOptional": "原因(可选)", + "typeSlugLabel": "输入", + "toConfirmLive": "以确认实际停用", + "cancel": "取消", + "queueing": "排队中...", + "queueDryRunDecommission": "排队预演停用", + "queueLiveDecommission": "排队实际停用", + "slugAndNameRequired": "标识符和显示名称为必填项", + "tenantCreated": "租户 {slug} 已创建。引导任务已排队。", + "jobExecuted": "任务 #{jobId} 已执行", + "jobApprovedExecuted": "任务 #{jobId} 已审批并执行", + "typeToConfirm": "输入 {slug} 以确认实际停用", + "decommissionQueuedDryRun": "已为 {slug} 排队预演停用", + "decommissionQueued": "已为 {slug} 排队停用", + "optionalReason": "{action} 的可选原因:", + "jobActioned": "任务 #{jobId} 已{action}" + }, + "auditTrail": { + "title": "审计日志", + "eventsLogged": "已记录 {count} 个事件", + "refresh": "刷新", + "allActions": "全部操作", + "groupAuth": "认证", + "groupUsers": "用户", + "groupAgents": "代理", + "groupSystem": "系统", + "groupConfig": "配置", + "groupWorkspaces": "工作区", + "actionLogin": "登录", + "actionLoginFailed": "登录失败", + "actionLogout": "退出登录", + "actionLoginGoogle": "Google 登录", + "actionGoogleDisconnect": "Google 断开连接", + "actionPasswordChange": "修改密码", + "actionProfileUpdate": "更新资料", + "actionUserCreate": "创建用户", + "actionUserUpdate": "更新用户", + "actionUserDelete": "删除用户", + "actionRoleDenied": "访问被拒绝", + "actionAccessRequest": "申请访问", + "actionAccessApprove": "批准访问", + "actionAccessDeny": "拒绝访问", + "actionAgentRegister": "注册代理", + "actionAgentCreate": "创建代理", + "actionAgentUpdate": "更新代理", + "actionAgentDelete": "删除代理", + "actionAgentConfigSync": "配置已同步", + "actionLocalAgentSync": "本地代理已同步", + "actionSettingsUpdate": "更新设置", + "actionAutoBackup": "自动备份", + "actionBackupCreate": "创建备份", + "actionBackupDelete": "删除备份", + "actionHeartbeatCheck": "心跳检测", + "actionIntegrationTest": "集成测试", + "actionCleanup": "清理", + "actionExport": "导出", + "actionTokenRotate": "轮换令牌", + "actionGatewayConfigUpdate": "更新网关配置", + "actionWorkspaceCreate": "创建工作区", + "actionWorkspaceUpdate": "更新工作区", + "actionWorkspaceDelete": "删除工作区", + "filterByActor": "按操作者筛选...", + "noEvents": "未找到审计事件", + "userRef": "用户 #{id}", + "previous": "上一页", + "next": "下一页", + "pageOf": "第 {page} / {total} 页", + "adminRequired": "查看审计日志需要管理员权限", + "failedFetch": "获取审计日志失败", + "detailUsername": "用户名", + "detailRole": "角色", + "detailName": "名称", + "detailPasswordReset": "密码已重置", + "detailChanged": "已变更", + "detailSize": "大小", + "detailMarkedOffline": "标记为离线", + "detailAgent": "代理", + "detailSessions": "会话", + "detailEvents": "事件", + "detailRemoved": "已删除", + "detailType": "类型" + }, + "securityAudit": { + "title": "安全审计", + "subtitle": "安全态势、认证事件、信任评分和威胁检测", + "timeframeHour": "小时", + "timeframeDay": "天", + "timeframeWeek": "周", + "timeframeMonth": "月", + "loadingSecurityData": "正在加载安全数据", + "securityPosture": "安全态势", + "blendedScore": "综合评分:70% 基础设施配置,30% 事件历史。", + "infrastructureScan": "基础设施扫描", + "scanCredentials": "凭证", + "scanNetwork": "网络", + "scanOpenclaw": "OpenClaw", + "scanRuntime": "运行时", + "scanOs": "操作系统安全", + "authEvents": "认证事件", + "noAuthEvents": "此时间范围内无认证事件", + "colType": "类型", + "colActor": "操作者", + "colIP": "IP", + "colTime": "时间", + "agentTrustScores": "代理信任评分", + "noAgentTrustData": "无代理信任数据", + "flagged": "已标记", + "secretExposureAlerts": "密钥泄露告警", + "noSecretsDetected": "未检测到密钥", + "colFile": "文件", + "colPreview": "预览", + "colStatus": "状态", + "colDetected": "检测时间", + "statusResolved": "已解决", + "statusActive": "活跃", + "mcpToolAudit": "MCP 工具审计", + "noToolUsageData": "无工具使用数据", + "chartSuccess": "成功", + "chartFailure": "失败", + "rateLimitAbuseSignals": "频率限制/滥用信号", + "noRateLimitSignals": "无频率限制信号", + "hits": "{hits} 次命中", + "injectionAttempts": "注入攻击尝试", + "noInjectionAttempts": "未检测到注入攻击", + "colSource": "来源", + "colInput": "输入", + "statusBlocked": "已拦截", + "statusPassed": "已通过", + "securityTimeline": "安全时间线({timeframe})", + "noTimelineData": "无时间线数据", + "chartAuthEvents": "认证事件", + "chartInjections": "注入攻击", + "chartSecrets": "密钥泄露", + "chartToolCalls": "工具调用", + "agentEvalDashboard": "代理评估仪表板", + "overallConvergence": "整体收敛度", + "crossAgentAlignment": "跨代理评估层对齐情况", + "noEvalData": "无评估数据", + "convergence": "收敛度:", + "drift": "漂移", + "fixPrefix": "修复:{fix}", + "issueCount": "{count, plural, one {# 个问题} other {# 个问题}}" + }, + "office": { + "title": "指挥台", + "subtitle": "实时监控您的团队", + "loadingLocalSessions": "正在扫描本地会话...", + "loadingOffice": "正在加载办公室...", + "activeCount": "{count} 活跃", + "standbyCount": "{count} 待机", + "alertCount": "{count} 告警", + "offlineCount": "{count} 离线", + "buttonDeck": "甲板", + "buttonCrewChart": "团队图表", + "refresh": "刷新", + "emptyDeck": "甲板为空", + "emptyDeckSubtitle": "部署代理以在此处显示", + "crewHeader": "团队", + "onlineCount": "{count} 在线", + "filterAll": "全部", + "filterWorking": "工作中", + "filterIdle": "空闲", + "filterNeedsAttention": "需要关注", + "filterRunning": "运行中", + "filterNotRunning": "未运行", + "noWorkersInFilter": "此筛选条件下无人员。", + "noRecentActivity": "无近期活动", + "activeStatus": "活跃", + "idleMinutes": "{minutes}m 空闲", + "mainDeck": "主甲板", + "radarLabel": "雷达", + "resetView": "重置", + "showCrewButton": "显示团队", + "hideCrewButton": "隐藏团队", + "showRadarButton": "显示雷达", + "hideRadarButton": "隐藏雷达", + "showLogButton": "显示日志", + "hideLogButton": "隐藏日志", + "resetLayout": "重置布局", + "deckLog": "甲板日志", + "noEventsYet": "暂无事件。点击区域或执行操作。", + "legendActive": "活跃", + "legendStandby": "待机", + "legendOther": "其他", + "hotspotUp": "上", + "hotspotDown": "下", + "hotspotLeft": "左", + "hotspotRight": "右", + "hotspotFineMinusX": "微调 -X", + "hotspotFinePlusX": "微调 +X", + "hotspotWider": "加宽", + "hotspotNarrower": "缩窄", + "hotspotTaller": "加高", + "hotspotShorter": "缩短", + "segmentedBy": "按以下分组", + "segmentCategory": "类别", + "segmentRole": "角色", + "segmentStatus": "状态", + "currentActivity": "当前活动", + "taskStatTotal": "总计", + "taskStatAssigned": "已分配", + "taskStatActive": "进行中", + "taskStatDone": "完成", + "sessionLabel": "会话:", + "quickActions": "快捷操作", + "actionFocus": "专注", + "actionPair": "协作", + "actionBreak": "休息", + "openFlightDeck": "在 Flight Deck 中打开", + "openingFlightDeck": "正在打开 Flight Deck...", + "flightDeckCompanion": "用于会话深度分析的私人/专业伴侣应用", + "flightDeckRequired": "需要 Flight Deck", + "flightDeckDescription": "Flight Deck 是 Mission Control 的私人/专业伴侣应用。", + "flightDeckNotInstalled": "此机器上似乎未安装 Flight Deck。安装后可通过更丰富的控制和诊断功能打开代理会话。", + "maybeLater": "稍后再说", + "downloadFlightDeck": "下载 Flight Deck", + "moving": "移动中", + "neverSeen": "从未出现", + "justNow": "刚刚", + "minutesAgo": "{minutes}分钟前", + "hoursAgo": "{hours}小时前", + "daysAgo": "{days}天前" + }, + "githubSync": { + "title": "GitHub Issues 同步", + "subtitle": "将 GitHub Issues 导入为 Mission Control 任务", + "loading": "正在加载 GitHub 同步...", + "connectedAs": "GitHub:{user}", + "notConfigured": "GitHub:未配置", + "tokenNotConfigured": "GitHub 令牌未配置", + "tokenNotConfiguredDesc": "在集成中设置 GITHUB_TOKEN 以启用 Issue 同步。您仍可浏览下方的同步历史和关联任务。", + "importIssues": "导入 Issues", + "labelRepository": "仓库", + "placeholderRepo": "owner/repo", + "labelLabels": "标签(可选)", + "placeholderLabels": "bug,enhancement", + "labelState": "状态", + "stateOpen": "开放", + "stateClosed": "已关闭", + "stateAll": "全部", + "labelAssignAgent": "分配给代理(可选)", + "unassigned": "未分配", + "buttonPreview": "预览", + "buttonImport": "导入", + "twoWaySync": "双向同步", + "syncAll": "全部同步", + "enableSync": "启用", + "disableSync": "禁用", + "syncButton": "同步", + "noProjectsLinked": "无项目关联到 GitHub 仓库。请在项目管理中设置 GitHub 仓库。", + "previewTitle": "预览({count} 个 Issue)", + "colNumber": "#", + "colTitle": "标题", + "colLabels": "标签", + "colState": "状态", + "colCreated": "创建时间", + "syncHistory": "同步历史", + "colRepo": "仓库", + "colIssues": "Issues", + "colStatus": "状态", + "colSyncedAt": "同步时间", + "noSyncHistory": "暂无同步历史。请在上方导入 Issues 以开始。", + "linkedTasks": "关联任务", + "linkedTasksWithCount": "关联任务({count})", + "colTask": "任务", + "colPriority": "优先级", + "colGitHub": "GitHub", + "colSynced": "已同步", + "noLinkedTasks": "暂无关联到 GitHub Issues 的任务。", + "syncResultImported": "已导入:{count}", + "syncResultSkipped": "已跳过:{count}", + "syncResultErrors": "错误:{count}", + "enterRepo": "请输入仓库(owner/repo)", + "noIssuesFound": "未找到匹配筛选条件的 Issue", + "failedFetchIssues": "获取 Issues 失败", + "networkError": "网络错误", + "syncFailed": "同步失败", + "failedToggleSync": "切换同步状态失败", + "importedFeedback": "已导入 {imported} 个 Issue,已跳过 {skipped} 个" + }, + "agentCost": { + "title": "代理费用明细", + "subtitle": "按代理划分的令牌使用量和支出分析", + "loadingAgentCosts": "正在加载代理费用", + "viewOverview": "概览", + "viewPerAgentDB": "按代理(数据库)", + "timeframeHour": "小时", + "timeframeDay": "天", + "timeframeWeek": "周", + "timeframeMonth": "月", + "noAgentCostData": "无代理费用数据", + "noAgentCostSubtitle": "代理开始使用令牌后将显示费用数据", + "refresh": "刷新", + "activeAgents": "活跃代理", + "totalCost": "总费用({timeframe})", + "mostExpensive": "费用最高", + "mostEfficient": "效率最高", + "taskAttributed": "任务归因", + "unattributed": "{cost} 未归因", + "costDistributionByAgent": "按代理的费用分布", + "noCostData": "无费用数据", + "costTrends": "费用趋势(前5名代理)", + "noTrendData": "无趋势数据", + "costComparison": "费用对比", + "costEfficiency": "费用效率(每1K令牌$/代理)", + "agentCostRanking": "代理费用排名", + "noTaskCosts": "此代理无任务归因费用", + "tasksTab": "任务({count})", + "modelsTab": "模型({count})", + "sessionCount": "{count, plural, one {# 个会话} other {# 个会话}}", + "requestCount": "{count, plural, one {# 个请求} other {# 个请求}}", + "tokens": "令牌", + "ofTotal": "占总量 {pct}%", + "reqs": "{count} 个请求", + "inputTokens": "输入令牌", + "outputTokens": "输出令牌", + "ioRatio": "输入/输出比", + "lastActive": "最后活跃", + "modelBreakdown": "模型明细", + "inSuffix": "输入", + "outSuffix": "输出", + "noPerAgentData": "数据库中无按代理数据", + "noPerAgentDataSubtitle": "代理开始发送心跳后将显示令牌使用记录", + "agentCountDB": "代理数(数据库)", + "totalCostDays": "总费用({days}天)", + "totalTokens": "总令牌数", + "avgPer1kTokens": "平均每1K令牌费用", + "perAgentCostDB": "按代理费用(数据库)", + "agentTokenBreakdown": "代理令牌明细", + "chartCost": "费用($)" + }, + "tokenDashboard": { + "title": "令牌与费用仪表板", + "subtitle": "监控各模型和会话的令牌使用量和费用", + "viewOverview": "概览", + "viewSessions": "会话", + "timeframeHour": "小时", + "timeframeDay": "天", + "timeframeWeek": "周", + "timeframeMonth": "月", + "filtersLabel": "筛选:", + "clearAll": "清除全部", + "timezoneLabel": "时区:", + "sortByLabel": "排序:", + "noSessionCostData": "无会话费用数据", + "noSessionCostSubtitle": "记录使用情况后将显示会话级别的明细。", + "sessionActive": "活跃", + "sessionInactive": "非活跃", + "requests": "请求", + "inSuffix": "输入", + "outSuffix": "输出", + "avgPerRequest": "平均/请求", + "loadingUsageData": "正在加载使用数据", + "totalTokens": "总令牌数({timeframe})", + "totalCost": "总费用({timeframe})", + "apiRequests": "API 请求数", + "avgTokensPerRequest": "平均令牌/请求", + "cacheReadTokens": "缓存读取令牌", + "cacheWriteTokens": "缓存写入令牌", + "usageTrends": "使用趋势({timeframe})", + "peakLabel": "峰值:", + "perTurnButton": "每轮", + "cumulativeButton": "累计", + "noTrendData": "此时间范围内无趋势数据", + "chartTokens": "令牌", + "chartRequests": "请求", + "tokenUsageByModel": "按模型的令牌使用量", + "noModelUsageData": "暂无模型使用数据", + "costDistributionByModel": "按模型的费用分布", + "noCostData": "暂无费用数据", + "costByProvider": "按提供商的费用", + "noProviderData": "暂无提供商数据", + "exportData": "导出数据", + "exportCsvFiltered": "导出 CSV(已筛选)", + "exportCsvFull": "导出 CSV(完整)", + "exportJson": "导出 JSON", + "exporting": "正在导出...", + "exportDescription": "导出令牌使用数据以供分析。\"已筛选\"仅导出当前显示的数据;\"完整\"从服务器导出所有记录。", + "performanceInsights": "性能洞察", + "mostEfficientModel": "效率最高的模型", + "mostUsedModel": "使用最多的模型", + "optimizationPotential": "优化潜力", + "savingsPossible": "可节省 {pct}%", + "modelEfficiencyComparison": "模型效率对比", + "modelPerformance": "模型性能", + "topSessionsByCost": "按费用排名的会话", + "requestsLabel": "请求", + "avgCost": "平均费用", + "avgTokens": "平均令牌", + "noUsageData": "无使用数据", + "noUsageDataSubtitle": "代理开始运行后将在此处显示令牌使用情况", + "refresh": "刷新" + }, + "memoryBrowser": { + "hideSidebar": "隐藏侧边栏", + "showSidebar": "显示侧边栏", + "fileCountSize": "{count} 个文件 / {size}", + "indexing": "索引中…", + "newFile": "+ 新建", + "searchPlaceholder": "搜索文件...", + "searchResults": "{count} 个结果", + "noFiles": "无文件", + "refresh": "刷新", + "toggleBacklinks": "切换反向链接面板", + "links": "链接", + "edit": "编辑", + "delete": "删除", + "save": "保存", + "saving": "保存中...", + "cancel": "取消", + "selectFilePrompt": "选择文件以查看", + "orSwitchView": "或切换到健康/流程视图", + "schemaWarnings": "模式警告:", + "editPlaceholder": "编辑文件内容...", + "loadingHermes": "加载 Hermes 记忆", + "noHermesData": "没有 Hermes 记忆数据", + "hermesMemoryTitle": "Hermes 记忆", + "hermesMemoryDesc": "Hermes 代理持久化记忆文件的只读视图", + "noAgentMemory": "未找到代理记忆文件", + "noUserMemory": "未找到用户记忆文件", + "runningDiagnostics": "运行诊断", + "noHealthData": "无健康数据", + "runDiagnostics": "运行诊断", + "healthCategories": "8 个类别 / {time}", + "pipelineTitle": "处理流程", + "pipelineDesc": "受 Ars Contexta 6R 启发的知识维护操作", + "pipelineReflect": "反思", + "pipelineReflectDesc": "发现文件之间的连接机会", + "pipelineReweave": "重织", + "pipelineReweaveDesc": "查找需要从较新链接文件更新的陈旧文件", + "pipelineGenerateMoc": "生成 MOC", + "pipelineGenerateMocDesc": "从文件集群自动生成内容地图", + "processing": "处理中", + "filesProcessed": "已处理 {count} 个文件", + "noSuggestions": "无建议——知识库连接良好", + "mapsOfContent": "内容地图({count} 个组)", + "newFileTitle": "新建文件", + "directory": "目录", + "fileName": "名称", + "fileType": "类型", + "content": "内容", + "contentOptional": "可选...", + "create": "创建", + "deleteFileTitle": "删除文件", + "permanentlyDelete": "永久删除:", + "outgoing": "传出({count})", + "backlinks": "反向链接({count})", + "wikiLinks": "Wiki 链接({count})" + }, + "userManagement": { + "adminAccessRequired": "需要管理员权限", + "failedToLoadUsers": "加载用户失败", + "failedToCreate": "创建用户失败", + "networkError": "网络错误", + "userUpdated": "用户已更新", + "failedToUpdate": "更新失败", + "deletedUser": "已删除用户\"{username}\"", + "failedToDelete": "删除失败", + "failedToAction": "无法 {action} 请求", + "requestActioned": "已为 {email} {action} 请求", + "user": "用户", + "accessDenied": "访问被拒绝", + "adminRequired": "用户管理需要管理员权限。", + "loadingUsers": "加载用户中...", + "usersTitle": "用户", + "usersSummary": "{count} 个注册用户 · {pending} 个待审批", + "addLocalUser": "+ 添加本地用户", + "cancel": "取消", + "pendingRequests": "{count} 个待处理访问请求", + "identity": "身份", + "attempts": "尝试次数", + "lastAttempt": "最后尝试", + "action": "操作", + "roleViewer": "查看者", + "roleOperator": "操作员", + "roleAdmin": "管理员", + "noteOptional": "备注(可选)", + "confirm": "确认", + "reject": "拒绝", + "review": "审核", + "newLocalUser": "新建本地用户", + "username": "用户名", + "password": "密码", + "displayName": "显示名称", + "creating": "创建中...", + "createUser": "创建用户", + "colUser": "用户", + "colProvider": "提供商", + "colRole": "角色", + "colLastLogin": "最后登录", + "colActions": "操作", + "newPasswordOptional": "新密码(可选)", + "save": "保存", + "edit": "编辑", + "delete": "删除", + "never": "从不", + "createdUser": "已创建用户\"{username}\"" + }, + "alertRules": { + "title": "警报规则", + "description": "为代理、任务和系统事件配置自动警报", + "evaluating": "评估中...", + "evaluateNow": "立即评估", + "newRule": "+ 新规则", + "statTotalRules": "规则总数", + "statActive": "活跃", + "statTotalTriggers": "触发总数", + "evalResultsTitle": "评估结果", + "dismiss": "关闭", + "triggered": "已触发", + "noRulesToEvaluate": "没有可评估的规则", + "loadingRules": "加载规则中...", + "noRulesConfigured": "未配置警报规则", + "createRuleHint": "创建规则以接收系统事件通知", + "never": "从不", + "cooldown": "冷却:{minutes}分钟", + "triggerCount": "触发:{count}次", + "lastTriggered": "最后:{time}", + "deleteRule": "删除规则", + "newRuleTitle": "新建警报规则", + "ruleName": "规则名称", + "ruleNamePlaceholder": "例如:代理离线警报", + "ruleDescription": "描述", + "optionalDescription": "可选描述", + "entity": "实体", + "entityAgent": "代理", + "entityTask": "任务", + "entitySession": "会话", + "entityActivity": "活动", + "field": "字段", + "operator": "运算符", + "value": "值", + "valuePlaceholder": "例如:error", + "cooldownMinutes": "冷却时间(分钟)", + "notifyRecipient": "通知(接收者)", + "cancel": "取消", + "creating": "创建中...", + "createRule": "创建规则", + "failedToCreate": "创建规则失败", + "networkError": "网络错误" + }, + "agentSquad": { + "failedToFetch": "获取代理失败", + "errorOccurred": "发生错误", + "failedToUpdateStatus": "更新代理状态失败", + "loadingAgents": "加载代理", + "title": "代理团队", + "live": "实时", + "manual": "手动", + "addAgent": "+ 添加代理", + "refresh": "刷新", + "noAgents": "未找到代理", + "addFirstAgent": "添加您的第一个代理以开始使用", + "session": "会话", + "totalTasks": "任务总数", + "inProgress": "进行中", + "lastSeen": "最后可见", + "activity": "活动", + "wake": "唤醒", + "busy": "忙碌", + "sleep": "休眠", + "statusControl": "状态控制", + "role": "角色", + "sessionKey": "会话密钥", + "notSet": "未设置", + "soulContent": "SOUL 内容", + "soulPlaceholder": "代理个性和指令...", + "taskStatistics": "任务统计", + "total": "总计", + "assigned": "已分配", + "done": "完成", + "created": "创建时间", + "lastUpdated": "最后更新", + "saveChanges": "保存更改", + "cancel": "取消", + "editAgent": "编辑代理", + "createNewAgent": "创建新代理", + "name": "名称", + "rolePlaceholder": "例如:研究员、开发者、分析师", + "sessionKeyOptional": "会话密钥(可选)", + "sessionKeyPlaceholder": "ClawdBot 会话标识符", + "soulContentOptional": "SOUL 内容(可选)", + "createAgent": "创建代理", + "failedToUpdate": "更新代理失败", + "failedToCreate": "创建代理失败", + "never": "从不", + "justNow": "刚刚", + "minutesAgo": "{count}分钟前", + "hoursAgo": "{count}小时前", + "daysAgo": "{count}天前" + }, + "multiGateway": { + "title": "网关管理器", + "description": "管理多个 OpenClaw 网关连接", + "probeAll": "探测全部", + "addGateway": "+ 添加网关", + "connected": "已连接", + "disconnected": "已断开", + "noActiveConnection": "无活跃连接", + "loadingGateways": "加载网关中...", + "noGateways": "未配置网关", + "addGatewayHint": "添加网关以开始管理连接", + "discoveredGateways": "发现的网关", + "discoveredGatewaysDesc": "在此计算机上发现的 OpenClaw 网关", + "refresh": "刷新", + "running": "运行中", + "stopped": "已停止", + "bind": "绑定", + "mode": "模式", + "register": "注册", + "directCliConnections": "直接 CLI 连接", + "directCliDesc": "不经过网关直接连接的 CLI 工具", + "noDirectConnections": "无直接 CLI 连接", + "useApiConnect": "使用", + "toRegisterCli": "注册 CLI 工具", + "role": "角色", + "heartbeat": "心跳", + "never": "从不", + "disconnect": "断开", + "neverProbed": "从未探测", + "primary": "主要", + "connectedBadge": "已连接", + "token": "令牌", + "tokenSet": "已设置", + "tokenNone": "无", + "latency": "延迟", + "last": "最后", + "gatewayVersion": "网关版本", + "noHistory": "暂无历史记录", + "colorKey": "颜色说明", + "colorKeyTitle": "绿色=在线;琥珀色=错误;红色=离线", + "lastLatency": "最后延迟:{ms}ms", + "probeGateway": "探测网关", + "probing": "探测中...", + "probe": "探测", + "connectToGateway": "连接到此网关", + "connect": "连接", + "setPrimaryTitle": "设为主要", + "setPrimary": "设为主要", + "removeGateway": "移除网关", + "addGatewayTitle": "添加网关", + "name": "名称", + "namePlaceholder": "例如:主要", + "host": "主机", + "port": "端口", + "tokenField": "令牌", + "optional": "可选", + "cancel": "取消", + "adding": "添加中...", + "addGatewaySubmit": "添加网关", + "failedToAdd": "添加网关失败", + "networkError": "网络错误" + } +} diff --git a/next.config.js b/next.config.js index 9b4728e18f658c88ef5da83ca796db9092cdec80..89f3005923cfb2731734604e3bad897236e8116c 100644 --- a/next.config.js +++ b/next.config.js @@ -1,3 +1,5 @@ +const withNextIntl = require('next-intl/plugin')('./src/i18n/request.ts') + /** @type {import('next').NextConfig} */ const nextConfig = { output: 'standalone', @@ -29,4 +31,4 @@ const nextConfig = { }; -module.exports = nextConfig; +module.exports = withNextIntl(nextConfig); diff --git a/package.json b/package.json index b1c0442bb15d80116a420a03ac6db9f074a0158c..0ffb168bb28958a9d545cfe2292467b6196f8c07 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "eslint": "^9.18.0", "eslint-config-next": "^16.1.6", "next": "^16.1.6", + "next-intl": "^4.8.3", "next-themes": "^0.4.6", "pino": "^10.3.1", "postcss": "^8.5.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6cb9bca612cb05e80abcb51a6274932f7f53bb57..57fdf9b5c4c82762f415d02391528404f23b1a0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: next: specifier: ^16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next-intl: + specifier: ^4.8.3 + version: 4.8.3(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(typescript@5.9.3) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -515,6 +518,21 @@ packages: '@floating-ui/vue@1.1.9': resolution: {integrity: sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ==} + '@formatjs/ecma402-abstract@3.1.1': + resolution: {integrity: sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==} + + '@formatjs/fast-memoize@3.1.0': + resolution: {integrity: sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==} + + '@formatjs/icu-messageformat-parser@3.5.1': + resolution: {integrity: sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA==} + + '@formatjs/icu-skeleton-parser@2.1.1': + resolution: {integrity: sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q==} + + '@formatjs/intl-localematcher@0.8.1': + resolution: {integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==} + '@headlessui/tailwindcss@0.2.2': resolution: {integrity: sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==} engines: {node: '>=10'} @@ -837,6 +855,94 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + '@phosphor-icons/core@2.1.1': resolution: {integrity: sha512-v4ARvrip4qBCImOE5rmPUylOEK4iiED9ZyKjcvzuezqMaiRASCHKcRIuvvxL/twvLpkfnEODCOJp5dM4eZilxQ==} @@ -1237,15 +1343,97 @@ packages: resolution: {integrity: sha512-yRy9IrDtqwqYJ9R4tiqdWj9YTQ7qew5w2Z8rpid/z16inhzqreD8snIonkXTG/eLBkm2n88O2lwPe3R+Po3bZQ==} engines: {node: '>=18'} + '@schummar/icu-type-parser@1.21.5': + resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@swc/core-darwin-arm64@1.15.18': + resolution: {integrity: sha512-+mIv7uBuSaywN3C9LNuWaX1jJJ3SKfiJuE6Lr3bd+/1Iv8oMU7oLBjYMluX1UrEPzwN2qCdY6Io0yVicABoCwQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.15.18': + resolution: {integrity: sha512-wZle0eaQhnzxWX5V/2kEOI6Z9vl/lTFEC6V4EWcn+5pDjhemCpQv9e/TDJ0GIoiClX8EDWRvuZwh+Z3dhL1NAg==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.15.18': + resolution: {integrity: sha512-ao61HGXVqrJFHAcPtF4/DegmwEkVCo4HApnotLU8ognfmU8x589z7+tcf3hU+qBiU1WOXV5fQX6W9Nzs6hjxDw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.15.18': + resolution: {integrity: sha512-3xnctOBLIq3kj8PxOCgPrGjBLP/kNOddr6f5gukYt/1IZxsITQaU9TDyjeX6jG+FiCIHjCuWuffsyQDL5Ew1bg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-arm64-musl@1.15.18': + resolution: {integrity: sha512-0a+Lix+FSSHBSBOA0XznCcHo5/1nA6oLLjcnocvzXeqtdjnPb+SvchItHI+lfeiuj1sClYPDvPMLSLyXFaiIKw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@swc/core-linux-x64-gnu@1.15.18': + resolution: {integrity: sha512-wG9J8vReUlpaHz4KOD/5UE1AUgirimU4UFT9oZmupUDEofxJKYb1mTA/DrMj0s78bkBiNI+7Fo2EgPuvOJfuAA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-musl@1.15.18': + resolution: {integrity: sha512-4nwbVvCphKzicwNWRmvD5iBaZj8JYsRGa4xOxJmOyHlMDpsvvJ2OR2cODlvWyGFH6BYL1MfIAK3qph3hp0Az6g==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@swc/core-win32-arm64-msvc@1.15.18': + resolution: {integrity: sha512-zk0RYO+LjiBCat2RTMHzAWaMky0cra9loH4oRrLKLLNuL+jarxKLFDA8xTZWEkCPLjUTwlRN7d28eDLLMgtUcQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.15.18': + resolution: {integrity: sha512-yVuTrZ0RccD5+PEkpcLOBAuPbYBXS6rslENvIXfvJGXSdX5QGi1ehC4BjAMl5FkKLiam4kJECUI0l7Hq7T1vwg==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.15.18': + resolution: {integrity: sha512-7NRmE4hmUQNCbYU3Hn9Tz57mK9Qq4c97ZS+YlamlK6qG9Fb5g/BB3gPDe0iLlJkns/sYv2VWSkm8c3NmbEGjbg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.15.18': + resolution: {integrity: sha512-z87aF9GphWp//fnkRsqvtY+inMVPgYW3zSlXH1kJFvRT5H/wiAn+G32qW5l3oEk63KSF1x3Ov0BfHCObAmT8RA==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} + '@tanstack/virtual-core@3.13.19': resolution: {integrity: sha512-/BMP7kNhzKOd7wnDeB8NrIRNLwkf5AhCYCvtfZV2GXWbBieFm/el0n6LOAXlTi6ZwHICSNnQcIxRCWHrLzDY+g==} @@ -2918,6 +3106,9 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + icu-minify@4.8.3: + resolution: {integrity: sha512-65Av7FLosNk7bPbmQx5z5XG2Y3T2GFppcjiXh4z1idHeVgQxlDpAmkGoYI0eFzAvrOnjpWTL5FmPDhsdfRMPEA==} + identifier-regex@1.0.1: resolution: {integrity: sha512-ZrYyM0sozNPZlvBvE7Oq9Bn44n0qKGrYu5sQ0JzMUnjIhpgWYE2JB6aBoFwEYdPjqj7jPyxXTMJiHDOxDfd8yw==} engines: {node: '>=18'} @@ -2971,6 +3162,9 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} + intl-messageformat@11.1.2: + resolution: {integrity: sha512-ucSrQmZGAxfiBHfBRXW/k7UC8MaGFlEj4Ry1tKiDcmgwQm1y3EDl40u+4VNHYomxJQMJi9NEI3riDRlth96jKg==} + is-absolute-url@4.0.1: resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3475,11 +3669,28 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neverpanic@0.0.5: resolution: {integrity: sha512-daO+ijOQG8g2BXaAwpETa0GUvlIAfqC+1/CUdLp2Ga8qwDaUyHIieX/SM0yZoPBf7k92deq4DO7tZOWWeL063Q==} peerDependencies: typescript: '5' + next-intl-swc-plugin-extractor@4.8.3: + resolution: {integrity: sha512-YcaT+R9z69XkGhpDarVFWUprrCMbxgIQYPUaXoE6LGVnLjGdo8hu3gL6bramDVjNKViYY8a/pXPy7Bna0mXORg==} + + next-intl@4.8.3: + resolution: {integrity: sha512-PvdBDWg+Leh7BR7GJUQbCDVVaBRn37GwDBWc9sv0rVQOJDQ5JU1rVzx9EEGuOGYo0DHAl70++9LQ7HxTawdL7w==} + peerDependencies: + next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: @@ -3511,6 +3722,9 @@ packages: resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==} engines: {node: '>=10'} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -3672,6 +3886,9 @@ packages: engines: {node: '>=18'} hasBin: true + po-parser@2.1.1: + resolution: {integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -4437,6 +4654,11 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-intl@4.8.3: + resolution: {integrity: sha512-nLxlC/RH+le6g3amA508Itnn/00mE+J22ui21QhOWo5V9hCEC43+WtnRAITbJW0ztVZphev5X9gvOf2/Dk9PLA==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 + use-sync-external-store@1.6.0: resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: @@ -5145,6 +5367,33 @@ snapshots: - '@vue/composition-api' - vue + '@formatjs/ecma402-abstract@3.1.1': + dependencies: + '@formatjs/fast-memoize': 3.1.0 + '@formatjs/intl-localematcher': 0.8.1 + decimal.js: 10.6.0 + tslib: 2.8.1 + + '@formatjs/fast-memoize@3.1.0': + dependencies: + tslib: 2.8.1 + + '@formatjs/icu-messageformat-parser@3.5.1': + dependencies: + '@formatjs/ecma402-abstract': 3.1.1 + '@formatjs/icu-skeleton-parser': 2.1.1 + tslib: 2.8.1 + + '@formatjs/icu-skeleton-parser@2.1.1': + dependencies: + '@formatjs/ecma402-abstract': 3.1.1 + tslib: 2.8.1 + + '@formatjs/intl-localematcher@0.8.1': + dependencies: + '@formatjs/fast-memoize': 3.1.0 + tslib: 2.8.1 + '@headlessui/tailwindcss@0.2.2(tailwindcss@3.4.19(yaml@2.8.2))': dependencies: tailwindcss: 3.4.19(yaml@2.8.2) @@ -5397,6 +5646,66 @@ snapshots: '@opentelemetry/api@1.9.0': {} + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.3 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + '@phosphor-icons/core@2.1.1': {} '@pinojs/redact@0.4.0': {} @@ -6056,14 +6365,68 @@ snapshots: - supports-color - typescript + '@schummar/icu-type-parser@1.21.5': {} + '@standard-schema/spec@1.1.0': {} '@standard-schema/utils@0.3.0': {} + '@swc/core-darwin-arm64@1.15.18': + optional: true + + '@swc/core-darwin-x64@1.15.18': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.15.18': + optional: true + + '@swc/core-linux-arm64-gnu@1.15.18': + optional: true + + '@swc/core-linux-arm64-musl@1.15.18': + optional: true + + '@swc/core-linux-x64-gnu@1.15.18': + optional: true + + '@swc/core-linux-x64-musl@1.15.18': + optional: true + + '@swc/core-win32-arm64-msvc@1.15.18': + optional: true + + '@swc/core-win32-ia32-msvc@1.15.18': + optional: true + + '@swc/core-win32-x64-msvc@1.15.18': + optional: true + + '@swc/core@1.15.18': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.25 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.18 + '@swc/core-darwin-x64': 1.15.18 + '@swc/core-linux-arm-gnueabihf': 1.15.18 + '@swc/core-linux-arm64-gnu': 1.15.18 + '@swc/core-linux-arm64-musl': 1.15.18 + '@swc/core-linux-x64-gnu': 1.15.18 + '@swc/core-linux-x64-musl': 1.15.18 + '@swc/core-win32-arm64-msvc': 1.15.18 + '@swc/core-win32-ia32-msvc': 1.15.18 + '@swc/core-win32-x64-msvc': 1.15.18 + + '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 + '@swc/types@0.1.25': + dependencies: + '@swc/counter': 0.1.3 + '@tanstack/virtual-core@3.13.19': {} '@tanstack/vue-virtual@3.13.19(vue@3.5.29(typescript@5.9.3))': @@ -8008,6 +8371,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + icu-minify@4.8.3: + dependencies: + '@formatjs/icu-messageformat-parser': 3.5.1 + identifier-regex@1.0.1: dependencies: reserved-identifiers: 1.2.0 @@ -8047,6 +8414,13 @@ snapshots: internmap@2.0.3: {} + intl-messageformat@11.1.2: + dependencies: + '@formatjs/ecma402-abstract': 3.1.1 + '@formatjs/fast-memoize': 3.1.0 + '@formatjs/icu-messageformat-parser': 3.5.1 + tslib: 2.8.1 + is-absolute-url@4.0.1: {} is-alphabetical@2.0.1: {} @@ -8748,10 +9122,31 @@ snapshots: natural-compare@1.4.0: {} + negotiator@1.0.0: {} + neverpanic@0.0.5(typescript@5.9.3): dependencies: typescript: 5.9.3 + next-intl-swc-plugin-extractor@4.8.3: {} + + next-intl@4.8.3(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(typescript@5.9.3): + dependencies: + '@formatjs/intl-localematcher': 0.8.1 + '@parcel/watcher': 2.5.6 + '@swc/core': 1.15.18 + icu-minify: 4.8.3 + negotiator: 1.0.0 + next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next-intl-swc-plugin-extractor: 4.8.3 + po-parser: 2.1.1 + react: 19.2.4 + use-intl: 4.8.3(react@19.2.4) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@swc/helpers' + next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 @@ -8787,6 +9182,8 @@ snapshots: dependencies: semver: 7.7.4 + node-addon-api@7.1.1: {} + node-releases@2.0.27: {} normalize-path@3.0.0: {} @@ -8964,6 +9361,8 @@ snapshots: optionalDependencies: fsevents: 2.3.2 + po-parser@2.1.1: {} + possible-typed-array-names@1.1.0: {} postcss-import@15.1.0(postcss@8.5.6): @@ -9997,6 +10396,14 @@ snapshots: dependencies: punycode: 2.3.1 + use-intl@4.8.3(react@19.2.4): + dependencies: + '@formatjs/fast-memoize': 3.1.0 + '@schummar/icu-type-parser': 1.21.5 + icu-minify: 4.8.3 + intl-messageformat: 11.1.2 + react: 19.2.4 + use-sync-external-store@1.6.0(react@19.2.4): dependencies: react: 19.2.4 diff --git a/src/app/[[...panel]]/page.tsx b/src/app/[[...panel]]/page.tsx index 16e7f2383c55b92a8dcda6552b7c1f7f4dee69f7..51c4640d3d392ab065bfcad5625270801f397940 100644 --- a/src/app/[[...panel]]/page.tsx +++ b/src/app/[[...panel]]/page.tsx @@ -1,6 +1,6 @@ 'use client' -import { createElement, useEffect, useState } from 'react' +import { createElement, useEffect, useMemo, useState } from 'react' import { usePathname, useRouter } from 'next/navigation' import { NavRail } from '@/components/layout/nav-rail' import { HeaderBar } from '@/components/layout/header-bar' @@ -39,6 +39,7 @@ import { ChatPagePanel } from '@/components/panels/chat-page-panel' import { ChatPanel } from '@/components/chat/chat-panel' import { getPluginPanel } from '@/lib/plugins' import { shouldRedirectDashboardToHttps } from '@/lib/browser-security' +import { useTranslations } from 'next-intl' import { ErrorBoundary } from '@/components/ErrorBoundary' import { LocalModeBanner } from '@/components/layout/local-mode-banner' import { UpdateBanner } from '@/components/layout/update-banner' @@ -61,6 +62,20 @@ interface GatewaySummary { is_primary: number } +const STEP_KEYS = ['auth', 'capabilities', 'config', 'connect', 'agents', 'sessions', 'projects', 'memory', 'skills'] as const + +const bootLabelKeys: Record = { + auth: 'authenticatingOperator', + capabilities: 'detectingStationMode', + config: 'loadingControlConfig', + connect: 'connectingRuntimeLinks', + agents: 'syncingAgentRegistry', + sessions: 'loadingActiveSessions', + projects: 'hydratingWorkspaceBoard', + memory: 'mappingMemoryGraph', + skills: 'indexingSkillCatalog', +} + function renderPluginPanel(panelId: string) { const pluginPanel = getPluginPanel(panelId) return pluginPanel ? createElement(pluginPanel) : @@ -69,6 +84,9 @@ function renderPluginPanel(panelId: string) { export default function Home() { const router = useRouter() const { connect } = useWebSocket() + const tb = useTranslations('boot') + const tp = useTranslations('page') + const tc = useTranslations('common') const { activeTab, setActiveTab, setCurrentUser, setDashboardMode, setGatewayAvailable, setCapabilitiesChecked, setSubscription, setDefaultOrgName, setUpdateAvailable, setOpenclawUpdate, showOnboarding, setShowOnboarding, liveFeedOpen, toggleLiveFeed, showProjectManagerModal, setShowProjectManagerModal, fetchProjects, setChatPanelOpen, bootComplete, setBootComplete, setAgents, setSessions, setProjects, setInterfaceMode, setMemoryGraphAgents, setSkillsData } = useMissionControl() // Sync URL → Zustand activeTab @@ -97,20 +115,21 @@ export default function Home() { // Connect to SSE for real-time local DB events (tasks, agents, chat, etc.) useServerEvents() const [isClient, setIsClient] = useState(false) - const [initSteps, setInitSteps] = useState>([ - { key: 'auth', label: 'Authenticating operator', status: 'pending' }, - { key: 'capabilities', label: 'Detecting station mode', status: 'pending' }, - { key: 'config', label: 'Loading control config', status: 'pending' }, - { key: 'connect', label: 'Connecting runtime links', status: 'pending' }, - { key: 'agents', label: 'Syncing agent registry', status: 'pending' }, - { key: 'sessions', label: 'Loading active sessions', status: 'pending' }, - { key: 'projects', label: 'Hydrating workspace board', status: 'pending' }, - { key: 'memory', label: 'Mapping memory graph', status: 'pending' }, - { key: 'skills', label: 'Indexing skill catalog', status: 'pending' }, - ]) + const [stepStatuses, setStepStatuses] = useState>( + () => Object.fromEntries(STEP_KEYS.map(k => [k, 'pending'])) + ) + + const initSteps = useMemo(() => + STEP_KEYS.map(key => ({ + key, + label: tb(bootLabelKeys[key] as Parameters[0]), + status: stepStatuses[key] || 'pending' as const, + })), + [tb, stepStatuses] + ) const markStep = (key: string) => { - setInitSteps(prev => prev.map(s => s.key === key ? { ...s, status: 'done' } : s)) + setStepStatuses(prev => ({ ...prev, [key]: 'done' })) } useEffect(() => { @@ -350,7 +369,7 @@ export default function Home() { return (
- Skip to main content + {tc('skipToMainContent')} {/* Left: Icon rail navigation (hidden on mobile, shown as bottom bar instead) */} @@ -380,7 +399,7 @@ export default function Home() {

- Built with care by nyk. + {tc('builtWithCareBy')} nyk.

@@ -398,7 +417,7 @@ export default function Home() { @@ -553,13 +574,14 @@ function ContentRouter({ tab }: { tab: string }) { } function LocalModeUnavailable({ panel }: { panel: string }) { + const tp = useTranslations('page') return (

- {panel} requires an OpenClaw gateway connection. + {tp('requiresGateway', { panel })}

- Configure a gateway to enable this panel. + {tp('configureGateway')}

) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index ed9ee18e90ea4d64b3c063b751bc8f60dfd82ede..0c4bd1452dcc5e5f359a8b4e14a6a9a432396f97 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,6 +2,8 @@ import type { Metadata, Viewport } from 'next' import { Inter, JetBrains_Mono } from 'next/font/google' import { headers } from 'next/headers' import { ThemeProvider } from 'next-themes' +import { NextIntlClientProvider } from 'next-intl' +import { getLocale, getMessages } from 'next-intl/server' import { THEME_IDS } from '@/lib/themes' import { ThemeBackground } from '@/components/ui/theme-background' import './globals.css' @@ -85,9 +87,11 @@ export default async function RootLayout({ children: React.ReactNode }) { const nonce = (await headers()).get('x-nonce') || undefined + const locale = await getLocale() + const messages = await getMessages() return ( - + {/* Blocking script to set 'dark' class before first paint, preventing FOUC. Content is a static string literal — no user input, no XSS vector. */} @@ -99,18 +103,20 @@ export default async function RootLayout({ /> - - -
- {children} -
-
+ + + +
+ {children} +
+
+
) diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index b5bc603a66e4b0e64b2d186e711a5dcc3caa040c..eb132320830d251c45a404453968c959b5cc9db0 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -2,7 +2,9 @@ import { useCallback, useEffect, useRef, useState, FormEvent } from 'react' import Image from 'next/image' +import { useTranslations } from 'next-intl' import { Button } from '@/components/ui/button' +import { LanguageSwitcherSelect } from '@/components/ui/language-switcher' interface GoogleCredentialResponse { credential?: string @@ -60,6 +62,8 @@ function GoogleIcon({ className }: { className?: string }) { } export default function LoginPage() { + const t = useTranslations('auth') + const tc = useTranslations('common') const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState('') @@ -110,7 +114,7 @@ export default function LoginPage() { setGoogleLoading(false) return false } - setError(data.error || 'Login failed') + setError(data.error || t('loginFailed')) setPendingApproval(false) setNeedsSetup(false) setLoading(false) @@ -122,7 +126,7 @@ export default function LoginPage() { // router.push() + refresh() can race and use stale RSC payloads. window.location.href = '/' return true - }, []) + }, [t]) async function handleSubmit(e: FormEvent) { e.preventDefault() @@ -137,7 +141,7 @@ export default function LoginPage() { try { await completeLogin('/api/auth/login', { username: formUsername, password: formPassword }) } catch { - setError('Network error') + setError(t('networkError')) setLoading(false) } } @@ -155,7 +159,7 @@ export default function LoginPage() { const ok = await completeLogin('/api/auth/google', { credential: response?.credential }) if (!ok) return } catch { - setError('Google sign-in failed') + setError(t('googleSignInFailed')) setGoogleLoading(false) } } @@ -178,9 +182,9 @@ export default function LoginPage() { script.defer = true script.setAttribute('data-google-gsi', '1') script.onload = onScriptLoad - script.onerror = () => setError('Failed to load Google Sign-In') + script.onerror = () => setError(t('googleSignInFailed')) document.head.appendChild(script) - }, [googleClientId, completeLogin]) + }, [googleClientId, completeLogin, t]) const handleGoogleSignIn = () => { if (!window.google || !googleReady) return @@ -189,6 +193,9 @@ export default function LoginPage() { return (
+
+ +
@@ -201,8 +208,8 @@ export default function LoginPage() { priority />
-

Mission Control

-

Sign in to continue

+

{t('missionControl')}

+

{t('signInToContinue')}

{pendingApproval && ( @@ -213,9 +220,9 @@ export default function LoginPage() {
-
Access Request Submitted
+
{t('accessRequestSubmitted')}

- Your request has been sent to an administrator for review. You'll be able to sign in once approved. + {t('accessRequestDescription')}

)} @@ -237,16 +244,16 @@ export default function LoginPage() { -
No admin account created yet
+
{t('noAdminAccount')}

- Set up your admin account to get started with Mission Control. + {t('noAdminDescription')}

)} @@ -269,23 +276,23 @@ export default function LoginPage() { {googleLoading ? ( <>
- Signing in... + {t('signingIn')} ) : ( <> - Sign in with Google + {t('signInWithGoogle')} )} {!googleReady && ( -

Loading Google Sign-In...

+

{t('loadingGoogleSignIn')}

)} {/* Divider */}
- or + {tc('or')}
@@ -293,14 +300,14 @@ export default function LoginPage() {
- + setUsername(e.target.value)} className="w-full h-10 px-3 rounded-lg bg-secondary border border-border text-foreground text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/50 focus:border-primary transition-smooth" - placeholder="Enter username" + placeholder={t('enterUsername')} autoComplete="username" autoFocus required @@ -309,14 +316,14 @@ export default function LoginPage() {
- + setPassword(e.target.value)} className="w-full h-10 px-3 rounded-lg bg-secondary border border-border text-foreground text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/50 focus:border-primary transition-smooth" - placeholder="Enter password" + placeholder={t('enterPassword')} autoComplete="current-password" required aria-required="true" @@ -332,15 +339,15 @@ export default function LoginPage() { {loading ? ( <>
- Signing in... + {t('signingIn')} ) : ( - 'Sign in' + t('signIn') )} -

OpenClaw Agent Orchestration

+

{t('orchestrationTagline')}

) diff --git a/src/app/setup/page.tsx b/src/app/setup/page.tsx index 58b531ee7129eb5286c37006456396dd5ee5981e..9a9ed115260577682314aa24498f65fda8416b3f 100644 --- a/src/app/setup/page.tsx +++ b/src/app/setup/page.tsx @@ -2,7 +2,9 @@ import { useCallback, useEffect, useState, type FormEvent } from 'react' import Image from 'next/image' +import { useTranslations } from 'next-intl' import { Button } from '@/components/ui/button' +import { LanguageSwitcherSelect } from '@/components/ui/language-switcher' type SetupStep = 'form' | 'creating' @@ -11,12 +13,14 @@ interface ProgressStep { status: 'pending' | 'active' | 'done' | 'error' } -const INITIAL_PROGRESS: ProgressStep[] = [ - { label: 'Validating credentials', status: 'pending' }, - { label: 'Creating admin account', status: 'pending' }, - { label: 'Configuring session', status: 'pending' }, - { label: 'Launching dashboard', status: 'pending' }, -] +function getInitialProgress(t: (key: string) => string): ProgressStep[] { + return [ + { label: t('validatingCredentials'), status: 'pending' }, + { label: t('creatingAdminAccount'), status: 'pending' }, + { label: t('configuringSession'), status: 'pending' }, + { label: t('launchingDashboard'), status: 'pending' }, + ] +} function ProgressIndicator({ steps }: { steps: ProgressStep[] }) { return ( @@ -57,13 +61,15 @@ function ProgressIndicator({ steps }: { steps: ProgressStep[] }) { } export default function SetupPage() { + const t = useTranslations('auth') + const tc = useTranslations('common') const [username, setUsername] = useState('admin') const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [displayName, setDisplayName] = useState('') const [error, setError] = useState('') const [step, setStep] = useState('form') - const [progress, setProgress] = useState(INITIAL_PROGRESS) + const [progress, setProgress] = useState(() => getInitialProgress(t)) const [checking, setChecking] = useState(true) const [setupAvailable, setSetupAvailable] = useState(false) @@ -79,10 +85,10 @@ export default function SetupPage() { setChecking(false) }) .catch(() => { - setError('Failed to check setup status') + setError(t('failedToCheckSetup')) setChecking(false) }) - }, []) + }, [t]) const updateProgress = useCallback((index: number, status: ProgressStep['status']) => { setProgress((prev) => prev.map((s, i) => (i === index ? { ...s, status } : s))) @@ -93,16 +99,16 @@ export default function SetupPage() { setError('') if (password !== confirmPassword) { - setError('Passwords do not match') + setError(t('passwordsDoNotMatch')) return } if (password.length < 12) { - setError('Password must be at least 12 characters') + setError(t('passwordTooShort')) return } setStep('creating') - setProgress(INITIAL_PROGRESS) + setProgress(getInitialProgress(t)) // Step 1: Validating updateProgress(0, 'active') @@ -125,11 +131,11 @@ export default function SetupPage() { if (!res.ok) { const data = await res.json().catch(() => null) updateProgress(1, 'error') - setError(data?.error || 'Setup failed') + setError(data?.error || t('setupFailed')) // Allow retry after a brief pause await new Promise((r) => setTimeout(r, 1500)) setStep('form') - setProgress(INITIAL_PROGRESS) + setProgress(getInitialProgress(t)) return } @@ -149,19 +155,19 @@ export default function SetupPage() { window.location.href = '/' } catch { updateProgress(1, 'error') - setError('Network error') + setError(t('networkError')) await new Promise((r) => setTimeout(r, 1500)) setStep('form') - setProgress(INITIAL_PROGRESS) + setProgress(getInitialProgress(t)) } - }, [username, password, confirmPassword, displayName, updateProgress]) + }, [username, password, confirmPassword, displayName, updateProgress, t]) if (checking) { return (
- Checking setup status... + {t('checkingSetupStatus')}
) @@ -173,6 +179,9 @@ export default function SetupPage() { return (
+
+ +
@@ -186,12 +195,12 @@ export default function SetupPage() { />

- {step === 'form' ? 'Welcome to Mission Control' : 'Setting up Mission Control'} + {step === 'form' ? t('welcomeToMC') : t('settingUpMC')}

{step === 'form' - ? 'Create your admin account to get started' - : 'Creating your admin account...'} + ? t('createAdminToStart') + : t('creatingAdmin')}

@@ -217,7 +226,7 @@ export default function SetupPage() {
setPassword(e.target.value)} className="w-full h-10 px-3 rounded-lg bg-secondary border border-border text-foreground text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/50 focus:border-primary transition-smooth" - placeholder="At least 12 characters" + placeholder={t('atLeast12Chars')} autoComplete="new-password" required minLength={12} /> {password.length > 0 && password.length < 12 && (

- {12 - password.length} more character{12 - password.length !== 1 ? 's' : ''} needed + {t('moreCharsNeeded', { count: 12 - password.length })}

)}
setConfirmPassword(e.target.value)} className="w-full h-10 px-3 rounded-lg bg-secondary border border-border text-foreground text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/50 focus:border-primary transition-smooth" - placeholder="Repeat your password" + placeholder={t('repeatPassword')} autoComplete="new-password" required minLength={12} /> {confirmPassword.length > 0 && password !== confirmPassword && ( -

Passwords do not match

+

{t('passwordsDoNotMatch')}

)}
@@ -298,12 +307,12 @@ export default function SetupPage() { size="lg" className="w-full rounded-lg" > - Create Admin Account + {t('createAdminAccount')}

- This page is only available during first-time setup. + {t('firstTimeSetupOnly')}

)} diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx index 730401c4097933b34239ce1991f0eb95bd139f26..c4a575684b0c466076e766d3dc92e9830cca6f68 100644 --- a/src/components/ErrorBoundary.tsx +++ b/src/components/ErrorBoundary.tsx @@ -1,6 +1,7 @@ 'use client' import { Component, type ErrorInfo, type ReactNode } from 'react' +import { useTranslations } from 'next-intl' import { createClientLogger } from '@/lib/client-logger' import { Button } from '@/components/ui/button' @@ -16,6 +17,32 @@ interface State { error: Error | null } +function ErrorFallback({ error, onRetry }: { error: Error | null; onRetry: () => void }) { + const t = useTranslations('errorBoundary') + const tc = useTranslations('common') + return ( +
+
+ + + + + +
+

{t('somethingWentWrong')}

+

+ {error?.message || t('unexpectedError')} +

+ +
+ ) +} + export class ErrorBoundary extends Component { constructor(props: Props) { super(props) @@ -35,25 +62,10 @@ export class ErrorBoundary extends Component { if (this.props.fallback) return this.props.fallback return ( -
-
- - - - - -
-

Something went wrong

-

- {this.state.error?.message || 'An unexpected error occurred in this panel.'} -

- -
+ this.setState({ hasError: false, error: null })} + /> ) } diff --git a/src/components/layout/header-bar.tsx b/src/components/layout/header-bar.tsx index 898c387538b0a62b6fed08ef0715638a5dc8872d..7a733edbeac3a9a84020f75efedd69961c1a1170 100644 --- a/src/components/layout/header-bar.tsx +++ b/src/components/layout/header-bar.tsx @@ -2,12 +2,14 @@ import { useState, useRef, useEffect, useCallback } from 'react' import { createPortal } from 'react-dom' +import { useTranslations } from 'next-intl' import { useMissionControl, type ConnectionStatus } from '@/store' import { extractWsHost } from '@/lib/agent-card-helpers' import { useWebSocket } from '@/lib/websocket' import { useNavigateToPanel, usePrefetchPanel } from '@/lib/navigation' import { Button } from '@/components/ui/button' import { ThemeSelector } from '@/components/ui/theme-selector' +import { LanguageSwitcher } from '@/components/ui/language-switcher' import { DigitalClock } from '@/components/ui/digital-clock' import { getNavigationMetrics, navigationMetricEventName } from '@/lib/navigation-metrics' @@ -22,22 +24,22 @@ interface SearchResult { source?: 'command' | 'entity' } -const QUICK_NAV_COMMANDS: Array<{ panel: string; title: string; aliases: string[] }> = [ - { panel: 'overview', title: 'Go to Overview', aliases: ['home', 'dashboard'] }, - { panel: 'chat', title: 'Go to Chat', aliases: ['sessions', 'messages'] }, - { panel: 'tasks', title: 'Go to Tasks', aliases: ['task board', 'tickets'] }, - { panel: 'agents', title: 'Go to Agents', aliases: ['agent squad', 'workers'] }, - { panel: 'activity', title: 'Go to Activity Feed', aliases: ['events', 'feed'] }, - { panel: 'notifications', title: 'Go to Notifications', aliases: ['alerts inbox'] }, - { panel: 'tokens', title: 'Go to Token Usage', aliases: ['cost', 'spend'] }, - { panel: 'logs', title: 'Go to Logs', aliases: ['log viewer'] }, - { panel: 'memory', title: 'Go to Memory Browser', aliases: ['knowledge', 'notes'] }, - { panel: 'integrations', title: 'Go to Integrations', aliases: ['providers', 'api keys'] }, - { panel: 'settings', title: 'Go to Settings', aliases: ['preferences', 'config'] }, - { panel: 'gateways', title: 'Go to Gateways', aliases: ['gateway manager'] }, - { panel: 'github', title: 'Go to GitHub Sync', aliases: ['github', 'sync'] }, - { panel: 'office', title: 'Go to Office', aliases: ['workspace', 'team'] }, - { panel: 'skills', title: 'Go to Skills', aliases: ['skill packs', 'agent skills'] }, +const QUICK_NAV_COMMANDS: Array<{ panel: string; titleKey: string; title: string; aliases: string[] }> = [ + { panel: 'overview', titleKey: 'goToOverview', title: 'Go to Overview', aliases: ['home', 'dashboard'] }, + { panel: 'chat', titleKey: 'goToChat', title: 'Go to Chat', aliases: ['sessions', 'messages'] }, + { panel: 'tasks', titleKey: 'goToTasks', title: 'Go to Tasks', aliases: ['task board', 'tickets'] }, + { panel: 'agents', titleKey: 'goToAgents', title: 'Go to Agents', aliases: ['agent squad', 'workers'] }, + { panel: 'activity', titleKey: 'goToActivityFeed', title: 'Go to Activity Feed', aliases: ['events', 'feed'] }, + { panel: 'notifications', titleKey: 'goToNotifications', title: 'Go to Notifications', aliases: ['alerts inbox'] }, + { panel: 'tokens', titleKey: 'goToTokenUsage', title: 'Go to Token Usage', aliases: ['cost', 'spend'] }, + { panel: 'logs', titleKey: 'goToLogs', title: 'Go to Logs', aliases: ['log viewer'] }, + { panel: 'memory', titleKey: 'goToMemoryBrowser', title: 'Go to Memory Browser', aliases: ['knowledge', 'notes'] }, + { panel: 'integrations', titleKey: 'goToIntegrations', title: 'Go to Integrations', aliases: ['providers', 'api keys'] }, + { panel: 'settings', titleKey: 'goToSettings', title: 'Go to Settings', aliases: ['preferences', 'config'] }, + { panel: 'gateways', titleKey: 'goToGateways', title: 'Go to Gateways', aliases: ['gateway manager'] }, + { panel: 'github', titleKey: 'goToGithubSync', title: 'Go to GitHub Sync', aliases: ['github', 'sync'] }, + { panel: 'office', titleKey: 'goToOffice', title: 'Go to Office', aliases: ['workspace', 'team'] }, + { panel: 'skills', titleKey: 'goToSkills', title: 'Go to Skills', aliases: ['skill packs', 'agent skills'] }, ] export function HeaderBar() { @@ -45,6 +47,7 @@ export function HeaderBar() { const { isConnected, reconnect } = useWebSocket() const navigateToPanel = useNavigateToPanel() const prefetchPanel = usePrefetchPanel() + const th = useTranslations('header') const activeSessions = sessions.filter(s => s.active).length @@ -70,9 +73,9 @@ export function HeaderBar() { return QUICK_NAV_COMMANDS.slice(0, 6).map((cmd, index) => ({ type: 'panel', id: -(index + 1), - title: cmd.title, + title: th(cmd.titleKey), subtitle: `/${cmd.panel}`, - excerpt: 'Quick navigation', + excerpt: th('quickNavigation'), created_at: Date.now(), panel: cmd.panel, source: 'command', @@ -81,17 +84,18 @@ export function HeaderBar() { const ranked: Array<(SearchResult & { _score: number }) | null> = QUICK_NAV_COMMANDS .map((cmd, index) => { - const haystack = `${cmd.title} ${cmd.panel} ${cmd.aliases.join(' ')}`.toLowerCase() + const translatedTitle = th(cmd.titleKey) + const haystack = `${translatedTitle} ${cmd.title} ${cmd.panel} ${cmd.aliases.join(' ')}`.toLowerCase() if (!haystack.includes(normalized)) return null const exactPanel = cmd.panel === normalized - const startsTitle = cmd.title.toLowerCase().startsWith(normalized) + const startsTitle = translatedTitle.toLowerCase().startsWith(normalized) const score = exactPanel ? 3 : startsTitle ? 2 : 1 return { type: 'panel', id: -(index + 1), - title: cmd.title, + title: translatedTitle, subtitle: `/${cmd.panel}`, - excerpt: cmd.aliases.length ? `Aliases: ${cmd.aliases.join(', ')}` : 'Quick navigation', + excerpt: cmd.aliases.length ? `Aliases: ${cmd.aliases.join(', ')}` : th('quickNavigation'), created_at: Date.now(), panel: cmd.panel, source: 'command' as const, @@ -103,7 +107,7 @@ export function HeaderBar() { .sort((a, b) => b._score - a._score) .map(({ _score, ...row }) => row) .slice(0, 8) - }, []) + }, [th]) const openCommandPalette = useCallback(() => { setSearchOpen(true) @@ -311,7 +315,7 @@ export function HeaderBar() { ) : activeTenant ? (
- Workspace + {th('workspace')} / {activeTenant.display_name}
@@ -330,7 +334,7 @@ export function HeaderBar() { > - Jump to page, task, agent... + {th('jumpToSearch')} ⌘K @@ -342,7 +346,7 @@ export function HeaderBar() { {/* Right: status + actions */}
- + @@ -375,6 +379,7 @@ export function HeaderBar() { )} +
@@ -397,7 +402,7 @@ export function HeaderBar() { type="text" value={searchQuery} onChange={e => handleSearchInput(e.target.value)} - placeholder="Search tasks, agents, activity, or type a page command..." + placeholder={th('searchPlaceholder')} className="w-full h-9 px-3 rounded-md bg-secondary border-0 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none" autoFocus role="combobox" @@ -408,7 +413,7 @@ export function HeaderBar() {
{searchLoading ? ( -
Searching...
+
{th('searching')}
) : searchResults.length > 0 ? ( searchResults.map((r, i) => (
@@ -459,6 +464,7 @@ function ModeBadge({ onReconnect: () => void }) { const { dashboardMode } = useMissionControl() + const th = useTranslations('header') const isLocal = dashboardMode === 'local' const [showTooltip, setShowTooltip] = useState(false) @@ -466,7 +472,7 @@ function ModeBadge({ return (
- Local + {th('local')}
) } @@ -483,17 +489,17 @@ function ModeBadge({ dotClass = 'bg-green-500' borderClass = 'border-green-500/25 bg-green-500/10' textClass = 'text-green-400' - statusLabel = connection.latency != null ? `${connection.latency}ms` : 'Connected' + statusLabel = connection.latency != null ? `${connection.latency}ms` : th('connected') } else if (isReconnecting) { dotClass = 'bg-amber-500 animate-pulse' borderClass = 'border-amber-500/25 bg-amber-500/10' textClass = 'text-amber-400' - statusLabel = `Retry ${connection.reconnectAttempts}` + statusLabel = th('retry', { count: connection.reconnectAttempts }) } else { dotClass = 'bg-red-500 animate-pulse' borderClass = 'border-red-500/25 bg-red-500/10' textClass = 'text-red-400' - statusLabel = 'Offline' + statusLabel = th('offline') } const wsHost = extractWsHost(connection.url) @@ -517,46 +523,46 @@ function ModeBadge({ {showTooltip && (
-
Gateway Connection
+
{th('gatewayConnection')}
- Status + {th('status')} - {isConnected ? 'Connected' : isReconnecting ? 'Reconnecting' : 'Disconnected'} + {isConnected ? th('connected') : isReconnecting ? th('reconnecting') : th('disconnected')}
- Host + {th('host')} {wsHost}
{connection.latency != null && (
- Latency + {th('latency')} {connection.latency}ms
)}
- WebSocket + {th('webSocket')} - {isConnected ? 'Live' : 'Down'} + {isConnected ? th('live') : th('down')}
- SSE + {th('sse')} - {connection.sseConnected ? 'Live' : 'Off'} + {connection.sseConnected ? th('live') : th('off')}
{!isConnected && connection.reconnectAttempts > 0 && (
- Retries + {th('retries')} {connection.reconnectAttempts}
)}
{!isConnected && (
- Click to reconnect + {th('clickToReconnect')}
)}
@@ -602,12 +608,13 @@ function NavigationLatencyStat() { } function SseBadge({ connected }: { connected: boolean }) { + const th = useTranslations('header') return (
- Events + {th('events')} - {connected ? 'Live' : 'Off'} + {connected ? th('live') : th('off')}
) diff --git a/src/components/layout/live-feed.tsx b/src/components/layout/live-feed.tsx index e470d53c503c538a27ef3c3d78288a0561f20ad9..7784155e65f54d78e7e832aa3d0c4d37bc03f229 100644 --- a/src/components/layout/live-feed.tsx +++ b/src/components/layout/live-feed.tsx @@ -2,10 +2,12 @@ import { useMissionControl } from '@/store' import { useEffect, useState } from 'react' +import { useTranslations } from 'next-intl' import { Button } from '@/components/ui/button' export function LiveFeed() { const { logs, sessions, activities, connection, dashboardMode, toggleLiveFeed } = useMissionControl() + const t = useTranslations('liveFeed') const isLocal = dashboardMode === 'local' const [expanded, setExpanded] = useState(false) const [hasCollapsed, setHasCollapsed] = useState(false) @@ -16,7 +18,7 @@ export function LiveFeed() { id: `sess-${s.id}`, type: 'session' as const, level: 'info' as const, - message: `${s.active ? 'Active' : 'Idle'} session: ${s.key || s.id}`, + message: `${s.active ? t('activeSession') : t('idleSession')} session: ${s.key || s.id}`, source: s.model?.split('/').pop()?.split('-').slice(0, 2).join('-') || 'claude', timestamp: s.lastActivity || s.startTime || Date.now(), })) @@ -49,7 +51,7 @@ export function LiveFeed() { variant="ghost" size="icon-sm" onClick={() => setExpanded(true)} - title="Show live feed" + title={t('showLiveFeed')} > @@ -78,7 +80,7 @@ export function LiveFeed() {
- Live Feed + {t('liveFeed')} {feedItems.length}
@@ -87,7 +89,7 @@ export function LiveFeed() { size="icon-xs" onClick={() => { setExpanded(false); setHasCollapsed(true) }} className="w-6 h-6" - title="Collapse feed" + title={t('collapseFeed')} > @@ -98,7 +100,7 @@ export function LiveFeed() { size="icon-xs" onClick={toggleLiveFeed} className="w-6 h-6" - title="Close feed" + title={t('closeFeed')} > @@ -111,11 +113,11 @@ export function LiveFeed() {
{feedItems.length === 0 ? (
-

No activity yet

+

{t('noActivityYet')}

{isLocal - ? 'Events appear when you create tasks or agents update' - : 'Events stream here from the gateway and local DB'} + ? t('eventsAppearLocal') + : t('eventsStreamGateway')}

) : ( @@ -129,7 +131,7 @@ export function LiveFeed() { {/* Active sessions mini-list */}
-
Active Sessions
+
{t('activeSessions')}
{sessions.filter(s => s.active).slice(0, 4).map(session => (
@@ -139,7 +141,7 @@ export function LiveFeed() {
))} {sessions.filter(s => s.active).length === 0 && ( -
No active sessions
+
{t('noActiveSessions')}
)}
diff --git a/src/components/layout/local-mode-banner.tsx b/src/components/layout/local-mode-banner.tsx index a428a09f997fe10f87d63e75cd1b302bf419e6cf..49eed1bc7f83355c12801a6c3a9d050fc2602855 100644 --- a/src/components/layout/local-mode-banner.tsx +++ b/src/components/layout/local-mode-banner.tsx @@ -1,5 +1,6 @@ 'use client' +import { useTranslations } from 'next-intl' import { useMissionControl } from '@/store' import { useNavigateToPanel } from '@/lib/navigation' import { Button } from '@/components/ui/button' @@ -7,6 +8,8 @@ import { Button } from '@/components/ui/button' export function LocalModeBanner() { const { dashboardMode, bannerDismissed, capabilitiesChecked, dismissBanner } = useMissionControl() const navigateToPanel = useNavigateToPanel() + const t = useTranslations('localModeBanner') + const tc = useTranslations('common') if (!capabilitiesChecked || dashboardMode === 'full' || bannerDismissed) return null @@ -14,8 +17,8 @@ export function LocalModeBanner() {

- No OpenClaw gateway detected - {' — running in Local Mode. Monitoring Claude Code sessions, tasks, and local data.'} + {t('noGatewayDetected')} + {t('runningInLocalMode')}

- More + {tn('more')} {moreIsActive && ( )} @@ -646,6 +704,7 @@ function OrgRow({ label, initial, active, colorClass, onClick, isActiveOrg, proj onSwitchProject: (project: import('@/store').Project | null) => void onNewProject: () => void }) { + const tcs = useTranslations('contextSwitcher') return (
- All + {tcs('all')} {projects.map((project) => (
@@ -910,7 +972,7 @@ function ContextSwitcher({ currentUser, isAdmin, isLocal, isConnected, tenants, - Settings + {tn('settings')}
@@ -929,7 +991,7 @@ function ContextSwitcher({ currentUser, isAdmin, isLocal, isConnected, tenants, <>
- ORGANIZATIONS + {tcs('organizations')}
{/* Default org */} @@ -971,8 +1033,8 @@ function ContextSwitcher({ currentUser, isAdmin, isLocal, isConnected, tenants, osUser.has_openclaw && 'openclaw', ].filter(Boolean) const statusLabel = isLocal - ? (tools.length > 0 ? tools.join('+') : 'no tools') - : 'unlinked' + ? (tools.length > 0 ? tools.join('+') : tcs('noTools')) + : tcs('unlinked') return (
- New organization... + {tcs('newOrganization')} ) : (
setCreateForm(f => ({ ...f, username: e.target.value }))} - placeholder="Username (OS user)" + placeholder={tcs('usernamePlaceholder')} autoFocus className="w-full h-7 px-2 rounded bg-secondary border border-border text-xs text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:border-primary/50" /> setCreateForm(f => ({ ...f, display_name: e.target.value }))} - placeholder="Display name" + placeholder={tcs('displayNamePlaceholder')} className="w-full h-7 px-2 rounded bg-secondary border border-border text-xs text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:border-primary/50" /> {!isLocal && ( setCreateForm(f => ({ ...f, gateway_port: e.target.value }))} - placeholder="Gateway port (required)" + placeholder={tcs('gatewayPortPlaceholder')} className="w-full h-7 px-2 rounded bg-secondary border border-border text-xs text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:border-primary/50" /> )} {/* Tool installation checkboxes */} {isLocal && (
-
INSTALL TOOLS
+
{tcs('installTools')}
diff --git a/src/components/layout/openclaw-doctor-banner.tsx b/src/components/layout/openclaw-doctor-banner.tsx index bc88ccfe5e9fca64341ffdab9c0985e8051db00d..faddac2e56599717fe36ee194525e1d810f65d2d 100644 --- a/src/components/layout/openclaw-doctor-banner.tsx +++ b/src/components/layout/openclaw-doctor-banner.tsx @@ -1,6 +1,7 @@ 'use client' import { useEffect, useState } from 'react' +import { useTranslations } from 'next-intl' import { Button } from '@/components/ui/button' import { useMissionControl } from '@/store' @@ -22,6 +23,8 @@ interface OpenClawDoctorFixProgress { type BannerState = 'idle' | 'fixing' | 'success' | 'error' export function OpenClawDoctorBanner() { + const t = useTranslations('doctorBanner') + const tc = useTranslations('common') const [doctor, setDoctor] = useState(null) const [loading, setLoading] = useState(true) const doctorDismissedAt = useMissionControl(s => s.doctorDismissedAt) @@ -54,13 +57,13 @@ export function OpenClawDoctorBanner() { async function handleFix() { setState('fixing') setErrorMsg(null) - setFixProgress('Running OpenClaw doctor fixes…') + setFixProgress(t('runningFixes')) const progressMessages = [ - 'Running OpenClaw doctor fixes…', - 'Cleaning session stores…', - 'Archiving orphan transcripts…', - 'Rechecking current instance health…', + t('runningFixes'), + t('cleaningSessionStores'), + t('archivingOrphanTranscripts'), + t('recheckingHealth'), ] let progressIndex = 0 const progressTimer = window.setInterval(() => { @@ -75,7 +78,7 @@ export function OpenClawDoctorBanner() { if (!res.ok) { setState('error') - setErrorMsg(data.detail || data.error || 'OpenClaw doctor fix failed') + setErrorMsg(data.detail || data.error || t('fixFailed')) if (data.status) { setDoctor(data.status) } @@ -91,7 +94,7 @@ export function OpenClawDoctorBanner() { } catch { window.clearInterval(progressTimer) setState('error') - setErrorMsg('Network error — could not reach the server.') + setErrorMsg(t('networkError')) setFixProgress('') } } @@ -123,14 +126,14 @@ export function OpenClawDoctorBanner() { const busy = state === 'fixing' const headline = state === 'success' - ? 'OpenClaw doctor fix completed' + ? t('fixCompleted') : doctor.category === 'config' - ? 'OpenClaw config drift detected' + ? t('configDrift') : doctor.category === 'state' - ? 'OpenClaw state integrity warning' + ? t('stateIntegrity') : doctor.category === 'security' - ? 'OpenClaw security warning' - : 'OpenClaw doctor warnings' + ? t('securityWarning') + : t('doctorWarnings') return (
@@ -150,7 +153,7 @@ export function OpenClawDoctorBanner() {

))} {extraCount > 0 && ( -

+ {extraCount} more issue{extraCount === 1 ? '' : 's'}

+

{tc('moreIssues', { count: extraCount })}

)}
)} @@ -168,21 +171,21 @@ export function OpenClawDoctorBanner() { disabled={busy} className={`shrink-0 rounded px-2.5 py-1 text-2xs font-medium transition-colors ${tone.button}`} > - {busy ? 'Running Fix…' : 'Run Doctor Fix'} + {busy ? t('runningFix') : t('runDoctorFix')} )} {openclawUpdate.releaseNotes && ( )} - View Release + {tc('viewRelease')} - View Release + {tc('viewRelease')}
-

Welcome to Mission Control

+

{t('title')}

- Your station for AI agents. When agents dock here, they gain persistent memory, - task management, coordinated workflows, and full observability. - We've scanned your setup — here's what's online. + {t('description')}

@@ -314,26 +316,26 @@ function StepWelcome({ isGateway, capabilities, onNext, onSkip }: { 0} label={capabilities.claudeSessions > 0 - ? `${capabilities.claudeSessions} active session${capabilities.claudeSessions !== 1 ? 's' : ''} detected` - : 'No active Claude sessions'} + ? t('activeSessionsDetected', { count: capabilities.claudeSessions }) + : t('noActiveSessions')} /> 0} label={capabilities.agentCount > 0 - ? `${capabilities.agentCount} agent${capabilities.agentCount !== 1 ? 's' : ''} registered` - : 'No agents yet'} + ? t('agentsRegistered', { count: capabilities.agentCount }) + : t('noAgentsYet')} /> {capabilities.gatewayConnected && capabilities.dashboardRegistration && ( )} @@ -341,7 +343,7 @@ function StepWelcome({ isGateway, capabilities, onNext, onSkip }: { {/* Mode cards — both visible, detected mode highlighted */}
-

Available modes

+

{t('availableModes')}

{/* Local mode card */}
{!isGateway && ( - Detected + {tc('detected')} )}

- Local Mode + {t('localMode')}

    -
  • Monitor Claude Code sessions on this machine
  • -
  • Task tracking and cost monitoring
  • -
  • Session history
  • +
  • {t('monitorClaude')}
  • +
  • {t('taskTracking')}
  • +
  • {t('sessionHistory')}
{isGateway && ( -

Single-pilot ops

+

{t('singlePilot')}

)}
@@ -375,19 +377,19 @@ function StepWelcome({ isGateway, capabilities, onNext, onSkip }: { }`}> {isGateway && ( - Detected + {tc('detected')} )}

- Gateway Mode + {t('gatewayMode')}

    -
  • Orchestrate multiple agents across machines
  • -
  • Memory, skills, and inter-agent comms
  • -
  • Webhook integrations
  • +
  • {t('orchestrateAgents')}
  • +
  • {t('memorySkills')}
  • +
  • {t('webhookIntegrations')}
{!isGateway && ( -

Requires gateway

+

{t('requiresGateway')}

)}
@@ -395,10 +397,10 @@ function StepWelcome({ isGateway, capabilities, onNext, onSkip }: {
@@ -420,6 +422,8 @@ function StepInterfaceMode({ isGateway, onNext, onBack }: { onBack: () => void }) { const mc = modeColors(isGateway) + const t = useTranslations('onboarding.interfaceMode') + const tc = useTranslations('common') const { interfaceMode, setInterfaceMode } = useMissionControl() const [selected, setSelected] = useState<'essential' | 'full'>(interfaceMode) @@ -438,9 +442,9 @@ function StepInterfaceMode({ isGateway, onNext, onBack }: { return ( <>
-

Choose Your Station Layout

+

{t('title')}

- Essential shows the core panels operators need most. Full unlocks every system on the station — memory, automation, security auditing, and more. You can switch anytime. + {t('description')}

@@ -455,19 +459,19 @@ function StepInterfaceMode({ isGateway, onNext, onBack }: { > {selected === 'essential' && ( - Selected + {tc('selected')} )}

- Essential + {t('essential')}

- Streamlined ops — the panels you'll use daily: fleet overview, agents, tasks, chat, activity feed, logs, and settings. + {t('essentialDescription')}

    -
  • Fleet overview, Agents, Tasks, Chat
  • -
  • Activity feed, Logs, Settings
  • -
  • 7 panels total
  • +
  • {t('essentialPanels1')}
  • +
  • {t('essentialPanels2')}
  • +
  • {t('essentialTotal')}
@@ -482,28 +486,28 @@ function StepInterfaceMode({ isGateway, onNext, onBack }: { > {selected === 'full' && ( - Selected + {tc('selected')} )}

- Full + {t('full')}

- Full station access — adds memory browser, cron scheduling, webhooks, alerts, security audit, cost tracking, and gateway config. + {t('fullDescription')}

    -
  • Everything in Essential plus
  • -
  • Memory, Cron, Webhooks, Audit
  • -
  • All station systems unlocked
  • +
  • {t('fullIncludes')}
  • +
  • {t('fullPanels')}
  • +
  • {t('fullTotal')}
- +
@@ -517,6 +521,8 @@ function StepGatewayLink({ isGateway, registration, onNext, onBack }: { onBack: () => void }) { const mc = modeColors(isGateway) + const t = useTranslations('onboarding.gatewayLink') + const tc = useTranslations('common') const [healthOk, setHealthOk] = useState(null) const [testing, setTesting] = useState(false) @@ -537,10 +543,9 @@ function StepGatewayLink({ isGateway, registration, onNext, onBack }: { return ( <>
-

Gateway Link

+

{t('title')}

- Mission Control registers its origin with the OpenClaw gateway so it can connect - via WebSocket and manage agents remotely. + {t('description')}

@@ -551,11 +556,11 @@ function StepGatewayLink({ isGateway, registration, onNext, onBack }: { [{configured ? '+' : '~'}]
-

Gateway origin registered

+

{t('originRegistered')}

{configured - ? 'Mission Control origin added to gateway allowedOrigins' - : 'Registration pending — will be configured on next capabilities check'} + ? t('originAdded') + : t('registrationPending')}

@@ -567,11 +572,11 @@ function StepGatewayLink({ isGateway, registration, onNext, onBack }: { [{configured ? '+' : '-'}]
-

Device auth configured

+

{t('deviceAuthConfigured')}

{configured - ? 'Device auth disabled — MC authenticates via gateway token' - : 'Will be configured alongside origin registration'} + ? t('deviceAuthDisabled') + : t('deviceAuthWillConfigure')}

@@ -584,22 +589,22 @@ function StepGatewayLink({ isGateway, registration, onNext, onBack }: { onClick={testConnection} disabled={testing} > - {testing ? 'Testing...' : 'Test Connection'} + {testing ? t('testing') : t('testConnection')} {healthOk === true && ( - Gateway reachable + {t('gatewayReachable')} )} {healthOk === false && ( - Gateway unreachable + {t('gatewayUnreachable')} )}
- +
@@ -622,20 +627,21 @@ function StepCredentials({ onClose: () => void }) { const mc = modeColors(isGateway) + const t = useTranslations('onboarding.credentials') + const tc = useTranslations('common') const allGood = status?.authOk && status?.apiKeyOk return ( <>
-

Secure Your Station

+

{t('title')}

- The admin password protects your station console. The API key is a docking credential — - agents present it when they register, so only authorized agents can dock. + {t('description')}

{!status ? (
- +
) : (
@@ -644,9 +650,9 @@ function StepCredentials({ [{status.authOk ? '+' : 'x'}]
-

Admin Password

+

{t('adminPassword')}

- {status.authOk ? 'Password is strong and non-default' : 'Using a default or weak password — change AUTH_PASS in .env'} + {status.authOk ? t('passwordStrong') : t('passwordWeak')}

@@ -656,11 +662,11 @@ function StepCredentials({ [{status.apiKeyOk ? '+' : 'x'}]
-

API Key

+

{t('apiKey')}

{status.apiKeyOk - ? 'Configured — agents can dock using this key' - : 'Not set — agents won\'t be able to dock without a configured key. Run: bash scripts/generate-env.sh --force'} + ? t('apiKeyConfigured') + : t('apiKeyNotSet')}

@@ -672,15 +678,15 @@ function StepCredentials({ className="text-xs" onClick={() => { onClose(); navigateToPanel('settings') }} > - Open Settings + {t('openSettings')} )}
-

Security Scan

+

{t('securityScan')}

- Verify network, runtime, and OpenClaw hardening before you launch the station. + {t('securityScanDescription')}

@@ -692,9 +698,9 @@ function StepCredentials({
- +
diff --git a/src/components/panels/activity-feed-panel.tsx b/src/components/panels/activity-feed-panel.tsx index 7a66035b7bc1955dcf73a229717e3f978a76fd15..d4cb91d156c919ae44226e94819cbfbd0dc91ecf 100644 --- a/src/components/panels/activity-feed-panel.tsx +++ b/src/components/panels/activity-feed-panel.tsx @@ -1,6 +1,7 @@ 'use client' import { useState, useEffect, useCallback, useRef } from 'react' +import { useTranslations } from 'next-intl' import { Button } from '@/components/ui/button' import { Loader } from '@/components/ui/loader' import { useMissionControl } from '@/store' @@ -90,6 +91,7 @@ function groupByDay(activities: Activity[]): Record { // ── Activity row (flat feed) ──────────────────── function ActivityRow({ activity }: { activity: Activity }) { + const t = useTranslations('activityFeed') return (
@@ -117,7 +119,7 @@ function ActivityRow({ activity }: { activity: Activity }) {
{activity.entity.type === 'task' && (
- Task: + {t('entityTask')} {activity.entity.title} {activity.entity.status && ( @@ -128,7 +130,7 @@ function ActivityRow({ activity }: { activity: Activity }) { )} {activity.entity.type === 'comment' && (
- Comment on: + {t('entityCommentOn')} {activity.entity.task_title} {activity.entity.content_preview && (
@@ -139,7 +141,7 @@ function ActivityRow({ activity }: { activity: Activity }) { )} {activity.entity.type === 'agent' && (
- Agent: + {t('entityAgent')} {activity.entity.name} {activity.entity.status && ( @@ -154,7 +156,7 @@ function ActivityRow({ activity }: { activity: Activity }) { {activity.data && Object.keys(activity.data).length > 0 && (
- Show details + {t('showDetails')}
                     {JSON.stringify(activity.data, null, 2)}
@@ -195,7 +197,7 @@ function TimelineRow({ activity }: { activity: Activity }) {
         

{activity.description}

{activity.entity?.title && (

- {activity.entity.type === 'task' ? `Task: ${activity.entity.title}` : activity.entity.title} + {activity.entity.type === 'task' ? `${activity.entity.title}` : activity.entity.title}

)}
@@ -211,6 +213,7 @@ function TimelineRow({ activity }: { activity: Activity }) { // ── Main Component ────────────────────────────── export function ActivityFeedPanel() { + const t = useTranslations('activityFeed') const { agents } = useMissionControl() const [activities, setActivities] = useState([]) @@ -311,7 +314,7 @@ export function ActivityFeedPanel() { {/* Header */}
-

Activity

+

{t('title')}

@@ -322,10 +325,10 @@ export function ActivityFeedPanel() { variant={autoRefresh ? 'success' : 'secondary'} size="sm" > - {autoRefresh ? 'Live' : 'Paused'} + {autoRefresh ? t('live') : t('paused')}
@@ -335,7 +338,7 @@ export function ActivityFeedPanel() {
{/* Agent filter */}
- +
{agents.map((a) => ( - Page {page + 1} of {totalPages} + {t('pageOf', { page: page + 1, total: totalPages })}
)} @@ -608,10 +611,10 @@ export function ActivityFeedPanel() {
{isAgentView - ? `${total} events for ${selectedAgent}` - : `Showing ${activities.length} activities${filter.type ? ' (filtered)' : ''}`} + ? t('footerAgentEvents', { total, agent: selectedAgent }) + : t('footerShowing', { count: activities.length, filtered: filter.type ? ` ${t('filtered')}` : '' })} - Last updated: {new Date(lastRefresh).toLocaleTimeString()} + {t('lastUpdated', { time: new Date(lastRefresh).toLocaleTimeString() })}
diff --git a/src/components/panels/agent-comms-panel.tsx b/src/components/panels/agent-comms-panel.tsx index 5e021c3ff7d307e9bfeacf1d6905fac1358cac97..a1983a360c01841504e6f7b53bb36b5ab93292b4 100644 --- a/src/components/panels/agent-comms-panel.tsx +++ b/src/components/panels/agent-comms-panel.tsx @@ -1,6 +1,7 @@ 'use client' import { useState, useEffect, useCallback, useRef, useMemo } from 'react' +import { useTranslations } from 'next-intl' import { Button } from '@/components/ui/button' import { useSmartPoll } from '@/lib/use-smart-poll' import { useMissionControl, type LogEntry, type Session } from '@/store' @@ -195,6 +196,7 @@ interface Target { } export function AgentCommsPanel() { + const t = useTranslations('agentComms') const [filter, setFilter] = useState('all') const [commsData, setCommsData] = useState(null) const [transcriptData, setTranscriptData] = useState([]) @@ -361,7 +363,7 @@ export function AgentCommsPanel() {
- Connecting to feed... + {t('connecting')}
) @@ -377,7 +379,7 @@ export function AgentCommsPanel() {

# agent-feed

- {filteredFeed.length} events + {t('eventsCount', { count: filteredFeed.length })} {/* Connection indicator */} - {connection.isConnected ? 'Gateway' : connection.sseConnected ? 'SSE' : 'Polling'} + {connection.isConnected ? t('connectionGateway') : connection.sseConnected ? t('connectionSse') : t('connectionPolling')} {sourceMode !== 'empty' && ( - {sourceMode === 'live' ? 'Live' : sourceMode === 'mixed' ? 'Mixed' : 'Seeded'} + {sourceMode === 'live' ? t('sourceLive') : sourceMode === 'mixed' ? t('sourceMixed') : t('sourceSeeded')} )}
@@ -432,7 +434,7 @@ export function AgentCommsPanel() { {(sessions.length > 0 || transcriptSessionCount > 0) && (
- {sessions.filter(s => s.active).length}/{transcriptSessionCount || sessions.length} sessions + {t('sessions', { active: sessions.filter(s => s.active).length, total: transcriptSessionCount || sessions.length })}
)}
@@ -496,7 +498,7 @@ export function AgentCommsPanel() { size="xs" className="text-[10px] text-muted-foreground/60" > - Scroll to latest + {t('scrollToLatest')}
)} @@ -533,7 +535,7 @@ export function AgentCommsPanel() {
{target && (
- To: + {t('toLabel')}
{sendError && ( @@ -646,16 +648,17 @@ function SessionChip({ session, selected, onClick }: { session: Session; selecte // ── Empty state ── function EmptyState({ filter }: { filter: FeedFilter }) { + const t = useTranslations('agentComms') return (
📡

- {filter === 'all' ? 'No feed events yet' : `No ${filter} events`} + {filter === 'all' ? t('noFeedEvents') : t('noFilterEvents', { filter })}

{filter === 'all' - ? 'Connect to the gateway or wait for agent activity. Events from sessions, tools, chat, and traces will stream here in real time.' - : `Switch to "All" to see events from other categories, or wait for ${filter} events to arrive.`} + ? t('noFeedEventsHint') + : t('noFilterEventsHint', { filter })}

) diff --git a/src/components/panels/agent-cost-panel.tsx b/src/components/panels/agent-cost-panel.tsx index beb95d8401d3b1d36cf1ba56df1360eb64670ae7..f469b47032404bae31ed016c31dd80941eea6cd6 100644 --- a/src/components/panels/agent-cost-panel.tsx +++ b/src/components/panels/agent-cost-panel.tsx @@ -1,6 +1,7 @@ 'use client' import { useState, useEffect, useCallback, useRef } from 'react' +import { useTranslations } from 'next-intl' import { Button } from '@/components/ui/button' import { Loader } from '@/components/ui/loader' import { createClientLogger } from '@/lib/client-logger' @@ -93,14 +94,15 @@ function PerAgentBreakdown({ formatNumber: (num: number) => string onRefresh: () => void }) { + const t = useTranslations('agentCost') const [expandedRow, setExpandedRow] = useState(null) if (!data || data.agents.length === 0) { return (
-
No per-agent data in database
-
Token usage records will appear once agents start reporting heartbeats
- +
{t('noPerAgentData')}
+
{t('noPerAgentDataSubtitle')}
+
) } @@ -114,15 +116,15 @@ function PerAgentBreakdown({
{summary.agent_count}
-
Agents (DB)
+
{t('agentCountDB')}
{formatCost(summary.total_cost)}
-
Total Cost ({summary.days}d)
+
{t('totalCostDays', { days: summary.days })}
{formatNumber(summary.total_tokens)}
-
Total Tokens
+
{t('totalTokens')}
@@ -130,13 +132,13 @@ function PerAgentBreakdown({ ? `$${(summary.total_cost / summary.total_tokens * 1000).toFixed(4)}` : '-'}
-
Avg $/1K Tokens
+
{t('avgPer1kTokens')}
{/* Cost bar chart */}
-

Per-Agent Cost (Database)

+

{t('perAgentCostDB')}

({ @@ -152,7 +154,7 @@ function PerAgentBreakdown({ dataKey === 'cost' ? formatCost(Number(value)) : formatNumber(Number(value)) } /> - +
@@ -160,7 +162,7 @@ function PerAgentBreakdown({ {/* Agent detail table */}
-

Agent Token Breakdown

+

{t('agentTokenBreakdown')}

{agents.map((agent) => { const costShare = (agent.total_cost / Math.max(summary.total_cost, 0.0001)) * 100 @@ -175,10 +177,10 @@ function PerAgentBreakdown({
{agent.agent} - {agent.session_count} session{agent.session_count !== 1 ? 's' : ''} + {t('sessionCount', { count: agent.session_count })} - {agent.request_count} req{agent.request_count !== 1 ? 's' : ''} + {t('requestCount', { count: agent.request_count })}
@@ -197,7 +199,7 @@ function PerAgentBreakdown({
{formatNumber(agent.total_tokens)}
-
tokens
+
{t('tokens')}
-
Input Tokens
+
{t('inputTokens')}
{formatNumber(agent.total_input_tokens)}
-
Output Tokens
+
{t('outputTokens')}
{formatNumber(agent.total_output_tokens)}
-
I/O Ratio
+
{t('ioRatio')}
{agent.total_output_tokens > 0 ? (agent.total_input_tokens / agent.total_output_tokens).toFixed(2) @@ -228,7 +230,7 @@ function PerAgentBreakdown({
-
Last Active
+
{t('lastActive')}
{new Date(agent.last_active).toLocaleDateString()}
@@ -237,7 +239,7 @@ function PerAgentBreakdown({ {agent.models.length > 0 && (
-
Model Breakdown
+
{t('modelBreakdown')}
{agent.models.map((m) => { const displayName = m.model.split('/').pop() || m.model @@ -245,9 +247,9 @@ function PerAgentBreakdown({
{displayName}
- {formatNumber(m.input_tokens)} in - {formatNumber(m.output_tokens)} out - {m.request_count} reqs + {formatNumber(m.input_tokens)} {t('inSuffix')} + {formatNumber(m.output_tokens)} {t('outSuffix')} + {t('reqs', { count: m.request_count })} {formatCost(m.cost)}
@@ -268,6 +270,7 @@ function PerAgentBreakdown({ } export function AgentCostPanel() { + const t = useTranslations('agentCost') const [selectedTimeframe, setSelectedTimeframe] = useState<'hour' | 'day' | 'week' | 'month'>('day') const [data, setData] = useState(null) const [taskData, setTaskData] = useState(null) @@ -385,8 +388,8 @@ export function AgentCostPanel() {
-

Agent Cost Breakdown

-

Per-agent token usage and spend analysis

+

{t('title')}

+

{t('subtitle')}

@@ -395,14 +398,14 @@ export function AgentCostPanel() { variant={activeView === 'overview' ? 'default' : 'ghost'} size="sm" > - Overview + {t('viewOverview')}
@@ -412,7 +415,7 @@ export function AgentCostPanel() { onClick={() => setSelectedTimeframe(tf)} variant={selectedTimeframe === tf ? 'default' : 'secondary'} > - {tf.charAt(0).toUpperCase() + tf.slice(1)} + {t(`timeframe${tf.charAt(0).toUpperCase() + tf.slice(1)}` as 'timeframeHour' | 'timeframeDay' | 'timeframeWeek' | 'timeframeMonth')} ))}
@@ -421,15 +424,15 @@ export function AgentCostPanel() {
{isLoading ? ( - + ) : activeView === 'per-agent' ? ( ) : !data || agents.length === 0 ? (
-
No agent cost data available
-
Cost data will appear once agents start using tokens
+
{t('noAgentCostData')}
+
{t('noAgentCostSubtitle')}
) : ( @@ -438,20 +441,20 @@ export function AgentCostPanel() {
{totalAgents}
-
Active Agents
+
{t('activeAgents')}
{formatCost(totalCost)}
-
Total Cost ({selectedTimeframe})
+
{t('totalCost', { timeframe: selectedTimeframe })}
{mostExpensive?.[0] || '-'}
-
Most Expensive
+
{t('mostExpensive')}
{mostExpensive &&
{formatCost(mostExpensive[1].stats.totalCost)} ({((mostExpensive[1].stats.totalCost / Math.max(totalCost, 0.0001)) * 100).toFixed(0)}%)
}
{mostEfficient?.[0] || '-'}
-
Most Efficient
+
{t('mostEfficient')}
{mostEfficient && (
${(mostEfficient[1].stats.totalCost / Math.max(1, mostEfficient[1].stats.totalTokens) * 1000).toFixed(4)}/1K tokens @@ -462,9 +465,9 @@ export function AgentCostPanel() {
{taskData ? `${((1 - taskData.unattributed.totalCost / Math.max(totalCost, 0.0001)) * 100).toFixed(0)}%` : '-'}
-
Task-Attributed
+
{t('taskAttributed')}
{taskData && taskData.unattributed.totalCost > 0 && ( -
{formatCost(taskData.unattributed.totalCost)} unattributed
+
{t('unattributed', { cost: formatCost(taskData.unattributed.totalCost) })}
)}
@@ -473,10 +476,10 @@ export function AgentCostPanel() {
{/* Cost Distribution Pie */}
-

Cost Distribution by Agent

+

{t('costDistributionByAgent')}

{pieData.length === 0 ? ( -
No cost data
+
{t('noCostData')}
) : ( @@ -495,10 +498,10 @@ export function AgentCostPanel() { {/* Cost Trend Lines */}
-

Cost Trends (Top 5 Agents)

+

{t('costTrends')}

{trendData.length === 0 ? ( -
No trend data
+
{t('noTrendData')}
) : ( @@ -520,7 +523,7 @@ export function AgentCostPanel() { {/* Agent Cost Comparison Bar Chart */} {sortedAgents.length > 1 && (
-

Cost Comparison

+

{t('costComparison')}

({ @@ -536,7 +539,7 @@ export function AgentCostPanel() { dataKey === 'cost' ? formatCost(Number(value)) : formatNumber(Number(value)) } /> - +
@@ -545,7 +548,7 @@ export function AgentCostPanel() { {/* Cost Efficiency Comparison */}
-

Cost Efficiency ($/1K Tokens per Agent)

+

{t('costEfficiency')}

{efficiencyData.map(({ name, costPer1k }) => (
@@ -566,7 +569,7 @@ export function AgentCostPanel() { {/* Agent Cost Ranking Table */}
-

Agent Cost Ranking

+

{t('agentCostRanking')}

{sortedAgents.map(([name, a], index) => { const costShare = ((a.stats.totalCost / Math.max(totalCost, 0.0001)) * 100) @@ -582,22 +585,22 @@ export function AgentCostPanel() { #{index + 1} {name} - {a.sessions.length} session{a.sessions.length !== 1 ? 's' : ''} + {t('sessionCount', { count: a.sessions.length })} {agentTasks.length > 0 && ( - {agentTasks.length} task{agentTasks.length !== 1 ? 's' : ''} + {t('tasksTab', { count: agentTasks.length })} )}
{formatCost(a.stats.totalCost)}
-
{costShare.toFixed(1)}% of total
+
{t('ofTotal', { pct: costShare.toFixed(1) })}
-
{formatNumber(a.stats.totalTokens)} tokens
-
{a.stats.requestCount} reqs
+
{formatNumber(a.stats.totalTokens)} {t('tokens')}
+
{t('reqs', { count: a.stats.requestCount })}
{ e.stopPropagation(); setExpandedSection('tasks') }} > - Tasks ({agentTasks.length}) + {t('tasksTab', { count: agentTasks.length })}
{expandedSection === 'tasks' && (
{agentTasks.length === 0 ? ( -
No task-attributed costs for this agent
+
{t('noTaskCosts')}
) : (
{agentTasks.map((task) => { @@ -678,8 +681,8 @@ export function AgentCostPanel() {
{displayName}
- {formatNumber(stats.totalTokens)} tokens - {stats.requestCount} reqs + {formatNumber(stats.totalTokens)} {t('tokens')} + {t('reqs', { count: stats.requestCount })} {formatCost(stats.totalCost)}
diff --git a/src/components/panels/agent-detail-tabs.tsx b/src/components/panels/agent-detail-tabs.tsx index 1ae2f4f4786e20c937a93760ed209974e8b254ab..86d084559061e9fe74f0a79cc62303135739e2a2 100644 --- a/src/components/panels/agent-detail-tabs.tsx +++ b/src/components/panels/agent-detail-tabs.tsx @@ -1,6 +1,7 @@ 'use client' import { useState, useEffect } from 'react' +import { useTranslations } from 'next-intl' import { Button } from '@/components/ui/button' import { Loader } from '@/components/ui/loader' import { createClientLogger } from '@/lib/client-logger' @@ -93,6 +94,7 @@ export function OverviewTab({ loadingHeartbeat: boolean onPerformHeartbeat: () => Promise }) { + const t = useTranslations('agentDetail') const [messageFrom, setMessageFrom] = useState('system') const [directMessage, setDirectMessage] = useState('') const [messageStatus, setMessageStatus] = useState(null) @@ -124,10 +126,10 @@ export function OverviewTab({ const data = await response.json() if (!response.ok) throw new Error(data.error || 'Failed to send message') setDirectMessage('') - setMessageStatus('Sent') + setMessageStatus(t('messageSent')) setTimeout(() => setMessageStatus(null), 2000) } catch (error) { - setMessageStatus('Failed') + setMessageStatus(t('messageFailed')) } } @@ -167,7 +169,7 @@ export function OverviewTab({ className="px-3 py-1 text-xs rounded-full border border-border text-muted-foreground hover:text-foreground hover:border-foreground/30 transition-colors disabled:opacity-50 ml-auto" style={agent.session_key ? { marginLeft: 0 } : undefined} > - {loadingHeartbeat ? '...' : 'Heartbeat'} + {loadingHeartbeat ? '...' : t('heartbeat')}
@@ -176,7 +178,7 @@ export function OverviewTab({ {heartbeatData.status} - {heartbeatData.total_items ? ` · ${heartbeatData.total_items} work items` : ''} + {heartbeatData.total_items ? ` · ${t('workItems', { count: heartbeatData.total_items })}` : ''} {heartbeatData.message && ` · ${heartbeatData.message}`}
)} @@ -184,7 +186,7 @@ export function OverviewTab({ {/* Key fields */}
- Role + {t('role')} {editing ? (
- Model + {t('model')} {editing ? ( ) : ( - {(() => { const p = (agent as any).config?.model?.primary; const m = (agent as any).model; const v = typeof p === 'string' ? p : p?.primary; return v || (typeof m === 'string' ? m : m?.primary) || 'default' })()} + {(() => { const p = (agent as any).config?.model?.primary; const m = (agent as any).model; const v = typeof p === 'string' ? p : p?.primary; return v || (typeof m === 'string' ? m : m?.primary) || t('default') })()} )}
- Session Key + {t('sessionKey')} {editing ? ( setFormData((prev: any) => ({ ...prev, session_key: e.target.value }))} className="bg-surface-1 text-foreground border border-border rounded px-2.5 py-1.5 text-sm font-mono focus:outline-none focus:ring-1 focus:ring-primary/50" - placeholder="OpenClaw session ID" + placeholder={t('sessionKeyPlaceholder')} /> ) : ( - {agent.session_key || Not set} + {agent.session_key || {t('notSet')}} )}
- Created + {t('created')} {new Date(agent.created_at * 1000).toLocaleDateString()}
- Updated + {t('updated')} {new Date(agent.updated_at * 1000).toLocaleDateString()}
@@ -249,19 +251,19 @@ export function OverviewTab({
{agent.taskStats.total}
-
Total
+
{t('statsTotal')}
{agent.taskStats.assigned}
-
Assigned
+
{t('statsAssigned')}
{agent.taskStats.in_progress}
-
Active
+
{t('statsActive')}
{agent.taskStats.completed}
-
Done
+
{t('statsDone')}
)} @@ -276,14 +278,14 @@ export function OverviewTab({ - Saving... + {t('saving')} - ) : 'Save'} + ) : t('save')} - + ) : ( - + )}
@@ -291,7 +293,7 @@ export function OverviewTab({ {/* Right Column — Direct Message */}
-

Message

+

{t('message')}

{messageStatus && ( {messageStatus} @@ -304,17 +306,17 @@ export function OverviewTab({ value={messageFrom} onChange={(e) => setMessageFrom(e.target.value)} className="bg-surface-1 text-foreground rounded px-2.5 py-1.5 text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50" - placeholder="From" + placeholder={t('from')} />