libre-webui 0.21.1 → 0.21.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/backend/dist/routes/documents.d.ts.map +1 -1
  2. package/backend/dist/routes/documents.js +2 -0
  3. package/backend/dist/routes/documents.js.map +1 -1
  4. package/backend/dist/services/ollamaService.d.ts +11 -1
  5. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  6. package/backend/dist/services/ollamaService.js +101 -3
  7. package/backend/dist/services/ollamaService.js.map +1 -1
  8. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  9. package/backend/dist/services/titleGenerationService.js +14 -3
  10. package/backend/dist/services/titleGenerationService.js.map +1 -1
  11. package/backend/package.json +1 -1
  12. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  13. package/frontend/dist/assets/index-BBpNbfKW.js +16 -0
  14. package/frontend/dist/assets/index-BLATyFmD.css +1 -0
  15. package/frontend/dist/index.html +41 -16
  16. package/frontend/dist/js/ArtifactContainer-Dy2Q0iIL.js +1 -0
  17. package/frontend/dist/js/{ArtifactDemoPage-DQBTKgzC.js → ArtifactDemoPage-K79dWshB.js} +1 -1
  18. package/frontend/dist/js/{ArtifactSandboxFrame-CpblpEf4.js → ArtifactSandboxFrame-DhqLNUtY.js} +2 -2
  19. package/frontend/dist/js/ArtifactSlideOutPanel-Cl8JG7bz.js +1 -0
  20. package/frontend/dist/js/{Button-X9TT9gTD.js → Button-CTXHujOd.js} +1 -1
  21. package/frontend/dist/js/ChatPage-BBayfMLS.js +16 -0
  22. package/frontend/dist/js/{FirstTimeSetup-C3ldEPmK.js → FirstTimeSetup-kHhRzGJ8.js} +1 -1
  23. package/frontend/dist/js/{GalleryPage-DrrOhli8.js → GalleryPage-By8VI39Q.js} +1 -1
  24. package/frontend/dist/js/HomePage-C1L8WAXL.js +1 -0
  25. package/frontend/dist/js/LibreClawPage-Dyua8IUu.js +1 -0
  26. package/frontend/dist/js/{ModelManagerModals-D-NxeVvV.js → ModelManagerModals-CuMRGUd-.js} +1 -1
  27. package/frontend/dist/js/ModelSelector-CqHc-Ln4.js +1 -0
  28. package/frontend/dist/js/ModelsPage-ODeXhDDk.js +2 -0
  29. package/frontend/dist/js/{NotesPage-D10aWpVj.js → NotesPage-CApzDjOq.js} +1 -1
  30. package/frontend/dist/js/{PersonasPage-BvCPzwx2.js → PersonasPage-D_6WBCH5.js} +2 -2
  31. package/frontend/dist/js/{PluginUsagePage-B9YgizW8.js → PluginUsagePage-kutS6SOd.js} +1 -1
  32. package/frontend/dist/js/{RichMessageContent-2L-mHp9Q.js → RichMessageContent-g6WT75Te.js} +1 -1
  33. package/frontend/dist/js/SettingsModal-B7z51BCx.js +1 -0
  34. package/frontend/dist/js/{SettingsToggle-bZ5W4CCf.js → SettingsToggle-DLHlCDBl.js} +1 -1
  35. package/frontend/dist/js/{SystemPage-CKnhy0Fr.js → SystemPage-BMWEet9e.js} +1 -1
  36. package/frontend/dist/js/{UserManagementPage-B3gA_Zx8.js → UserManagementPage-D08lM51c.js} +1 -1
  37. package/frontend/dist/js/WorkPage-DdVLefsK.js +6 -0
  38. package/frontend/dist/js/{api-DjQINB7B.js → api-CLEmGcEh.js} +1 -1
  39. package/frontend/dist/js/{appStore-CIV0DhiE.js → appStore-CGdhvp9P.js} +2 -2
  40. package/frontend/dist/js/ar-BTmB2WVm.js +2 -0
  41. package/frontend/dist/js/{authStore-pmXfK_qt.js → authStore-Dh3beEOq.js} +3 -3
  42. package/frontend/dist/js/{bn-C7CHC42H.js → bn-CQnH7YVT.js} +2 -2
  43. package/frontend/dist/js/chatStore-CDeYWL_q.js +3 -0
  44. package/frontend/dist/js/{config-DF-g5uwS.js → config-DkV1ka7I.js} +1 -1
  45. package/frontend/dist/js/{cs-zGEtwQn_.js → cs-oTTZkQXr.js} +2 -2
  46. package/frontend/dist/js/{da-B-0sHNTu.js → da-Br0gB6J6.js} +2 -2
  47. package/frontend/dist/js/{de-UZNE6t2h.js → de-DE2iztTF.js} +2 -2
  48. package/frontend/dist/js/{es-CPLnFYIw.js → es-DgthfVtl.js} +2 -2
  49. package/frontend/dist/js/{estree-livw6QLA.js → estree-D5KP-qbw.js} +1 -1
  50. package/frontend/dist/js/{fr-Br1o0WVz.js → fr-BjxjFwPh.js} +2 -2
  51. package/frontend/dist/js/{hi-BcEvNEpb.js → hi-D1q7E-9N.js} +2 -2
  52. package/frontend/dist/js/{html-CWlKlrlk.js → html-Cm9c2akd.js} +1 -1
  53. package/frontend/dist/js/{id-C30L2DoT.js → id-CDJZqLTF.js} +2 -2
  54. package/frontend/dist/js/{is-BAEhfi5Z.js → is-BU7Um_Tq.js} +2 -2
  55. package/frontend/dist/js/{it-HWnfQXZY.js → it-CdAxr8P_.js} +2 -2
  56. package/frontend/dist/js/ja-BLbQwz9u.js +2 -0
  57. package/frontend/dist/js/{ko-agDQ__KP.js → ko-CY5lpkAe.js} +2 -2
  58. package/frontend/dist/js/{markdown-BM75gisb.js → markdown-B2u7CnKN.js} +1 -1
  59. package/frontend/dist/js/{messageCodeStyles-DxPb6SKm.js → messageCodeStyles-DalG2j6U.js} +2 -2
  60. package/frontend/dist/js/{ms-aNRa2QX7.js → ms-tQ8AYXEQ.js} +2 -2
  61. package/frontend/dist/js/{nl-BtkiDUn-.js → nl-CRNi2oWT.js} +2 -2
  62. package/frontend/dist/js/{pl-SEO0lBnX.js → pl-CWtFRS_W.js} +2 -2
  63. package/frontend/dist/js/{pt-BYtjmvq1.js → pt-C7SPoLF8.js} +2 -2
  64. package/frontend/dist/js/{ru-B-ynj2hU.js → ru-Dz4AX8xc.js} +2 -2
  65. package/frontend/dist/js/{standalone-h0KNQ5yy.js → standalone-Dwm1daef.js} +1 -1
  66. package/frontend/dist/js/{sv-CliKR15U.js → sv-ETy5-boa.js} +2 -2
  67. package/frontend/dist/js/{th-DJQyDr9J.js → th-DpuMqvxU.js} +2 -2
  68. package/frontend/dist/js/{tr-BBGKZ1la.js → tr-C-1AYAqg.js} +2 -2
  69. package/frontend/dist/js/{typescript-CPI0lY4n.js → typescript-CwieSptM.js} +1 -1
  70. package/frontend/dist/js/{ui-ovAoLjDQ.js → ui-BnDZpjfc.js} +2 -2
  71. package/frontend/dist/js/{uk-C1GcFWxE.js → uk-CyS680gr.js} +2 -2
  72. package/frontend/dist/js/useTranslation-CXY69qNk.js +1 -0
  73. package/frontend/dist/js/utils-BM0_0iFj.js +1 -0
  74. package/frontend/dist/js/{vi-CIxgICOQ.js → vi-BG8HuiTz.js} +2 -2
  75. package/frontend/dist/js/{workApi-CCHIEahA.js → workApi-BOS7crs9.js} +2 -2
  76. package/frontend/dist/js/{zh-Cm7vsQ9s.js → zh-NCs2mkHj.js} +2 -2
  77. package/package.json +3 -20
  78. package/electron/main.js +0 -560
  79. package/frontend/dist/assets/index-BN-WAt2j.js +0 -2
  80. package/frontend/dist/assets/index-D7m1zWWg.css +0 -1
  81. package/frontend/dist/js/ArtifactContainer-BD20LheX.js +0 -1
  82. package/frontend/dist/js/ArtifactSlideOutPanel-BVgr8Cv6.js +0 -1
  83. package/frontend/dist/js/ChatPage-D2EWlzO4.js +0 -16
  84. package/frontend/dist/js/HomePage-D21Haon_.js +0 -1
  85. package/frontend/dist/js/LibreClawPage-CEf9ws8z.js +0 -1
  86. package/frontend/dist/js/ModelSelector-whWBlN-S.js +0 -1
  87. package/frontend/dist/js/ModelsPage-CL2t9qNT.js +0 -2
  88. package/frontend/dist/js/SettingsModal-BK05P_rU.js +0 -1
  89. package/frontend/dist/js/WorkPage-Bj3UVrmb.js +0 -5
  90. package/frontend/dist/js/ar-Bm27TCMQ.js +0 -2
  91. package/frontend/dist/js/chatStore-D76rdaV6.js +0 -2
  92. package/frontend/dist/js/i18n-DJTg6xWw.js +0 -2
  93. package/frontend/dist/js/ja-Dvux1mon.js +0 -2
  94. package/frontend/dist/js/useTranslation-CdeLZqSW.js +0 -1
  95. package/frontend/dist/js/utils-BhpNrGnR.js +0 -1
@@ -1,2 +0,0 @@
1
- var e={common:{loading:`جاري التحميل...`,save:`حفظ`,saving:`جاري الحفظ...`,cancel:`إلغاء`,delete:`حذف`,edit:`تعديل`,close:`إغلاق`,back:`رجوع`,next:`التالي`,confirm:`تأكيد`,error:`خطأ`,success:`نجاح`,warning:`تحذير`,or:`أو`,optional:`اختياري`,enabled:`مُفعّل`,disabled:`معطّل`,on:`تشغيل`,off:`إيقاف`,yes:`نعم`,no:`لا`,search:`بحث`,noResults:`لم يتم العثور على نتائج`,retry:`إعادة المحاولة`,refresh:`تحديث`,download:`تحميل`,upload:`رفع`,export:`تصدير`,import:`استيراد`,reset:`إعادة تعيين`,apply:`تطبيق`,clear:`مسح`,all:`الكل`,none:`لا شيء`,default:`افتراضي`,custom:`مخصص`,remove:`إزالة`,home:`الرئيسية`,more:`أكثر`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`مرحباً بعودتك`,subtitle:`سجّل الدخول إلى حسابك للمتابعة`,username:`اسم المستخدم`,usernamePlaceholder:`أدخل اسم المستخدم`,password:`كلمة المرور`,passwordPlaceholder:`أدخل كلمة المرور`,signIn:`تسجيل الدخول`,signingIn:`جاري تسجيل الدخول...`,noAccount:`ليس لديك حساب؟`,signUpHere:`سجّل هنا`,loginSuccess:`تم تسجيل الدخول بنجاح!`,loginFailed:`فشل تسجيل الدخول`,checkCredentials:`فشل تسجيل الدخول. يرجى التحقق من بيانات الاعتماد.`,enterBoth:`يرجى إدخال اسم المستخدم وكلمة المرور`,githubSuccess:`تم تسجيل الدخول عبر GitHub بنجاح!`,githubFailed:`فشلت مصادقة GitHub`,githubVerifyFailed:`فشل التحقق من مصادقة GitHub`,approvalPending:`حسابك في انتظار موافقة المسؤول.`,verificationFailed:`فشل التحقق الأمني. حدّث الصفحة وحاول مجددًا.`},signup:{title:`إنشاء حساب`,subtitle:`سجّل للحصول على حساب جديد`,username:`اسم المستخدم`,usernamePlaceholder:`اختر اسم مستخدم`,email:`البريد الإلكتروني`,emailPlaceholder:`your@email.com`,password:`كلمة المرور`,passwordPlaceholder:`اختر كلمة مرور`,confirmPassword:`تأكيد كلمة المرور`,confirmPasswordPlaceholder:`أكّد كلمة المرور`,createAccount:`إنشاء حساب`,creatingAccount:`جاري إنشاء الحساب...`,hasAccount:`لديك حساب بالفعل؟`,signInHere:`سجّل الدخول هنا`,signupSuccess:`تم إنشاء الحساب بنجاح!`,signupFailed:`فشل التسجيل`,tryAgain:`فشل التسجيل. يرجى المحاولة مرة أخرى.`,usernameRequired:`اسم المستخدم وكلمة المرور مطلوبان`,passwordMismatch:`كلمات المرور غير متطابقة`,passwordTooShort:`يجب أن تكون كلمة المرور 6 أحرف على الأقل`,approvalPending:`تم استلام التسجيل. يجب أن يوافق المسؤول على حسابك.`,awaitingApproval:`في انتظار الموافقة`,awaitingApprovalDescription:`تم إنشاء حسابك، ولكن يجب أن يقوم المسؤول بتفعيله قبل أن تتمكن من تسجيل الدخول.`,backToSignIn:`العودة لتسجيل الدخول`},logout:{button:`تسجيل الخروج`,success:`تم تسجيل الخروج بنجاح`},oauth:{continueWith:`المتابعة مع {{provider}}`,connectingTo:`جاري الاتصال بـ {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`جاري التحقق من المصادقة...`,welcome:`مرحباً`,noEmail:`لم يتم تقديم بريد إلكتروني`,role:`الدور`,id:`المعرف`,userId:`معرف المستخدم`,signInDescription:`سجّل الدخول بحساب GitHub الخاص بك للمتابعة`,signInWithGitHub:`تسجيل الدخول بواسطة GitHub`,jwtActive:`مصادقة JWT نشطة`,jwtDescription:`مصادقة JWT مع GitHub OAuth`,github:`GitHub`,provider:`المزود`,tagline:`يجب أن يخضع مكدس الذكاء الاصطناعي الخاص بك لك.`,selfHosted:`مستضاف ذاتيًا · Apache 2.0`,highlights:{local:{title:`محلي أولاً`,body:`تبقى محادثاتك وملفاتك على الجهاز الذي تشغل هذا عليه.`},providers:{title:`أي مزود`,body:`نماذج محلية عبر Ollama، بالإضافة إلى المزودين عن بُعد الذين تختار إضافتهم.`},work:{title:`عمل معزول`,body:`امنح النموذج مساحة عمل معزولة بالملفات والطرفية والمعاينة.`}}},setup:{welcome:{title:`مرحباً بك في Libre WebUI`,subtitle:`لنبدأ`,description:`قم بإعداد Libre WebUI الخاص بك في خطوات قليلة`,createAdmin:`إنشاء حساب المسؤول`,features:{secure:{title:`آمن وخاص`,description:`محادثاتك تبقى على جهازك`},fast:{title:`سريع ومتجاوب`,description:`محسّن للسرعة والأداء`},openSource:{title:`مفتوح المصدر`,description:`برنامج مجاني ومفتوح المصدر`}}},admin:{title:`إنشاء حساب المسؤول`,subtitle:`إعداد المسؤول`,description:`أنشئ أول حساب مسؤول لـ Libre WebUI الخاص بك`,usernamePlaceholder:`أدخل اسم المسؤول`,passwordPlaceholder:`أدخل كلمة المرور (6 أحرف على الأقل)`,confirmPlaceholder:`أكّد كلمة المرور`,creating:`جاري الإنشاء...`,createAdmin:`إنشاء المسؤول`,success:`تم إنشاء حساب المسؤول بنجاح!`,failed:`فشل إنشاء حساب المسؤول`,fillAllFields:`يرجى ملء جميع الحقول`,note:`سيكون هذا حساب المسؤول الرئيسي لـ Libre WebUI الخاص بك`,approvalUnexpected:`تعذر تفعيل المسؤول الأولي. يرجى المحاولة مرة أخرى.`},encryptionKey:{title:`احفظ مفتاح التشفير`,subtitle:`مهم: احفظ هذا المفتاح`,description:`يحمي مفتاح التشفير هذا بياناتك الحساسة. احفظه بأمان - ستحتاجه إذا احتجت لاستعادة قاعدة البيانات.`,warning:`تحذير`,warningText:`إذا فقدت هذا المفتاح واحتجت لاستعادة قاعدة البيانات، ستكون بياناتك المشفرة (مفاتيح API، التفضيلات) غير قابلة للاسترداد.`,label:`مفتاح التشفير الخاص بك`,loading:`جاري التحميل...`,copyToClipboard:`نسخ إلى الحافظة`,copied:`تم نسخ مفتاح التشفير إلى الحافظة!`,copyFailed:`فشل نسخ المفتاح إلى الحافظة`,envNote:`هذا المفتاح محفوظ أيضاً في ملف backend/.env كـ ENCRYPTION_KEY`,acknowledgment:`لقد حفظت مفتاح التشفير في مكان آمن وأفهم أن فقدانه قد يؤدي إلى فقدان البيانات.`,confirmRequired:`يرجى التأكيد على أنك حفظت مفتاح التشفير`,continue:`المتابعة إلى Libre WebUI`}},chat:{greeting:{morning:`صباح الخير`,afternoon:`مساء الخير`,evening:`مساء الخير`,night:`تصبح على خير`},followUp:`متابعة`,welcome:{helpToday:`كيف يمكنني مساعدتك اليوم؟`,helpTonight:`كيف يمكنني مساعدتك الليلة؟`,variety:{create:{title:`ماذا نصنع؟`,subtitle:`ابدأ بفكرة، أو رسم أولي، أو مشكلة عنيدة.`},explore:{title:`من أين نبدأ؟`,subtitle:`هات السؤال الذي لا يكفّ عن العودة إلى ذهنك.`},imagine:{title:`ما الذي تتخيّله؟`,subtitle:`يمكننا أن نمنحه شكلاً معًا.`},focus:{title:`ما الذي يستحق انتباهك؟`,subtitle:`لنجعل الخطوة التالية واضحة.`},untangle:{title:`ما الذي يبدو معقّدًا؟`,subtitle:`أعطني النسخة الفوضوية أولًا.`},momentum:{title:`لننطلق عندما تكون جاهزًا.`,subtitle:`تابع فكرة أو خطة أو خيطًا تركته دون إكمال.`},open:{title:`ما الذي يشغل بالك؟`,subtitle:`خاطرة صغيرة أو مشروع طموح. كلاهما مناسب.`},challenge:{title:`ما الذي نحاول حلّه؟`,subtitle:`أخبرني بما لا يعمل بعد.`},draft:{title:`لنبدأ من مكان ما.`,subtitle:`لا يشترط أن يكون مصقولًا.`},possibility:{title:`إلى ماذا يمكن أن يتحول هذا؟`,subtitle:`أرني المادة الخام.`},unexpected:{title:`لنصنع شيئًا غير متوقع.`,subtitle:`أعطني قيدًا، أو مزاجًا، أو فكرة لم تكتمل بعد.`}}},input:{placeholder:`أرسل رسالة`,messagePlaceholder:`رسالة...`,attachImages:`إرفاق صور`,attachments:`المرفقات والميزات المتقدمة`,sendMessage:`إرسال الرسالة`,stopGeneration:`إيقاف التوليد`,menu:{uploadImages:`رفع صور`,attachDocument:`إرفاق مستند`,attachWebpage:`إرفاق صفحة ويب`,structuredOutput:`إخراج منظم`,attach:`إرفاق`,documentAttached:`تم إرفاق المستند`,webpageAttached:`تم إرفاق صفحة الويب`,attachFailed:`تعذر الإرفاق`,attachKnowledge:`إرفاق معرفة`,noCollections:`لا توجد مجموعات بعد — أنشئ واحدة في الإعدادات ← المستندات`},voiceInput:`إدخال صوتي`,voiceStop:`إيقاف الاستماع`,webSearchOn:`البحث في الويب مفعّل — تستخدم الردود نتائج حية`,webSearchOff:`ابحث في الويب لهذه الرسالة`},session:{new:`محادثة جديدة`,work:`العمل`,chat:`محادثة`,private:`خاص`,privateMode:`الوضع الخاص`,privateDescription:`لن يتم حفظ هذه المحادثة`,privateTooltip:`ابدأ محادثة خاصة لن يتم حفظها`,deleteConfirm:`هل أنت متأكد من حذف هذه المحادثة؟`,generatingTitle:`جاري توليد العنوان`,noChats:`لا توجد محادثات بعد`,createFirst:`أنشئ أول محادثة أعلاه`,chats:`المحادثات`,renameChat:`إعادة تسمية المحادثة`,openNewTab:`فتح في تبويب جديد`,pinChat:`تثبيت`,unpinChat:`إلغاء التثبيت`,deleteChat:`حذف المحادثة`,incognito:`دردشة مخفية`,archiveChat:`أرشفة المحادثة`,groups:{pinned:`المثبتة`,today:`اليوم`,yesterday:`أمس`,previous7Days:`آخر 7 أيام`,previous30Days:`آخر 30 يومًا`,older:`أقدم`},folder:{new:`مجلد جديد`,namePlaceholder:`اسم المجلد`,move:`نقل إلى مجلد`,remove:`إزالة من المجلد`,delete:`حذف المجلد`,deleteConfirm:`حذف هذا المجلد؟ ستبقى المحادثات بداخله.`}},persona:{applied:`تم تطبيق الشخصية`,label:`الشخصية`,removeFailed:`فشل في إزالة الشخصية`},model:{updated:`تم تحديث النموذج`,noModels:`لا توجد نماذج متاحة`,noModelsDescription:`لا توجد نماذج متاحة. تأكد من تشغيل Ollama وتثبيت النماذج.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`لا توجد نماذج متاحة. يرجى التأكد من تشغيل Ollama وتثبيت النماذج.`,selectBeforePrivateChat:`اختر نموذجاً متاحاً قبل بدء محادثة خاصة`,selectBeforeSending:`اختر نموذجاً متاحاً قبل الإرسال`},footer:{disclaimer:`قد يرتكب الذكاء الاصطناعي أخطاء - تحقق من المعلومات المهمة`,images:`{{count}} صورة`,images_plural:`{{count}} صور`,structuredOutput:`مخرجات منظمة`},mediaUpload:{dropImagesHere:`أفلت الصور هنا أو`,supportedFormats:`يدعم: JPG، PNG، GIF، WebP (حد أقصى 10 ميجابايت لكل صورة)`,browse:`تصفح`},structuredOutput:{title:`تنسيق الاستجابة`,none:`بدون (لغة طبيعية)`,noneDescription:`استجابة باللغة الطبيعية الافتراضية`,json:`JSON`,jsonDescription:`تنسيق JSON منظم`,list:`قائمة`,listDescription:`مصفوفة من العناصر`,summary:`ملخص`,summaryDescription:`ملخص المستند مع النقاط الرئيسية`,analysis:`تحليل`,analysisDescription:`تحليل منظم مع الإيجابيات والسلبيات`,custom:`مخطط مخصص`,customDescription:`حدد مخطط JSON الخاص بك`,customSchema:`مخطط JSON مخصص`,schemaPreview:`معاينة المخطط`,applySchema:`تطبيق المخطط`,cancel:`إلغاء`,enabled:`تم تفعيل المخرجات المنظمة`},controls:{title:`عناصر تحكم المحادثة`,systemPrompt:`موجه النظام`,systemPromptPlaceholder:`تعليمات تنطبق على هذه المحادثة فقط…`,advancedParams:`معلمات متقدمة`,advancedParamsDescription:`تجاوزات لهذه المحادثة. الحقول الفارغة تستخدم الإعدادات العامة.`,fromModel:`من النموذج`,fromModelHint:`هذه القيمة مأخوذة من الإعدادات التي يوصي بها النموذج نفسه.`,contextCapped:`تم تحديد السياق عند {{context}} من أصل {{trained}} تم تدريب النموذج عليها، حتى يظل قابلاً للتحميل.`,saved:`تم حفظ عناصر التحكم`,saveFailed:`تعذر حفظ عناصر التحكم`,params:{temperature:`درجة الحرارة`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`أقصى عدد رموز`,repeatPenalty:`عقوبة التكرار`,seed:`البذرة`,contextLength:`طول السياق`}},message:{sources:`المصادر`}},sidebar:{navigation:{chat:`محادثة`,models:`النماذج`,personas:`الشخصيات`,imagine:`تخيّل`,work:`العمل`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,signOut:`تسجيل الخروج`,agents:`الوكلاء`,exploreLabel:`استكشاف`,usageAnalytics:`استخدام المزود`,system:`النظام`,notes:`الملاحظات`},toggleSize:`تبديل حجم الشريط الجانبي`,expandSidebar:`توسيع الشريط الجانبي`},user:{menu:{changePicture:`تغيير الصورة`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,logout:`تسجيل الخروج`,usageAnalytics:`استخدام المزود`,system:`النظام`},avatar:{title:`تغيير صورة الملف الشخصي`,updated:`تم تحديث صورة الملف الشخصي`,updateFailed:`فشل تحديث صورة الملف الشخصي`,saving:`جاري الحفظ...`,label:`الصورة الرمزية`,uploadAvatarImage:`رفع صورة رمزية`,dragAndDrop:`اسحب وأفلت صورة أو انقر للتصفح`,chooseImage:`اختر صورة`,uploading:`جاري الرفع...`,enterImageUrl:`أو أدخل رابط الصورة`,supportedFormats:`الصيغ المدعومة: JPG، PNG، GIF، WebP (الحد الأقصى 2 ميجابايت). الصور المربعة تعمل بشكل أفضل.`,customAvatar:`صورة رمزية مخصصة`,clickToChange:`انقر للتغيير أو الإزالة`,removed:`تمت إزالة الصورة الرمزية`,uploaded:`تم رفع الصورة الرمزية بنجاح`,invalidFile:`يرجى اختيار ملف صورة صالح`,fileTooLarge:`يجب أن يكون حجم الصورة الرمزية أقل من 2 ميجابايت`,readFailed:`فشل قراءة ملف الصورة`,uploadFailed:`فشل رفع الصورة الرمزية`},profile:{noEmail:`لم يتم تقديم بريد إلكتروني`}},settings:JSON.parse(`{"title":"الإعدادات","tabs":{"appearance":"المظهر","model":"النموذج","systemMessage":"رسالة النظام","plugins":"الإضافات","search":"البحث","generation":"التوليد","documents":"المستندات","tts":"تحويل النص إلى كلام","imageGen":"توليد الصور","data":"البيانات","shortcuts":"الاختصارات","about":"حول"},"appearance":{"title":"المظهر","language":{"title":"اللغة","description":"اختر لغتك المفضلة"},"theme":{"title":"السمة","light":"فاتح","dark":"داكن","amoled":"أسود نقي","system":"النظام"},"accent":{"title":"لون التمييز","custom":"لون مخصص","useColor":"استخدام {{color}} كلون تمييز","behaviorTitle":"لوحة ألوان الواجهة","behaviorDescription":"اختر ما إذا كان لون التمييز يقتصر على عناصر التحكم أو يكيّف الواجهة الفاتحة أو الداكنة بالكامل.","defaultStyle":"افتراضي","defaultStyleDescription":"الاحتفاظ بالأسطح المحايدة للوضعين الفاتح والداكن.","adaptedStyle":"التكيف مع لون التمييز","adaptedStyleDescription":"تلوين الأسطح والحدود والنصوص بلون التمييز."},"chatInterface":{"title":"واجهة المحادثة","showUsername":"إظهار اسم المستخدم","showUsernameDescription":"عرض اسم المستخدم في رسائل المحادثة","followUpSuggestions":"اقتراحات المتابعة","followUpSuggestionsDescription":"اقتراح ردود سريعة بعد كل استجابة","hapticFeedback":"ردود فعل لمسية (Android)","hapticFeedbackDescription":"استخدام اهتزاز خفيف للإجراءات المهمة على الهاتف"},"background":{"title":"صورة الخلفية","enable":"تفعيل صورة الخلفية","enableDescription":"عرض خلفية مخصصة مع تأثير التمويه","blur":"التمويه","opacity":"الشفافية","upload":"رفع صورة الخلفية","dragDrop":"اسحب وأفلت صورة أو انقر للتصفح","chooseImage":"اختر صورة"}},"saveSettings":"حفظ الإعدادات","model":{"title":"إعدادات النموذج","defaultModel":"النموذج الافتراضي","defaultModelDescription":"سيتم استخدام هذا النموذج افتراضياً للمحادثات الجديدة","selectModel":"اختر نموذجاً","updateAll":"تحديث جميع النماذج","updateAllDescription":"التحقق من التحديثات وسحب أحدث إصدارات جميع النماذج المثبتة","updateAllButton":"تحديث الكل","updating":"جاري تحديث النماذج...","currentModelInfo":"معلومات النموذج الحالي","name":"الاسم","size":"الحجم","family":"العائلة","format":"التنسيق","status":"الحالة","statusStarting":"جاري البدء...","statusComplete":"مكتمل","statusError":"خطأ","bulkOperations":"العمليات المجمعة","autoTitle":{"title":"توليد العنوان التلقائي","enable":"تفعيل العنوان التلقائي","enableDescription":"توليد عناوين تلقائياً للمحادثات الجديدة","taskModel":"نموذج المهام","selectTaskModel":"اختر نموذج المهام","taskModelDescription":"النموذج المستخدم لتوليد عناوين المحادثات"},"persona":"شخصية","updatingModel":"تحديث {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} من {{total}} نماذج","specializedModels":"نماذج متخصصة","visionModel":"نموذج الرؤية","selectVisionModel":"استخدام نموذج الدردشة الحالي","visionModelDescription":"يُستخدم تلقائيًا كلما احتوى سياق الدردشة الصادر على صور. اختر نموذجًا يدعم إدخال الصور.","visionModelUpdateFailed":"فشل تحديث نموذج الرؤية: {{error}}","visionModelNoProvider":"نموذج الرؤية هذا ليس له هوية مزوّد. اختر نموذجاً متاحاً."},"systemMessage":{"title":"رسالة النظام","description":"عيّن رسالة نظام مخصصة ستُستخدم لجميع المحادثات الجديدة.","placeholder":"أدخل رسالة النظام...","saved":"تم حفظ رسالة النظام","saveFailed":"فشل حفظ رسالة النظام"},"plugins":{"title":"الإضافات","description":"إدارة الإضافات المثبتة","addNew":"إضافة إضافة جديدة","upload":"رفع إضافة","addJson":"إضافة JSON","uploading":"جاري الرفع...","jsonPlaceholder":"الصق إعدادات JSON للإضافة...","install":"تثبيت الإضافة","noPlugins":"لا توجد إضافات مثبتة","noPluginsDescription":"أضف إضافة لتوسيع الوظائف","loading":"جاري تحميل الإضافات...","installed":"الإضافات المثبتة","active":"الإضافات النشطة","activeLabel":"نشط","inactive":"غير نشط","activate":"تفعيل","deactivate":"إلغاء التفعيل","models":"نماذج","apiKeySet":"تم تعيين مفتاح API","apiKeyConfiguration":"إعداد مفتاح API","apiKeyEnvAlternative":"بدلاً من ذلك، عيّن","environmentVariable":"متغير البيئة","apiKeyConfigured":"تم إعداد مفتاح API","apiKeyPlaceholder":"أدخل مفتاح API...","saveApiKey":"حفظ مفتاح API","apiKey":{"title":"مفتاح API","placeholder":"أدخل مفتاح API","save":"حفظ المفتاح","remove":"إزالة المفتاح","configured":"تم إعداد مفتاح API","notConfigured":"مفتاح API مطلوب","saved":"تم حفظ مفتاح API بنجاح","removed":"تم إزالة مفتاح API","saveFailed":"فشل حفظ مفتاح API","removeFailed":"فشل إزالة مفتاح API","enterKey":"يرجى إدخال مفتاح API"},"variables":"Variables","providerConnections":"اتصالات المزود","providerConnectionsDescription":"اتصل، وقم بتكوين، وفحص مزودي النماذج عبر الإضافات.","providers":"المزودون","searchProviders":"ابحث عن المزودين","noProvidersFound":"لا يوجد مزودون يطابقون بحثك.","selectProvider":"اختر مزودًا","selectProviderDescription":"اختر مزودًا لفحص اتصاله وكتالوج النماذج الخاص به.","apiKeyDescription":"قم بتخزين مفتاح API شخصي لـ {{name}}.","showApiKey":"إظهار مفتاح API","hideApiKey":"إخفاء مفتاح API","configure":"تكوين","providerSettings":"إعدادات المزود","status":"الحالة","defaultEndpoint":"نقطة النهاية الافتراضية","modelCatalog":"كتالوج النماذج","modelCatalogDescription":"النماذج المكتشفة والمكونة لهذا المزود وقدراته.","refreshModels":"تحديث النماذج","noModelsConfigured":"لا توجد نماذج مكونة لهذا المزود.","modelId":"معرف النموذج","capabilities":"القدرات","modelCatalogUpdated":"تم تحديث كتالوج النماذج: {{count}} نماذج.","modelCatalogUnchanged":"كتالوج النماذج محدث بالفعل.","modelCatalogNeedsApiKey":"أضف مفتاح API صالح لهذا المزود لتحميل قائمة نماذجه المباشرة.","modelCatalogUnavailable":"تعذر تحميل قائمة نماذج المزود.","modelCatalogRefreshFailed":"فشل تحديث كتالوج النماذج","capability":{"chat":"دردشة","embedding":"تضمين","image":"صورة","speech":"كلام","transcription":"نسخ"},"exportPlugin":"تصدير الإضافة","deletePlugin":"حذف الإضافة"},"generation":{"title":"خيارات التوليد","description":"إعداد كيفية توليد الذكاء الاصطناعي للاستجابات","scopeLabel":"يُطبَّق على","scopeAll":"كل النماذج","scopeModel":"{{model}} فقط","scopeAllHint":"القيم التي يستخدمها كل نموذج ما لم يكن له إعداد خاص به.","scopeModelHint":"يُحفظ لهذا النموذج وحده، ويتجاوز الإعدادات العامة.","coreParameters":"المعلمات الأساسية","temperature":"درجة الحرارة","temperatureDescription":"يتحكم في العشوائية. القيم الأقل أكثر تركيزاً، والقيم الأعلى أكثر إبداعاً.","topP":"Top P","topPDescription":"يتحكم في التنوع عبر أخذ العينات النووية. القيم الأقل تركز على الرموز المحتملة.","topK":"Top K","topKDescription":"يحد اختيار الرموز لأكثر K رمز احتمالاً. عيّن 0 للتعطيل.","minP":"Min P","minPDescription":"الحد الأدنى لاحتمال اختيار الرمز.","generationControl":"التحكم في التوليد","maxTokens":"الحد الأقصى للرموز","maxTokensDescription":"الحد الأقصى لعدد الرموز المولدة في الاستجابة.","repeatPenalty":"عقوبة التكرار","repeatPenaltyDescription":"يعاقب الرموز المتكررة. القيم الأعلى تقلل التكرار.","contextLength":"طول السياق","contextLengthDescription":"الحد الأقصى لحجم نافذة السياق للمحادثات.","seed":"البذرة","optional":"اختياري","random":"عشوائي","seedDescription":"عيّن بذرة محددة للمخرجات القابلة للتكرار.","advancedOptions":"خيارات متقدمة","presencePenalty":"عقوبة الوجود","presencePenaltyDescription":"يعاقب الرموز التي تظهر في السياق.","frequencyPenalty":"عقوبة التكرار","frequencyPenaltyDescription":"يعاقب الرموز المستخدمة بشكل متكرر.","stopSequences":"تسلسلات الإيقاف","commaSeparated":"مفصولة بفواصل","stopSequencesDescription":"رموز مخصصة ستوقف التوليد عند مصادفتها.","resetDefaults":"إعادة تعيين الافتراضيات","saveOptions":"حفظ الخيارات","embeddingSettings":"إعدادات التضمين","enableEmbeddings":"تفعيل تضمين المستندات","advancedSettings":"إعدادات التوليد المتقدمة","advancedSettingsDescription":"أخذ العينات، وحدود الرموز، والسياق، والعقوبات، وتسلسلات الإيقاف"},"documents":{"title":"إعدادات المستندات","embeddings":{"title":"التضمينات","enable":"تفعيل تضمين المستندات","model":"نموذج التضمين","modelDescription":"اختر النموذج المستخدم لتضمين المستندات","chunkSize":"حجم القطعة","chunkSizeInTokens":"(بالرموز)","chunkSizeDescription":"حجم قطع النص للتضمين","chunkOverlap":"تداخل القطع","chunkOverlapInTokens":"(بالرموز)","chunkOverlapDescription":"التداخل بين القطع المتتالية","similarityThreshold":"عتبة التشابه","similarityDescription":"الحد الأدنى لدرجة التشابه لتضمين النتائج","status":"حالة التضمين","statusLabel":"الحالة","available":"متاح","unavailable":"غير متاح","chunksWithEmbeddings":"قطع مع تضمينات","coverage":"التغطية","regenerate":"إعادة توليد التضمينات","regenerating":"جاري إعادة التوليد..."},"collections":{"title":"مجموعات المعرفة","description":"اجمع المستندات في مجموعات وأرفقها بأي محادثة.","namePlaceholder":"اسم المجموعة","create":"إنشاء","none":"بدون مجموعة","deleteConfirm":"حذف هذه المجموعة؟ ستبقى المستندات بداخلها."}},"tts":{"title":"تحويل النص إلى كلام","description":"إعداد إعدادات تحويل النص إلى كلام لقراءة الرسائل بصوت عالٍ","loadingProviders":"جاري تحميل مزودي TTS...","noProviders":"لا يوجد مزودو TTS","noProvidersDescription":"قم بإعداد إضافة مع دعم TTS لتفعيل تحويل النص إلى كلام","enable":"تفعيل TTS","enableDescription":"السماح بتحويل النص إلى كلام لرسائل المساعد","autoPlay":"تشغيل تلقائي للاستجابات","autoPlayDescription":"قراءة رسائل المساعد الجديدة بصوت عالٍ تلقائياً","streamSentences":"بث الجمل","streamSentencesDescription":"تشغيل الصوت جملة بجملة بدلاً من انتظار الرسالة الكاملة. موصى به لـ TTS المحلي لتجنب انتهاء المهلة في الرسائل الطويلة.","voiceConfiguration":"إعداد الصوت","model":"نموذج TTS","modelDescription":"اختر النموذج لتوليد الكلام","voice":"الصوت","selectVoice":"اختر صوتاً","voiceDescription":"اختر الصوت لتحويل النص إلى كلام","speed":"السرعة","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"المزودون المتاحون","models":"نماذج","test":"اختبار","testing":"جاري الاختبار...","stop":"إيقاف"},"imageGen":{"title":"توليد الصور","description":"إعداد إعدادات ومزودي توليد الصور","loadingProviders":"جاري تحميل مزودي توليد الصور...","noProviders":"لا يوجد مزودو توليد صور","noProvidersDescription":"قم بإعداد إضافة مع دعم توليد الصور","enable":"تفعيل توليد الصور","enableDescription":"السماح بتوليد الصور بالذكاء الاصطناعي في المحادثات","configuration":"الإعداد","model":"النموذج","modelDescription":"اختر النموذج لتوليد الصور","size":"الحجم","sizeDescription":"دقة الصور المولدة","quality":"الجودة","qualityDescription":"مستوى جودة الصور المولدة","style":"الأسلوب","styleDescription":"إعداد الأسلوب المسبق للصور المولدة","availableProviders":"المزودون المتاحون","models":"نماذج"},"data":{"title":"إدارة البيانات","export":"تصدير البيانات","exportDescription":"تحميل جميع بياناتك بما في ذلك التفضيلات والجلسات والمستندات.","exportAll":"تصدير جميع البيانات","import":"استيراد البيانات","importDescription":"استيراد البيانات من تصدير سابق.","importData":"استيراد البيانات","importing":"جاري الاستيراد...","clearSessions":"مسح الجلسات","clearSessionsDescription":"حذف جميع جلسات المحادثة. لا يمكن التراجع عن هذا الإجراء.","clearAll":"مسح الكل","clearing":"جاري المسح...","importOptions":"خيارات الاستيراد","importOptionsDescription":"اختر كيفية التعامل مع البيانات الموجودة","skipDuplicates":"تخطي المكررات","overwrite":"الكتابة فوق الموجود","importResults":"نتائج الاستيراد","preferences":"التفضيلات","imported":"تم الاستيراد","failed":"فشل","sessions":"الجلسات","importedLabel":"تم الاستيراد","skipped":"تم التخطي","documents":"المستندات","errors":"أخطاء","archivedChats":{"title":"المحادثات المؤرشفة","empty":"لا توجد محادثات مؤرشفة","unarchive":"إلغاء الأرشفة"}},"about":{"title":"حول","versionLabel":"الإصدار","ollama":{"title":"حالة Ollama","version":"الإصدار","healthy":"سليم","unhealthy":"غير سليم"},"stats":{"models":"النماذج","sessions":"الجلسات"},"features":{"privacy":{"title":"الخصوصية أولاً","description":"بياناتك تبقى على جهازك"},"openSource":{"title":"مفتوح المصدر","description":"برنامج مجاني ومفتوح المصدر"},"localInference":{"title":"استدلال محلي","description":"تشغيل نماذج الذكاء الاصطناعي محلياً مع Ollama"}},"openSourceBy":"مفتوح المصدر بواسطة {{company}}","links":{"title":"الروابط","github":"GitHub","githubDescription":"عرض الكود المصدري والمساهمة","website":"الموقع","websiteDescription":"زيارة موقعنا","ollama":"Ollama","ollamaDescription":"معرفة المزيد عن Ollama","documentation":"التوثيق","reportIssue":"الإبلاغ عن المشاكل","reportIssueDescription":"تقارير الأخطاء وطلبات الميزات","gitlab":"مرآة GitLab","gitlabDescription":"مستودع GitLab مستضاف ذاتياً","documentationDescription":"أدلة ودروس ومرجع API"},"version":"الإصدار {{version}}"},"groups":{"general":"عام","chat":"الدردشة","media":"الصوت والصور","connections":"الاتصالات"},"search":{"title":"البحث في الويب","description":"ابحث في الويب عبر مثيل SearXNG مستضاف ذاتيًا. عند التفعيل، يظهر زر البحث في المحادثة ويمكن لمهام Work المتصلة بالشبكة البحث.","enableLabel":"تفعيل البحث في الويب","enableDescription":"إتاحة البحث في الويب للمحادثات ومهام Work. تُنفَّذ عمليات البحث من جانب الخادم عبر المثيل المُهيأ.","urlLabel":"عنوان SearXNG","urlDescription":"عنوان URL الأساسي لمثيل SearXNG بحيث يكون متاحًا من الخادم. توفر حزمة النشر الخاص المرفقة http://searxng:8080.","maxResultsLabel":"النتائج لكل بحث","maxResultsDescription":"عدد النتائج التي تُغذي الرد أو استدعاء الأداة، من 1 إلى 10.","maxResultsInvalid":"يجب أن يكون عدد النتائج بين 1 و10.","safeSearchLabel":"البحث الآمن","safeSearchDescription":"اطلب من المحرك تصفية النتائج الصريحة.","test":"اختبار الاتصال","testing":"جارٍ الاختبار…","testOk":"البحث يعمل — تم إرجاع {{results}} نتيجة","testFailed":"فشل اختبار البحث","save":"حفظ","saved":"تم حفظ إعدادات البحث","saveFailed":"تعذر حفظ إعدادات البحث"}}`),models:{title:`النماذج`,subtitle:`سحب وإدارة ومراقبة نماذج Ollama`,installed:`النماذج المثبتة`,available:`النماذج المتاحة`,pull:`سحب النموذج`,pulling:`جاري السحب...`,delete:`حذف النموذج`,deleting:`جاري الحذف...`,size:`الحجم`,modified:`تم التعديل`,family:`العائلة`,parameters:`المعلمات`,quantization:`التكميم`,noModels:`لا توجد نماذج مثبتة`,pullFirst:`اسحب نموذجاً للبدء`,noModelsFound:`لم يتم العثور على نماذج`},personas:{title:`الشخصيات`,create:`إنشاء شخصية`,edit:`تعديل الشخصية`,delete:`حذف الشخصية`,name:`الاسم`,description:`الوصف`,systemPrompt:`موجه النظام`,model:`النموذج`,avatar:`الصورة الرمزية`,background:`الخلفية`,noPersonas:`لم يتم إنشاء شخصيات`,createFirst:`أنشئ أول شخصية لتخصيص تجربة المحادثة`},gallery:{title:`المعرض`,subtitle:`معرض الصور المولدة بالذكاء الاصطناعي`,imageCount:`{{count}} صورة`,generate:`توليد صورة`,generateDescription:`إنشاء صور بالذكاء الاصطناعي`,generating:`جاري التوليد...`,prompt:`الموجه`,promptPlaceholder:`صف الصورة التي تريد توليدها...`,noImages:`لم يتم توليد صور بعد`,download:`تحميل`,delete:`حذف`,regenerate:`إعادة التوليد`,model:`النموذج`,size:`الحجم`,quality:`الجودة`,created:`تم الإنشاء`},errors:{generic:`حدث خطأ`,network:`خطأ في الشبكة. يرجى التحقق من الاتصال.`,unauthorized:`غير مصرح لك بتنفيذ هذا الإجراء.`,notFound:`لم يتم العثور على المورد المطلوب.`,serverError:`خطأ في الخادم. يرجى المحاولة لاحقاً.`,validation:`يرجى التحقق من المدخلات والمحاولة مرة أخرى.`},keyboard:{title:`اختصارات لوحة المفاتيح`,toggleSidebar:`تبديل الشريط الجانبي`,openSettings:`فتح الإعدادات`,toggleDarkMode:`تبديل الوضع الداكن`,showShortcuts:`إظهار اختصارات لوحة المفاتيح`,closeModals:`إغلاق النوافذ المنبثقة`,groups:{navigation:`التنقل`,general:`عام`,chat:`المحادثة`,workspace:`مساحة العمل`},actions:{sendMessage:`إرسال الرسالة`,newLine:`سطر جديد في الرسالة`,saveEdit:`حفظ الرسالة المعدّلة`,cancelEdit:`إلغاء التعديل`,saveFile:`حفظ الملف`,formatCode:`تنسيق الشيفرة`},description:`كل اختصارات لوحة المفاتيح المتاحة في Libre WebUI.`,newChat:`محادثة جديدة`,newWork:`جلسة عمل جديدة`,openPalette:`فتح لوحة الأوامر`},modelManager:{title:`النماذج`,loading:`جاري تحميل النماذج...`,systemStatus:{online:`Ollama متصل`,offline:`Ollama غير متصل`,models:`نموذج`,models_plural:`نماذج`,running:`قيد التشغيل`,vram:`VRAM`},sections:{pull:`سحب نموذج جديد`,library:`تصفح المكتبة`,running:`النماذج قيد التشغيل`,local:`النماذج المحلية`,advanced:`إجراءات متقدمة`,huggingface:`HuggingFace Hub`},pull:{placeholder:`أدخل اسم النموذج (مثل llama3.2:3b، deepseek-r1:14b)`,button:`سحب`,cancel:`إلغاء`,popular:`النماذج الشائعة:`,browseAll:`تصفح جميع النماذج على ollama.com`,success:`تم سحب النموذج {{name}} بنجاح`,cancelled:`تم إلغاء سحب النموذج`,failed:`فشل سحب النموذج`,enterName:`يرجى إدخال اسم النموذج`,restricted:`تثبيت النماذج مقصور على المسؤولين في هذا المثيل.`},progress:{starting:`جاري التهيئة...`,pulling:`جاري تحميل النموذج...`,pullingLayer:`تحميل`,verifying:`جاري التحقق من السلامة...`,verifyingDigest:`التحقق من تجزئة sha256`,writing:`جاري كتابة البيان...`,cleaning:`جاري التنظيف...`},library:{available:`متاح`,search:`البحث عن نماذج...`,noResults:`لم يتم العثور على نماذج تطابق معاييرك`,installed:`مثبت`,more:`+{{count}} المزيد`,refresh:`تحديث المكتبة`},local:{noModels:`لم يتم تثبيت نماذج بعد`,pullToStart:`اسحب نموذجاً أعلاه للبدء`,installed:`مثبت`,running:`قيد التشغيل`,info:`معلومات`,copy:`نسخ`,delete:`حذف`,deleteConfirm:`هل أنت متأكد من حذف النموذج "{{name}}"؟`,deleteSuccess:`تم حذف النموذج {{name}} بنجاح`,deleteFailed:`فشل حذف النموذج`},advanced:{createModel:`إنشاء نموذج`,fromModelfile:`من Modelfile`,copyModel:`نسخ نموذج`,duplicateExisting:`تكرار موجود`,testEmbeddings:`اختبار التضمينات`,generateVectors:`توليد المتجهات`,healthCheck:`فحص الصحة`,testConnection:`اختبار الاتصال`,healthy:`Ollama سليم!`},modals:{details:{title:`تفاصيل النموذج`,info:`معلومات النموذج`,family:`العائلة`,parameters:`المعلمات`,quantization:`التكميم`,format:`التنسيق`,systemPrompt:`موجه النظام`,template:`القالب`,license:`الترخيص`,modelfile:`Modelfile`,noDetails:`لا تتوفر تفاصيل`},copy:{title:`نسخ النموذج`,source:`النموذج المصدر`,selectModel:`اختر نموذجاً...`,newName:`اسم النموذج الجديد`,placeholder:`مثل my-custom-model`,copying:`جاري النسخ...`,button:`نسخ النموذج`,success:`تم نسخ النموذج إلى {{name}}`,failed:`فشل نسخ النموذج`,enterBoth:`يرجى إدخال أسماء المصدر والوجهة`},create:{title:`إنشاء نموذج مخصص`,name:`اسم النموذج`,namePlaceholder:`مثل my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
- SYSTEM You are a helpful assistant.`,see:`راجع`,docs:`توثيق Modelfile`,docsLink:`لمرجع الصيغة`,creating:`جاري الإنشاء...`,button:`إنشاء النموذج`,success:`تم إنشاء النموذج {{name}} بنجاح`,failed:`فشل إنشاء النموذج`,enterBoth:`يرجى إدخال اسم النموذج ومحتوى Modelfile`},embeddings:{title:`اختبار التضمينات`,model:`نموذج التضمين`,selectModel:`اختر نموذجاً...`,recommended:`موصى به: nomic-embed-text، mxbai-embed-large`,input:`نص الإدخال`,placeholder:`أدخل النص لتوليد التضمينات...`,generating:`جاري التوليد...`,button:`توليد التضمينات`,result:`النتيجة ({{count}} بُعد)`,success:`تم توليد متجه تضمين من {{count}} بُعد`,failed:`فشل توليد التضمينات`,enterBoth:`يرجى اختيار نموذج وإدخال نص`}},huggingface:{browseAll:`تصفح الكل على HuggingFace`,checkingGguf:`البحث عن ملفات GGUF...`,noGgufAvailable:`لا توجد ملفات GGUF متاحة للسحب المباشر من Ollama`,ggufFilesCount:`ملفات GGUF ({{count}}) - سحب مباشر إلى Ollama`,noModelsFound:`لم يتم العثور على نماذج`,noResults:`لم يتم العثور على نماذج. حاول تعديل البحث أو المرشحات.`,browseAllLink:`تصفح الكل`,search:`البحث في نماذج HuggingFace...`,by:`بواسطة`,gated:`وصول مقيد`,viewOnHF:`عرض على HuggingFace`,sortDownloads:`التنزيلات`,sortLikes:`الإعجابات`,sortRecent:`الأحدث`,taskTextGeneration:`توليد النص`,taskTextToSpeech:`تحويل النص إلى كلام`,taskTextToImage:`تحويل النص إلى صورة`,taskSpeechRecognition:`التعرف على الكلام`,tasks:{textGen:`توليد النص`,tts:`تحويل النص إلى كلام`,image:`تحويل النص إلى صورة`,stt:`التعرف على الكلام`},sort:{downloads:`الأكثر تنزيلاً`,likes:`الأكثر إعجاباً`,recent:`المحدثة مؤخراً`}}},personaManager:{title:`الشخصيات`,subtitle:`إنشاء وإدارة شخصيات الذكاء الاصطناعي مع شخصيات وذكريات وسلوكيات مخصصة`,loading:`جاري تحميل الشخصيات...`,createButton:`إنشاء شخصية`,importExport:`استيراد/تصدير`,stats:{title:`شخصياتك`,count:`تم إنشاء {{count}} شخصية`,count_plural:`تم إنشاء {{count}} شخصيات`},empty:{title:`لا توجد شخصيات بعد`,description:`أنشئ أول شخصية للبدء مع تفاعلات الذكاء الاصطناعي المخصصة`,button:`أنشئ شخصيتك الأولى`},deleteConfirm:`هل أنت متأكد من حذف "{{name}}"؟`,deleteSuccess:`تم حذف الشخصية "{{name}}" بنجاح`,downloadSuccess:`تم تحميل الشخصية "{{name}}" بنجاح`,failed:`فشل {{action}} الشخصية`},personaForm:{title:{create:`إنشاء شخصية جديدة`,edit:`تعديل الشخصية`},subtitle:{create:`أنشئ شخصية ذكاء اصطناعي جديدة مع شخصية مخصصة وأنظمة ذاكرة وقدرات تعلم تكيفية`,edit:`خصص شخصية الذكاء الاصطناعي مع ذاكرة متقدمة وتعلم تكيفي ومعلمات ذكية`},loading:`جاري تحميل النموذج...`,saved:`تم الحفظ`,tabs:{basic:`أساسي`,parameters:`المعلمات`,memory:`الذاكرة والتعلم`,advanced:`متقدم`},basic:{name:`الاسم`,namePlaceholder:`أدخل اسم الشخصية`,model:`النموذج`,selectModel:`اختر نموذجاً`,description:`الوصف`,descriptionPlaceholder:`صف شخصيتك...`,systemPrompt:`موجه النظام`,systemPromptPlaceholder:`أدخل موجه النظام الذي يحدد سلوك شخصيتك...`,systemPromptHint:`يحدد موجه النظام كيف ستتصرف شخصيتك وتستجيب.`},parameters:{temperature:`درجة الحرارة`,temperatureHint:`يتحكم في الإبداع مقابل الاتساق`,topP:`Top-P`,topPHint:`يتحكم في تنوع الاستجابة`,topK:`Top-K`,topKHint:`يحد المفردات لأعلى k رمز`,contextWindow:`نافذة السياق`,contextWindowHint:`الحد الأقصى لطول سجل المحادثة`,maxTokens:`الحد الأقصى للرموز`,maxTokensHint:`الحد الأقصى لطول الاستجابة`,repeatPenalty:`عقوبة التكرار`,repeatPenaltyHint:`يقلل الاستجابات المتكررة`},memory:{title:`نظام الذاكرة`,subtitle:`الشخصية تتذكر المحادثات بمرور الوقت`,enableHint:`فعّل نظام الذاكرة للسماح لشخصيتك بتذكر المحادثات وبناء السياق بمرور الوقت.`,loading:`جاري تحميل حالة الذاكرة...`,noData:`لا توجد بيانات ذاكرة بعد`,memories:`الذكريات`,mbUsed:`ميجابايت مستخدمة`,lastBackup:`آخر نسخة احتياطية`,never:`أبداً`,maxMemories:`الحد الأقصى للذكريات`,maxMemoriesHint:`كم ذكرى يمكن لهذه الشخصية تخزينها`,retention:`الاحتفاظ بالذاكرة`,retentionHint:`أيام الاحتفاظ بالذكريات قبل التنظيف`,autoCleanup:`تنظيف تلقائي للذكريات القديمة`,wipeAll:`مسح جميع الذكريات`,wipeCannot:`لا يمكن التراجع عن هذا`,wipeButton:`مسح`,wiping:`جاري المسح...`,wipeConfirm:`هل أنت متأكد من مسح جميع الذكريات؟ لا يمكن التراجع عن هذا.`,wipeSuccess:`تم مسح {{count}} ذكرى`},learning:{title:`التعلم التكيفي`,subtitle:`الشخصية تتطور بناءً على التفاعلات`,enableHint:`فعّل التعلم التكيفي للسماح لشخصيتك بالتطور وتخصيص الاستجابات بناءً على تفاعلاتك.`,speed:`سرعة التعلم`,slow:`بطيء`,slowDesc:`تغييرات تدريجية`,balanced:`متوازن`,balancedDesc:`وتيرة معتدلة`,fast:`سريع`,fastDesc:`تكيف سريع`,autoAdapt:`التكيف التلقائي مع تفضيلات المستخدم`,whatLearns:`ما تتعلمه الشخصية:`,conversationTone:`نبرة المحادثة`,responseStyle:`أسلوب الاستجابة`,userPreferences:`تفضيلات المستخدم`,topicInterests:`اهتمامات الموضوع`},advanced:{embeddingModel:`نموذج التضمين`,embeddingHint:`اختر النموذج المستخدم لتشفير الذاكرة والبحث الدلالي. يتم عرض نماذج التضمين أولاً، تليها النماذج الأخرى المتاحة.`,noModels:`لم يتم العثور على نماذج`,embeddingModels:`نماذج التضمين`,otherModels:`نماذج أخرى`,installHint:`ثبّت نموذج تضمين:`,recommended:`موصى به: nomic-embed-text، mxbai-embed-large، bge-m3، snowflake-arctic-embed`,aboutTitle:`حول الإعدادات المتقدمة`,aboutDescription:`يُستخدم نموذج التضمين بواسطة نظام الذاكرة لفهم المعنى الدلالي والعثور على الذكريات ذات الصلة أثناء المحادثات. اختر نموذجاً يتناسب مع حالة استخدامك والموارد المتاحة.`},actions:{cancel:`إلغاء`,save:`حفظ`,saving:`جاري الحفظ...`,saveClose:`حفظ وإغلاق`,create:`إنشاء`},success:{created:`تم إنشاء الشخصية`,updated:`تم تحديث الشخصية`},error:{saveFailed:`فشل الحفظ`}},personaCard:{enhanced:`محسّن`,systemPrompt:`موجه النظام`,memories:`ذكريات`,use:`استخدام`,editTooltip:`تعديل الشخصية`,downloadTooltip:`تحميل الشخصية`,backup:`نسخة احتياطية`,exportDNA:`تصدير DNA`,wipeMemories:`مسح الذكريات`,wipeConfirm:`هل أنت متأكد من مسح جميع ذكريات هذه الشخصية؟ لا يمكن التراجع عن هذا الإجراء.`,wipeSuccess:`تم مسح {{count}} ذكرى`,backupSuccess:`تم تحميل نسخة الشخصية الاحتياطية بنجاح`,dnaSuccess:`تم تصدير DNA الشخصية بنجاح`,failed:`فشل {{action}}`},userManager:{title:`إدارة المستخدمين`,subtitle:`إدارة حسابات المستخدمين والصلاحيات`,pageDescription:`إدارة حسابات المستخدمين والأذونات وعناصر التحكم في الوصول لمثيل Libre WebUI الخاص بك.`,loading:`جاري تحميل المستخدمين...`,createUser:`إنشاء مستخدم`,search:`البحث عن مستخدمين...`,noUsers:`لم يتم العثور على مستخدمين`,noUsersMatching:`لا يوجد مستخدمون يطابقون بحثك`,columns:{user:`المستخدم`,email:`البريد الإلكتروني`,role:`الدور`,created:`تم الإنشاء`,actions:`الإجراءات`},roles:{admin:`مسؤول`,user:`مستخدم`},noEmail:`لا يوجد بريد إلكتروني`,deleteConfirm:`هل أنت متأكد من حذف المستخدم "{{name}}"؟`,deleteSuccess:`تم حذف المستخدم بنجاح`,deleteFailed:`فشل حذف المستخدم`,cannotDeleteSelf:`لا يمكنك حذف حسابك الخاص`,form:{title:{create:`إنشاء مستخدم`,edit:`تعديل المستخدم`},username:`اسم المستخدم`,usernamePlaceholder:`أدخل اسم المستخدم`,email:`البريد الإلكتروني`,emailPlaceholder:`أدخل البريد الإلكتروني (اختياري)`,password:`كلمة المرور`,passwordPlaceholder:`أدخل كلمة المرور`,passwordHint:`اتركها فارغة للاحتفاظ بكلمة المرور الحالية`,role:`الدور`,creating:`جاري الإنشاء...`,updating:`جاري التحديث...`,createButton:`إنشاء مستخدم`,updateButton:`تحديث المستخدم`,createSuccess:`تم إنشاء المستخدم بنجاح`,updateSuccess:`تم تحديث المستخدم بنجاح`,createFailed:`فشل إنشاء المستخدم`,updateFailed:`فشل تحديث المستخدم`},approval:{title:`الموافقات المعلقة`,description:`راجع التسجيلات الجديدة قبل السماح لها بالدخول إلى هذا المثيل.`,registered:`مسجل`,activate:`تفعيل الحساب`,reject:`رفض التسجيل`,approved:`يمكن لـ {{name}} الآن تسجيل الدخول.`,failed:`تعذر الموافقة على الحساب.`,notification:`{{count}} تسجيل ينتظر موافقتك.`,notificationBadge:`{{count}} موافقات مستخدمين معلقة`},workAccess:{title:`الوصول إلى Work`,description:`السماح لجميع المستخدمين النشطين بإنشاء مهام Work وتشغيلها في بيئات معزولة. يتمتع المسؤولون بالوصول دائمًا؛ وتبقى مجلدات المضيف مقصورة على المسؤولين.`,saved:`تم تحديث الوصول إلى Work`,saveFailed:`تعذر تحديث الوصول إلى Work`},workPolicies:{title:`سياسات Work`,description:`إعدادات تشغيل مسماة (الصورة، الحدود، الإيقاف عند الخمول) يمكن إنشاء المهام وفقها. الحقول الفارغة ترث الإعدادات العامة.`,add:`إضافة سياسة`,name:`الاسم`,image:`الصورة`,memory:`الذاكرة`,cpu:`المعالجات`,pids:`حد PID`,workspaceSize:`حجم مساحة العمل`,idleMinutes:`الإيقاف عند الخمول (دقائق)`,networkDefault:`الشبكة الافتراضية`,networkInherit:`وراثة الافتراضي`,networkOn:`مفعّلة`,networkOff:`معطّلة`,save:`حفظ`,cancel:`إلغاء`,edit:`تعديل السياسة`,delete:`حذف السياسة`,deleteConfirm:`هل تريد حذف هذه السياسة؟ ستعود المهام التي تستخدمها إلى الإعدادات العامة.`,empty:`لا توجد سياسات بعد. تستخدم المهام إعدادات التشغيل العامة.`,saved:`تم حفظ سياسة Work`,deleted:`تم حذف سياسة Work`,failed:`تعذر حفظ سياسة Work`,invalidNumber:`يجب أن يكون حد PID والإيقاف عند الخمول أرقامًا.`},modelAccess:{title:`تنزيل النماذج`,description:`السماح لجميع المستخدمين النشطين بسحب النماذج من Ollama ومتصفح Hugging Face. يمكن للمسؤولين دائمًا تنزيل النماذج.`,saved:`تم تحديث صلاحية تنزيل النماذج`,saveFailed:`تعذر تحديث صلاحية تنزيل النماذج`},webSearchAccess:{title:`البحث في الويب`,description:`السماح لجميع المستخدمين النشطين باستخدام البحث في الويب في المحادثات ومهام Work. يمكن للمسؤولين استخدامه دائمًا. يُهيأ المحرك في الإعدادات > البحث.`,saved:`تم تحديث صلاحية البحث في الويب`,saveFailed:`تعذر تحديث صلاحية البحث في الويب`},agentAccess:{title:`الوكلاء`,description:`إتاحة قسم الوكلاء (Libre Claw) للمسؤولين. تعمل واجهات الوكلاء على المضيف بهوية مستخدم الخادم، خارج بيئة Work المعزولة.`,saved:`تم تحديث الوصول إلى الوكلاء`,saveFailed:`تعذر تحديث الوصول إلى الوكلاء`,lockedByEnv:`مثبَّت بواسطة متغير البيئة AGENT_CLI_MODELS_ENABLED.`}},chatHistory:{label:`سجل المحادثة`,jumpToTurn:`الانتقال إلى الدور {{index}} من {{total}}`},chatMessage:{you:`أنت`,assistant:`المساعد`,system:`النظام`,copy:`نسخ`,copyMessage:`نسخ الرسالة`,copied:`تم النسخ!`,regenerate:`إعادة التوليد`,regenerateResponse:`إعادة توليد الاستجابة`,edit:`تعديل`,editSystemMessage:`تعديل رسالة النظام`,saveChanges:`حفظ التغييرات`,cancelEditing:`إلغاء التعديل`,saveAndSubmit:`حفظ وإرسال`,goodResponse:`رد جيد`,badResponse:`رد سيئ`,delete:`حذف`,deleteConfirm:`حذف هذه الرسالة؟`,branch:`تفرع`,speaking:`جاري التحدث...`,speakMessage:`نطق الرسالة`,stopSpeaking:`إيقاف التحدث`,showMore:`عرض المزيد`,showLess:`عرض أقل`,thinking:`يفكر`,thoughtFor:`فكّر لمدة {{duration}}`,hiddenLines:`الأسطر المخفية: {{count}}`,systemMessagePlaceholder:`أدخل رسالة النظام...`,fullSizeImage:`صورة بالحجم الكامل`,startConversation:`ابدأ محادثة`,startConversationDescription:`أرسل رسالة للبدء في الدردشة مع مساعدك الذكي. اطرح أسئلة، احصل على مساعدة في البرمجة، أو أجرِ محادثة طبيعية.`,scrollToBottom:`انتقل إلى الأسفل`,newMessages:`رسائل جديدة`},imageGallery:{title:`معرض الصور`,noImages:`لا توجد صور بعد`,noImagesHint:`ولّد أول صورة باستخدام اللوحة على اليمين`,delete:`حذف`,download:`تحميل`,deleteConfirm:`هل أنت متأكد من حذف هذه الصورة؟`,deleteSuccess:`تم حذف الصورة`,deleteFailed:`فشل حذف الصورة`,downloadFailed:`فشل تحميل الصورة`,loadMore:`تحميل المزيد ({{current}} من {{total}})`,loadFailed:`فشل تحميل المعرض`},imageGeneration:{title:`توليد صورة`,prompt:`الموجه`,promptPlaceholder:`صف الصورة التي تريد إنشاءها...`,model:`النموذج`,selectModel:`اختر نموذجاً`,noModels:`لا توجد نماذج توليد صور متاحة`,configurePlugin:`قم بإعداد إضافة مع دعم توليد الصور`,size:`الحجم`,quality:`الجودة`,style:`الأسلوب`,generate:`توليد`,generating:`جاري التوليد...`,success:`تم توليد الصورة بنجاح`,failed:`فشل توليد الصورة`,enterPrompt:`يرجى إدخال موجه`,promptTooLong:`يتجاوز النص الحد الأقصى البالغ {{max}} حرف`},errorBoundary:{title:`حدث خطأ ما`,description:`واجهنا خطأ غير متوقع. يرجى تحديث الصفحة.`,tryAgain:`تحديث الصفحة`,goHome:`الذهاب للرئيسية`,errorDetails:`تفاصيل الخطأ (التطوير)`},documents:{title:`المستندات`,upload:`رفع مستند`,uploading:`جاري الرفع...`,noDocuments:`لم يتم رفع مستندات`,uploadHint:`ارفع مستندات لاستخدامها في محادثاتك`,delete:`حذف`,deleteConfirm:`هل أنت متأكد من حذف هذا المستند؟`,deleteSuccess:`تم حذف المستند`,deleteFailed:`فشل حذف المستند`,uploadSuccess:`تم رفع المستند بنجاح`,uploadFailed:`فشل رفع المستند`,types:`مدعوم: PDF، TXT، MD، DOCX`,unsupportedFileType:`يتم دعم ملفات PDF وTXT فقط`,fileSizeTooLarge:`يجب أن يكون حجم الملف أقل من 10 ميجابايت`,uploadSuccessWithName:`تم رفع المستند "{{name}}" بنجاح`,removeSuccess:`تم إزالة المستند بنجاح`,removeFailed:`فشل إزالة المستند`,removeError:`حدث خطأ أثناء إزالة المستند`,clickToUpload:`انقر للرفع`,orDragAndDrop:`أو اسحب وأفلت`,fileTypesAndSize:`ملفات PDF أو TXT حتى 10 ميجابايت`,uploadedDocuments:`المستندات المرفوعة`,removeDocument:`إزالة المستند`},ttsButton:{speak:`تحدث`,stop:`إيقاف`,speaking:`جاري التحدث...`,generateFailed:`فشل توليد الكلام`,playbackFailed:`فشل تشغيل الصوت`,stopSpeaking:`إيقاف التحدث`,generatingSpeech:`جاري توليد الكلام...`,readAloud:`قراءة بصوت عالٍ`},artifacts:{title:`المخرجات`,code:`الكود`,preview:`معاينة`,copy:`نسخ الكود`,copied:`تم النسخ!`,download:`تحميل`,expand:`توسيع`,collapse:`طي`,openInNewTab:`فتح في علامة تبويب جديدة`,invalidSvg:`محتوى SVG غير صالح`,invalidJson:`محتوى JSON غير صالح`,previewMode:`وضع المعاينة`,codeMode:`وضع الكود`,copyContent:`نسخ المحتوى`,openInPanel:`فتح في اللوحة`,openInNewWindow:`فتح في نافذة جديدة`,created:`تم الإنشاء`,closePanelEsc:`إغلاق اللوحة (Esc)`,copyButton:`نسخ`,open:`فتح`,dragEdgeToResize:`اسحب الحافة لتغيير الحجم`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`الإصدار {{current}} من {{total}}`,previousVersion:`الإصدار السابق`,nextVersion:`الإصدار التالي`},personaImportExport:{title:`استيراد وتصدير الشخصيات`,description:`صدّر شخصياتك لمشاركتها أو استورد شخصيات من الآخرين`,exportPersonas:`تصدير الشخصيات`,importPersonas:`استيراد الشخصيات`,noPersonasToExport:`لا توجد شخصيات للتصدير`,personasAvailable:`{{count}} شخصية متاحة`,personasAvailable_plural:`{{count}} شخصيات متاحة`,exportAll:`تصدير الكل`,uploadJsonFile:`رفع ملف JSON`,pasteJsonLabel:`لصق بيانات JSON`,pasteJsonPlaceholder:`الصق بيانات JSON للشخصية هنا...`,importing:`جاري الاستيراد...`,importButton:`استيراد الشخصية/الشخصيات`,expectedFormat:`تنسيق JSON المتوقع:`,exportSuccess:`تم تصدير الشخصية "{{name}}" بنجاح`,exportFailed:`فشل تصدير الشخصية`,exportAllSuccess:`تم تصدير جميع الشخصيات {{count}} بنجاح`,exportAllFailed:`فشل تصدير الشخصيات`,pasteJsonData:`يرجى لصق بيانات JSON للشخصية`,importMultipleSuccess:`تم استيراد {{count}} شخصيات بنجاح`,importMultipleFailed:`فشل استيراد {{count}} شخصيات`,importNoneFailed:`فشل استيراد أي شخصيات`,importSuccess:`تم استيراد الشخصية بنجاح`,importFailed:`فشل استيراد الشخصية`},generationStats:{details:`التفاصيل`,promptTokens:`رموز الإدخال:`,generatedTokens:`الرموز المولدة:`,totalTokens:`إجمالي الرموز:`,speed:`السرعة:`,promptEval:`تقييم الإدخال:`,generation:`التوليد:`,modelLoad:`تحميل النموذج:`,totalTime:`الوقت الإجمالي:`,generatedAt:`تم التوليد في:`},userMenu:{loggedOut:`تم تسجيل الخروج بنجاح`,pictureUpdated:`تم تحديث صورة الملف الشخصي`,failedUpdateAvatar:`فشل تحديث الصورة الرمزية`,failedUpdatePicture:`فشل تحديث صورة الملف الشخصي`,noEmail:`لم يتم تقديم بريد إلكتروني`,changePicture:`تغيير الصورة`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,signOut:`تسجيل الخروج`,changeProfilePicture:`تغيير صورة الملف الشخصي`},pluginManager:{title:`مدير الإضافات`,upload:`تحميل`,addJson:`إضافة JSON`,browseHF:`تصفح HF Hub`,confirmDelete:`هل أنت متأكد من حذف هذا الإضافة؟`,uploading:`جاري تحميل الإضافة...`,pasteJson:`الصق JSON الإضافة هنا...`,installPlugin:`تثبيت الإضافة`,loading:`جاري تحميل الإضافات...`,noPlugins:`لم يتم تثبيت أي إضافة`,noPluginsDescription:`قم بتحميل ملف إضافة أو أضف إضافة من JSON للبدء.`,active:`نشط`,id:`المعرف`,endpoint:`نقطة النهاية`,activate:`تفعيل`,deactivate:`تعطيل`,activePlugin:`الإضافة النشطة`,activePluginDescription:`سيتم توجيه جميع طلبات الدردشة عبر هذه الإضافة`,variables:{title:`المتغيرات`,save:`حفظ`,saving:`جاري الحفظ...`,saved:`تم حفظ المتغيرات`,saveFailed:`فشل حفظ المتغيرات`,resetDefaults:`إعادة التعيين للافتراضي`,reset:`تم إعادة تعيين المتغيرات`,sensitiveSet:`تم تعيين القيمة (أدخل قيمة جديدة للتغيير)`,resetFailed:`فشل إعادة تعيين المتغيرات`,showValue:`إظهار قيمة {{label}}`,hideValue:`إخفاء قيمة {{label}}`,connection:`اتصال`,advanced:`معلمات متقدمة`,inherited:`استخدام افتراضي للمزود`,inheritedValue:`استخدام افتراضي للمزود ({{value}})`,enabled:`ممكّن`,disabled:`معطّل`,required:`القيمة مطلوبة`,fullApiEndpoint:`URL كامل لنقطة نهاية API`,endpointHelp:`أدخل URL الطلب الكامل، بما في ذلك مسار العملية الخاص به (على سبيل المثال، /v1/chat/completions)، وليس فقط URL الأساسي للمزود.`,invalidUrl:`أدخل URL كامل وصالح لنقطة نهاية API، على سبيل المثال https://provider.example/v1/chat/completions`,insecureUrl:`يجب أن تستخدم نقاط نهاية API بروتوكول HTTP أو HTTPS.`,httpWarning:`لا يقوم HTTP بتشفير بيانات الاعتماد أو حركة المرور. استخدمه فقط على شبكة موثوقة.`,invalidBaseUrl:`لا يمكن أن تحتوي عناوين URL الأساسية على سلسلة استعلام أو جزء.`,invalidApiPath:`يجب أن يبدأ بـ / وألا يحتوي على URL أو استعلام أو جزء أو مقطع ..`,tooLong:`القيمة طويلة جدًا`}},huggingface:{title:`متصفح نماذج HuggingFace`,subtitle:`تصفح واختيار النماذج من المركز`,searchPlaceholder:`البحث عن نماذج...`,filters:`عوامل التصفية`,task:`المهمة`,sortBy:`ترتيب حسب`,noModels:`لم يتم العثور على نماذج`,adjustSearch:`حاول ضبط البحث أو عوامل التصفية`,gated:`مقيد`,selected:`محدد`,select:`اختيار`,refresh:`تحديث`,modelsFound:`نماذج موجودة`},demoMode:{title:`وضع تجريبي`,github:`GitHub`},personaBackground:{label:`صورة الخلفية`,uploadBackgroundImage:`رفع صورة الخلفية`,dragAndDrop:`اسحب وأفلت صورة أو انقر للتصفح`,chooseImage:`اختيار صورة`,uploading:`جارٍ الرفع...`,enterImageUrl:`أو أدخل رابط الصورة`,supportedFormats:`يدعم: JPG, PNG, GIF, WebP (الحد الأقصى 5 ميجابايت). الصور العريضة الأفقية تعمل بشكل أفضل.`,customBackground:`صورة خلفية مخصصة`,clickToChange:`انقر للتغيير أو الإزالة`,removed:`تم إزالة الخلفية`,uploaded:`تم رفع الخلفية بنجاح`,invalidFile:`يرجى اختيار ملف صورة صالح`,fileTooLarge:`يجب أن يكون حجم صورة الخلفية أقل من 5 ميجابايت`,readFailed:`فشل في قراءة ملف الصورة`,uploadFailed:`فشل في رفع صورة الخلفية`},modelSelector:{searchInstalled:`البحث في النماذج المثبتة...`,searchOllama:`البحث في مكتبة Ollama...`,searchHuggingFace:`البحث في HuggingFace...`,selectModel:`اختر نموذجًا`,personas:`الشخصيات`,ollamaModels:`نماذج Ollama`,pluginModels:`نماذج الإضافات`,actions:`الإجراءات`,installed:`مثبت`,use:`استخدام`,pull:`تنزيل`,pullRestricted:`تثبيت النماذج مقصور على المسؤولين في هذا المثيل.`,adminOnlyPull:`للمسؤولين فقط`,legacyProvider:`المزود غير مسجل`,providerNotRecorded:`المزود غير مسجل`,providerUnavailable:`المزود غير متاح`,reselectProvider:`أعد اختيار مزود لتثبيت هذا النموذج`,unavailable:`غير متاح`,unavailableSelections:`اختيارات غير متاحة`,agentModels:`الوكلاء`},libreClaw:{title:`الوكلاء`,subtitle:`يعمل الوكيل المحلي والموافقات والجداول الزمنية والذاكرة والأدوات والاستخدام.`,dashboard:`لوحة المعلومات`,connection:{disconnectedTitle:`خدمة Libre Claw غير متصلة`,disconnectedDescription:`ابدأ تشغيله محليًا باستخدام <command>libre-claw start</command> أو قم بتعيين <env>LIBRE_CLAW_BASE_URL</env> في بيئة الواجهة الخلفية.`},status:{connected:`متصل`,disconnected:`غير متصل`,activeRuns:`{{count}} نشط`,activeRuns_plural:`{{count}} نشط`},states:{queued:`في قائمة الانتظار`,running:`قيد التشغيل`,blocked:`محظور`,done:`تم`,failed:`فشل`,cancelled:`تم الإلغاء`},startRun:{title:`بدء تشغيل الوكيل`,placeholder:`اطلب من Libre Claw فحص الريبو، أو إصلاح الخلل، أو إجراء مراجعة، أو جدولة تقرير...`,chatRun:`تشغيل الدردشة`,goalMode:`وضع الهدف`,providerOverride:`تجاوز الموفر`,modelOverride:`تجاوز النموذج`,run:`تشغيل`},modelRoute:{title:`الطريق النموذجي`,providerPlaceholder:`مزود`,modelPlaceholder:`نموذج`,persistGlobal:`استمر في Libre Claw التكوين العام`,saveModel:`حفظ النموذج`,theme:`سمة Libre Claw`,saveTheme:`حفظ الموضوع`},runs:{title:`التشغيلات`,empty:`لا توجد تشغيلات Libre Claw بعد.`},timeline:{title:`الخط الزمني للتشغيل`,empty:`حدد تشغيلًا لتفقد أحداثه.`,streaming:`الجري...`,assistantResponse:`رد مساعد`,resultOk:`حسنا`,resultError:`خطأ`,labels:{userMessage:`رسالة المستخدم`,toolCall:`استدعاء الأداة`,toolResult:`نتيجة الأداة`,approvalRequest:`طلب الموافقة`,approvalResponse:`رد الموافقة`,runStarted:`بدأ التشغيل`,runFinished:`انتهى التشغيل`,usage:`الاستخدام`,error:`خطأ`}},approvals:{needed:`الموافقة مطلوبة`,allowOnce:`السماح مرة واحدة`,alwaysAllowTool:`السماح دائمًا بالأداة`,deny:`رفض`,toolApprovalRequested:`تم طلب الموافقة على الأداة`},automations:{title:`الأتمتة`,namePlaceholder:`الاسم`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`موجه الأتمتة`,create:`إنشاء`,empty:`لا توجد عمليات أتمتة مجدولة Libre Claw.`,runNow:`تشغيل الآن`,pause:`وقفة`,resume:`استئناف`,routes:{report:`تقرير`,telegram:`Telegram`},status:{active:`نشط`,paused:`متوقف مؤقتًا`}},usageFallback:{title:`الاستخدام والاحتياطي`,usage:`الاستخدام`,fallbackRoute:`الطريق الاحتياطي`,noUsage:`لا توجد سجلات استخدام حتى الآن.`},metrics:{provider:`مزود`,model:`نموذج`,input:`الإدخال`,output:`الإخراج`,cached:`مخبأة`,reasoning:`المنطق`,cost:`التكلفة`,tool:`أداة`,resolution:`القرار`,state:`الحالة`,stopReason:`سبب التوقف`,tokens:`{{formatted}} رمز مميز`,tokens_plural:`{{formatted}} الرموز`},fallbacks:{tool:`أداة`,unknown:`غير معروف`,resolved:`حلها`,unknownError:`خطأ غير معروف`},toasts:{loadStatusFailed:`لا يمكن تحميل حالة Libre Claw`,enterTask:`أدخل مهمة لـ Libre Claw`,runStarted:`بدأ تشغيل Libre Claw`,startRunFailed:`تعذر بدء تشغيل Libre Claw`,runCancelled:`تم إلغاء التشغيل`,cancelRunFailed:`تعذر إلغاء التشغيل`,approved:`تمت الموافقة عليه`,denied:`مرفوض`,resolvePermissionFailed:`لا يمكن حل الإذن`,providerModelRequired:`مطلوب الموفر والنموذج`,modelUpdated:`تم تحديث نموذج Libre Claw`,updateModelFailed:`لا يمكن تحديث النموذج`,themeUpdated:`تم تحديث سمة Libre Claw`,updateThemeFailed:`لا يمكن تحديث الموضوع`,automationRequired:`مطلوب اسم الأتمتة والجدول الزمني والموجه`,automationCreated:`تم إنشاء الأتمتة`,createAutomationFailed:`لا يمكن إنشاء الأتمتة`,automationUpdated:`تم تحديث الأتمتة`,updateAutomationFailed:`لا يمكن تحديث الأتمتة`}},work:{title:`العمل`,subtitle:`مساحات عمل معزولة للنماذج`,tasks:{title:`مهام العمل`,subtitle:`مساحات عمل محلية دائمة`,new:`مهمة جديدة`,emptyTitle:`لا توجد مهام عمل بعد`,empty:`ستظهر مهام العمل هنا بعد إرسال الرسالة الأولى.`,untitled:`مهمة بلا عنوان`,actions:`إجراءات المهمة`,delete:`حذف المهمة`,deleteNamed:`حذف ⁨{{title}}⁩`,deleteConfirm:`هل تريد حذف «⁨{{title}}⁩» ومساحة عملها نهائيًا؟`,close:`إغلاق مهام العمل`,open:`فتح مهام العمل`,rename:`عنوان المهمة`,loading:`جارٍ تحميل المهمة…`,notFound:`مهمة العمل هذه غير متاحة`,back:`بدء مهمة جديدة`,status:`الحالة: {{status}}`},landing:{title:`بدء مهمة عمل جديدة`,description:`امنح نموذجًا محليًا أو تابعًا لمزوّد مُعدّ مساحة عمل دائمة ومعزولة. يمكنه فحص الملفات وتشغيل الأدوات والمتابعة من حيث توقف عند عودتك.`,isolated:`معزولة`,isolatedBody:`لكل مهمة حاويتها وملفاتها الخاصة.`,durable:`دائمة`,durableBody:`يمكنك العودة إلى محادثتها ومساحة عملها لاحقًا.`,controlled:`مضبوطة`,controlledBody:`تبقى بيئة التشغيل وملفات المهمة معزولة عن النظام المضيف.`},composer:{placeholder:`صِف ما تريد بناءه أو تغييره…`,model:`نموذج العمل`,noModels:`لا توجد نماذج متوافقة مع وضع العمل`,cancel:`إيقاف`,send:`تشغيل`,hint:`تحتفظ كل مهمة بملفاتها وسجلها الخاصين. راجع مخرجات النموذج قبل استخدامها.`,remoteTitle:`مزوّد بعيد`,remoteHint:`تُرسل المحادثة ومخرجات الأدوات إلى الخدمة المُعدّة. قد يجري التشغيل المستقل الواحد عدة اتصالات بالمزوّد وقد تترتب عليه رسوم. تبقى ملفات مساحة العمل محلية ما لم تُرجع إحدى الأدوات محتوياتها.`,remoteDismiss:`تجاهل`,remoteDismissLabel:`تجاهل إشعار المزوّد البعيد`,remoteDismissFailed:`تعذّر حفظ تفضيل المزوّد البعيد.`,noModelSelected:`لم يتم اختيار نموذج متوافق مع وضع العمل.`},conversation:{ready:`مساحة العمل جاهزة`,empty:`تابع المهمة أدناه. تظل هذه المحادثة وملفاتها مرتبطة بمساحة العمل هذه.`,loadOlder:`تحميل الرسائل الأقدم`},status:{preparing:`جارٍ تجهيز مساحة العمل المعزولة…`,running:`جارٍ العمل داخل مساحة العمل المحلية…`},statusLabels:{idle:`خامل`,thinking:`يفكّر`,complete:`مكتمل`,needsInput:`بحاجة إلى إدخال`,error:`خطأ`},live:{connecting:`جارٍ الاتصال بالتحديثات المباشرة…`,reconnecting:`جارٍ إعادة الاتصال بالتحديثات المباشرة…`,unavailable:`التحديثات المباشرة غير متاحة`,newActivity:`نشاط جديد`,skillsLoaded:`مهارات مساحة العمل · {{count}}`},runtime:{unavailable:`بيئة التشغيل غير متاحة`,ready:`بيئة التشغيل جاهزة`,readyOllama:`Docker جاهز`,readyPlugin:`Docker والمكوّن الإضافي جاهزان`,readyHybrid:`Docker والنماذج جاهزة`,reason:`يلزم توفر Docker ومزوّد نماذج متاح عبر Ollama أو مكوّن إضافي.`},workspace:{label:`طرق عرض مساحة العمل`,files:`الملفات`,activity:`النشاط`,preview:`المعاينة`,resize:`تغيير حجم المحادثة ومساحة العمل`,resizeHint:`اسحب لتغيير الحجم. استخدم مفاتيح الأسهم للتحكم الدقيق. انقر نقرًا مزدوجًا أو اضغط Enter لإعادة التعيين.`,splitSize:`المحادثة {{conversation}}٪، مساحة العمل {{workspace}}٪`,terminal:`الطرفية`,git:`Git`},files:{discard:`هل تريد تجاهل التغييرات غير المحفوظة في الملف؟`,leaveWithDraft:`هل تريد مغادرة هذا الملف؟ سيبقى تعديلك غير المحفوظ كمسودة في المتصفح.`,up:`المجلد الأصل`,back:`العودة إلى الملفات`,empty:`لا توجد ملفات في هذا المجلد بعد.`,select:`اختر ملفًا لفحصه وتعديله.`,editorLabel:`محرر الملف: {{path}}`,format:`تنسيق`,formatted:`تم تنسيق الشيفرة.`,formatFailed:`تعذّر تنسيق هذا الملف.`,formatShortcut:`تنسيق (Shift+Alt+F)`,formatTooLarge:`يقتصر التنسيق على الملفات التي تقل عن 100,000 محرف و4,000 سطر.`,formatUnsupported:`التنسيق غير متاح لهذا النوع من الملفات.`,saveShortcut:`حفظ (⌘/Ctrl+S)`,highlightPaused:`تم إيقاف التمييز المباشر مؤقتًا للملفات الكبيرة للحفاظ على استجابة المحرر.`,plainTextLarge:`نص عادي · ملف كبير`,changes:`التغييرات`,changesSince:`ما تغيّر منذ الدور الأخير`,diffLabel:`التغييرات منذ الدور الأخير: {{path}}`,diffFolded:`{{count}} سطرًا دون تغيير`},activity:{empty:`ستظهر الأوامر وعمليات الملفات ونتائج الأدوات هنا.`,toolActivity:`نشاط الأداة`,details:`التفاصيل`,kinds:{message:`رسالة`,toolCall:`استدعاء أداة`,toolResult:`نتيجة أداة`,error:`خطأ`}},preview:{command:`أمر تشغيل اختياري`,start:`بدء المعاينة`,stop:`إيقاف المعاينة`,open:`فتح`,starting:`جارٍ بدء المعاينة…`,frameTitle:`معاينة مساحة العمل`,failed:`تعذّر بدء المعاينة. راجع «النشاط»، ثم جرّب أمرًا آخر.`,empty:`شغّل التطبيق داخل مساحة العمل هذه لمعاينته هنا.`},mobile:{surface:`واجهة المهمة`,conversation:`المحادثة`,workspace:`مساحة العمل`},toasts:{runFailed:`تعذّر بدء مهمة العمل.`,updateFailed:`تعذّر تحديث هذه المهمة.`,renameFailed:`تعذّر تغيير اسم هذه المهمة.`,cancelled:`تم إيقاف تشغيل المهمة.`,cancelFailed:`تعذّر إيقاف تشغيل المهمة.`,deleteFailed:`تعذّر حذف مهمة العمل هذه.`,saveFailed:`تعذّر حفظ هذا الملف.`,saved:`تم حفظ الملف.`,previewFailed:`تعذّر بدء المعاينة.`,previewStopFailed:`تعذّر إيقاف المعاينة.`},terminal:{connecting:`جارٍ فتح صدفة داخل بيئة العزل…`,closed:`انتهت جلسة الطرفية.`,failed:`تعذّر بدء جلسة الطرفية.`,reconnect:`إعادة الاتصال`,unavailable:`الطرفية التفاعلية غير متاحة في هذا النشر.`,blockedByRun:`النموذج يستخدم هذه الحاوية. تفتح الطرفية عند انتهاء الدور.`,taskRunning:`دور النموذج قيد التنفيذ`},policy:{label:`سياسة التشغيل`,default:`افتراضي (الحدود العامة)`},git:{actionFailed:`فشل إجراء Git.`,blockedByPreview:`أوقف المعاينة قبل تغيير حالة Git.`,blockedByRun:`تتاح إجراءات الكتابة في Git بعد انتهاء دور النموذج.`,branchCreated:`تم إنشاء {{name}}.`,branchSwitched:`تم التبديل إلى {{name}}.`,clean:`شجرة العمل نظيفة.`,commit:`إيداع التغييرات المجهزة`,commitMessage:`رسالة الإيداع`,committed:`تم إنشاء الإيداع.`,detached:`HEAD منفصل`,diff:`معاينة الفرق`,diffFailed:`تعذر تحميل هذا الفرق.`,history:`السجل المحلي`,initialize:`تهيئة Git`,initializeDescription:`أنشئ مستودعًا محليًا للحالة والفروق والفروع والإيداعات. لا تُربط أي بيانات اعتماد بعيدة.`,initialized:`تمت تهيئة مستودع Git.`,loadFailed:`تعذر تحميل حالة Git.`,localOnly:`Git محلي فقط. يتطلب الدفع والسحب وطلبات الدمج وسيط اعتماد موثوقًا منفصلًا.`,newBranch:`فرع محلي جديد`,noCommits:`لا توجد إيداعات بعد.`,noDiff:`لا يوجد فرق نصي بعد. تظهر الملفات غير المتتبعة بعد التجهيز.`,notInitialized:`لم تتم تهيئة Git`,selectChange:`اختر ملفًا معدلًا لفحص فرقه.`,selectPath:`اختيار {{path}}`,stageAll:`تجهيز الكل`,stageSelected:`تجهيز {{count}}`,staged:`تم تجهيز التغييرات.`,switchBranch:`تبديل الفرع المحلي`,changes:`التغييرات`,createBranch:`إنشاء`},hostWorkspace:{hint:`اتركه فارغًا لمساحة عمل معزولة، أو وجّه المهمة إلى مجلد على هذا الجهاز.`,label:`مجلد مساحة العمل (اختياري)`,warning:`يمكن للمهمة قراءة هذا المجلد والكتابة فيه مباشرة. اتركه فارغًا لاستخدام مساحة عمل معزولة.`}},usageAnalytics:{eyebrow:`الإدارة`,title:`استخدام المزود`,description:`تابع مكالمات API الصادرة واستهلاك النماذج عبر الإضافات الممكّنة في هذا المثيل.`,days:`{{count}} أيام`,refresh:`تحديث الاستخدام`,loadFailed:`تعذر تحميل استخدام المزود.`,metrics:{calls:`المكالمات`,tokens:`الرموز`},cards:{calls:`مكالمات API`,callsDetail:`عبر {{count}} مستخدم نشط`,tokens:`الرموز المُبلغ عنها`,tokensDetail:`الاستخدام المُبلغ عنه في {{count}} مكالمة`,success:`معدل النجاح`,successDetail:`{{count}} مكالمة فاشلة`,latency:`متوسط زمن الاستجابة`,latencyDetail:`وقت المزود من البداية للنهاية`},activity:{title:`الاستهلاك بمرور الوقت`,callsDescription:`الطلبات الصادرة اليومية للإضافات الممكّنة`,tokensDescription:`إجمالي الرموز اليومية التي أبلغ عنها المزودون`,chartLabel:`مخطط {{metric}} اليومي للمزود`},models:{title:`استهلاك النموذج`,description:`النماذج التي تحمل أكبر قدر من حركة المرور في هذه الفترة.`,model:`النموذج`,success:`النجاح`,latency:`زمن الاستجابة`},providers:{title:`حركة مرور الإضافات الممكّنة`},capabilities:{title:`مزيج القدرات`,characters:`{{count}} حرف`,images:`{{count}} صورة`,jobs:`{{count}} مهمة فيديو`,inputs:`{{count}} مدخل`,reportedTokens:`{{count}} رمز مُبلغ عنه`},empty:{title:`لا توجد مكالمات مزود بعد`,description:`ستظهر المكالمات هنا بعد أن تعالج إضافة ممكّنة طلبات الدردشة، أو العمل، أو التضمين، أو الصورة، أو الكلام، أو الصوت، أو الفيديو.`},privacyNote:`يتم قياس الاستخدام على الخادم عند حدود الإضافة الصادرة. يخزن Libre WebUI المزود، والنموذج، والتوقيت، والحالة، والعدادات المُبلغ عنها — وليس المطالبات، أو الاستجابات، أو نقاط النهاية، أو بيانات الاعتماد، أو هيئات أخطاء المزود. تشمل إجماليات الرموز فقط المكالمات التي أعاد فيها المزود بيانات الاستخدام الوصفية.`,heatmap:{title:`عام من النشاط`,description:`استدعاءات المزوّد اليومية خلال العام الماضي، ملوّنة حسب النموذج الأكثر استخدامًا في كل يوم.`,calls:`استدعاءات`,noCalls:`لا استدعاءات`,other:`نماذج أخرى`,less:`أقل`,more:`أكثر`,yearTotal:`{{formatted}} استدعاءً خلال العام الماضي`}},systemPage:{eyebrow:`الإدارة`,title:`النظام`,description:`راقب الجهاز ووقت التشغيل الذي يستضيف مثيل Libre WebUI هذا.`,updated:`تم التحديث {{date}}`,refresh:`تحديث معلومات النظام`,loadFailed:`تعذر تحميل معلومات النظام.`,cards:{uptime:`وقت تشغيل المضيف`,uptimeDetail:`يعمل منذ {{date}}`,memory:`الذاكرة المستخدمة`,memoryDetail:`{{used}} من {{total}}`,freeSpace:`مساحة فارغة`,freeSpaceDetail:`{{label}} · {{total}} الإجمالي`,containers:`الحاويات قيد التشغيل`,containersDetail:`{{total}} حاوية معروفة لـ Docker`,dockerUnavailable:`Docker غير متاح`,unavailable:`غير متاح`},host:{title:`المضيف ووقت التشغيل`,description:`تفاصيل نظام التشغيل والمعالج وعملية Libre WebUI.`,container:`وقت تشغيل الحاوية`,native:`وقت تشغيل أصلي`,hostname:`اسم المضيف`,operatingSystem:`نظام التشغيل`,processor:`المعالج`,logicalCpus:`وحدات CPU منطقية`,loadAverage:`متوسط الحمل · 1 / 5 / 15 دقيقة`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`العملية`,workingDirectory:`دليل العمل`},memory:{title:`الذاكرة`,description:`ذاكرة النظام المرئية لوقت التشغيل واستخدام عملية التطبيق.`,usedOf:`{{used}} مستخدمة من {{total}}`,free:`{{value}} فارغة`,processRss:`RSS العملية`,heapUsed:`كومة V8 المستخدمة`,heapTotal:`إجمالي كومة V8`,external:`ذاكرة خارجية`},storage:{title:`التخزين`,description:`المساحة المتاحة لنظام ملفات وقت التشغيل وبيانات التطبيق الدائمة.`,used:`{{value}} مستخدمة`,free:`{{value}} فارغة`,empty:`معلومات نظام الملفات غير متاحة في وقت التشغيل هذا.`},docker:{title:`Docker`,description:`حالة Docker Engine للقراءة فقط وقائمة مختصرة من الحاويات.`,connected:`متصل`,unavailable:`غير متاح`,unavailableDetail:`تشخيصات Docker Engine غير متاحة.`,socketStatus:`مقبس محلي: {{status}}`,mounted:`مُثبت`,notMounted:`غير مُثبت`,running:`قيد التشغيل`,stopped:`متوقف`,paused:`متوقف مؤقتًا`,total:`الإجمالي`,version:`الإصدار`,host:`المضيف`,architecture:`البنية`,cpus:`وحدات CPU`,memory:`الذاكرة`,container:`الحاوية`,image:`الصورة`,state:`الحالة`,created:`تم الإنشاء`,empty:`Docker متصل ولا توجد حاويات مدرجة حاليًا.`},network:{title:`الشبكة`,description:`الواجهات والعناوين وعدادات حركة مرور Linux المرئية لوقت التشغيل.`,internal:`داخلي`,empty:`لا توجد واجهات شبكة مرئية لوقت تشغيل التطبيق.`},securityNote:`هذه الصفحة مخصصة للمسؤولين فقط. يُرجع الخادم ملخصات تشغيلية فقط: فهو لا يكشف متغيرات البيئة، أو بيانات الاعتماد، أو تسميات Docker، أو التثبيتات، أو أوامر الحاوية، أو حمولات الفحص. عندما يعمل Libre WebUI في حاوية، تأتي تفاصيل CPU والذاكرة على مستوى المضيف من Docker Engine عندما يكون مقبسه المحلي متاحًا؛ تصف القيم الأخرى وقت تشغيل التطبيق.`,work:{title:`Work`,description:`بيئات معزولة لجميع المستخدمين`,access:`الوصول`,accessAdmins:`المسؤولون فقط`,accessAllUsers:`جميع المستخدمين`,runtimeAvailable:`متاح`,runtimeUnavailable:`غير متاح`,activeRuntimes:`بيئات التشغيل النشطة`,pendingCleanups:`عمليات تنظيف معلقة`,orphans:`حاويات يتيمة`,owner:`المالك`,task:`المهمة`,state:`الحالة`,preview:`المعاينة`,terminals:`الطرفيات`,updated:`آخر تحديث`,stateRunning:`قيد التشغيل`,stateStopped:`متوقف`,stateStarting:`قيد البدء`,stateUnknown:`غير معروف`,noTasks:`لا توجد مهام Work بعد.`}},mediaGeneration:{title:`توليد الوسائط`,description:`أنشئ فيديو أو صوتًا أو موسيقى أو كلامًا باستخدام مزود وسائط مُفعّل.`,image:`صورة`,video:`فيديو`,audio:`صوت`,sound:`صوت`,speech:`كلام`,model:`النموذج`,voice:`الصوت أو معرف الصوت`,resolution:`الدقة`,aspectRatio:`نسبة العرض إلى الارتفاع`,duration:`المدة`,providerDefault:`افتراضي للمزود`,generateAudio:`توليد صوت مع الفيديو عند الدعم`,prompt:`المطالبة`,text:`النص للتحدث`,videoPlaceholder:`صف المشهد، والحركة، والكاميرا، والإضاءة...`,audioPlaceholder:`أدخل النص الذي تريد للصوت أن ينطقه...`,soundPlaceholder:`صف الصوت، أو الموسيقى، أو الأجواء، أو الاستجابة المنطوقة التي تريدها...`,generate:`توليد`,generating:`جارٍ التوليد… قد يستغرق هذا عدة دقائق`,success:`تم توليد الوسائط وحفظها في Imagine`,failed:`فشل توليد الوسائط`,loadFailed:`فشل تحميل مزودي الوسائط`,noModels:`لا تتوفر نماذج {{kind}}. قم بتفعيل مزود متوافق واحفظ بيانات اعتماده أولاً.`},mediaGallery:{itemCount:`{{count}} عناصر`,empty:`لا توجد وسائط مولدة بعد`,emptyHint:`قم بتوليد صورة أو فيديو أو مقطع صوتي وسيظهر هنا.`,filters:{all:`الكل`,image:`الصور`,video:`مقاطع الفيديو`,audio:`الصوت`}},whatsNew:{title:`ما الجديد`,releaseNotes:`ملاحظات الإصدار`,cta:`حسنًا، هيا بنا`},notes:{title:`الملاحظات`,new:`ملاحظة جديدة`,untitled:`بدون عنوان`,empty:`لا توجد ملاحظات بعد`,selectOrCreate:`اختر ملاحظة أو أنشئ واحدة جديدة`,contentPlaceholder:`اكتب بصيغة ماركداون…`,saved:`تم الحفظ`,saveFailed:`تعذر حفظ الملاحظة`,createFailed:`تعذر إنشاء ملاحظة`,deleteConfirm:`حذف هذه الملاحظة؟`,deleteFailed:`تعذر حذف الملاحظة`},home:{active:`نشط`,continue:`متابعة`,start:`ابدأ`,explore:`استكشاف`},palette:{empty:`لا توجد نتائج.`,placeholder:`ابحث في المحادثات وWork والإجراءات…`,toggleTheme:`تبديل السمة`,actions:`الإجراءات`,chats:`المحادثات`,search:`بحث`,settings:`الإعدادات`,work:`العمل`},tabs:{actions:`إجراءات التبويب`,close:`إغلاق التبويب`,closeAll:`إغلاق كل التبويبات`,closeOthers:`إغلاق التبويبات الأخرى`,closeRight:`إغلاق التبويبات إلى اليمين`,home:`الرئيسية`,label:`التبويبات المفتوحة`,new:`تبويب جديد`,newWork:`Work جديد`,chat:`محادثة`,newChat:`محادثة جديدة`,work:`العمل`}};export{e as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-DjQINB7B.js","js/rolldown-runtime-hePW80VL.js","js/logger-DSXjF4ye.js","js/config-DF-g5uwS.js","js/workApi-CCHIEahA.js","js/router-vendor-Ca9zqOqT.js","js/markdown-core-DHnR5Hw8.js","js/utils-vendor-1zob7nK9.js"])))=>i.map(i=>d[i]);
2
- import{i as e}from"./router-vendor-Ca9zqOqT.js";import{En as t}from"./ui-vendor-xUzKqAXI.js";import{o as n}from"./utils-vendor-1zob7nK9.js";import{t as r}from"./logger-DSXjF4ye.js";import{S as i,c as a,l as o,p as s,s as c}from"./api-DjQINB7B.js";import{r as l}from"./utils-BhpNrGnR.js";var u=[`Chat`,`Image`,`Video`,`Audio`,`Speech`,`Transcription`,`Embedding`],d={chat:`Chat`,completion:`Chat`,embedding:`Embedding`,image:`Image`,audio:`Audio`,stt:`Transcription`,tts:`Speech`,video:`Video`},f={completion:`Chat`,embedding:`Embedding`,image:`Image`,audio:`Audio`,stt:`Transcription`,tts:`Speech`,video:`Video`};function p(e){let t=new Map,n=(e,n)=>{for(let r of e||[]){if(typeof r!=`string`||!r.trim())continue;let e=r.trim(),i=t.get(e)??new Set;i.add(n),t.set(e,i)}};n(e.model_map,d[e.type]);for(let t of Object.keys(e.capabilities||{}))n(e.capabilities?.[t]?.model_map,f[t]);return Array.from(t,([e,t])=>({id:e,capabilities:u.filter(e=>t.has(e))}))}function m(e){return e.type===`chat`||e.type===`completion`}var h=[`dall-e`,`embed`,`gpt-image`,`moderation`,`rerank`,`sora`,`stable-diffusion`,`text-to-speech`,`tts`,`whisper`];function g(e){let t=e.toLocaleLowerCase();return!h.some(e=>t.includes(e))}function _(e){let t=new Set;for(let[n,r]of Object.entries(e.capabilities||{}))if(n!==`completion`)for(let e of r?.model_map||[])t.add(e.trim());return(e.model_map||[]).filter(e=>typeof e==`string`&&e.trim().length>0&&!t.has(e.trim())&&g(e))}function v(e,t){let n=t.trim().toLocaleLowerCase();return!n||[e.name,e.id,e.type,...p(e).map(e=>e.id)].some(e=>e?.toLocaleLowerCase().includes(n))}var y=(e,t)=>{if(e&&typeof e==`object`&&`response`in e){let t=e;if(t.response?.data?.error)return t.response.data.error}return e instanceof Error?e.message:t};function b(e){return{...e,id:e.id||l(),timestamp:Date.now()}}function x(e,t){return e.currentSession?.isPrivate&&e.currentSession?.id===t}function S(e,t){return e.sessions.some(e=>e.id===t)}function C(e,t){return!!e.currentSession&&(x(e,t)||S(e,e.currentSession.id))}function w(e,t,n){if(x(e,t))return e.currentSession.messages.find(e=>e.id===n.id)?e:{currentSession:{...e.currentSession,messages:[...e.currentSession.messages,n],updatedAt:Date.now()},sessions:e.sessions};if(e.sessions.find(e=>e.id===t)?.messages.some(e=>e.id===n.id))return e;let r=e.sessions.map(e=>{if(e.id!==t)return e;let r=[...e.messages];if(n.parentId){let e=n.parentId;r=r.map(t=>t.id!==e&&t.parentId!==e?t:{...t,isActive:!1,branchIndex:t.branchIndex??0,siblingCount:(n.branchIndex||0)+1})}return{...e,messages:[...r,n],updatedAt:Date.now()}});return{sessions:r,currentSession:e.currentSession?.id===t&&r.find(e=>e.id===t)||e.currentSession}}function T(e,t,n,r){if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate){let t=e.currentSession.messages.find(e=>e.id===n);return!t||t.content===r?e:{sessions:e.sessions,currentSession:{...e.currentSession,messages:e.currentSession.messages.map(e=>e.id===n?{...e,content:r}:e),updatedAt:Date.now()}}}let i=e.sessions.find(e=>e.id===t),a=i?.messages.find(e=>e.id===n);if(!i||!a||a.content===r)return e;let o=e.sessions.map(e=>e.id===t?{...e,messages:e.messages.map(e=>e.id===n?{...e,content:r}:e),updatedAt:Date.now()}:e);return{sessions:o,currentSession:e.currentSession?.id===t&&o.find(e=>e.id===t)||e.currentSession}}function E(e,t,n,r,i,a,o){if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate)return{sessions:e.sessions,currentSession:{...e.currentSession,messages:e.currentSession.messages.map(e=>e.id===n?{...e,content:r,thinking:o,statistics:i,...a?{providerMetadata:a}:{}}:e),updatedAt:Date.now()}};let s=e.sessions.map(e=>e.id===t?{...e,messages:e.messages.map(e=>e.id===n?{...e,content:r,thinking:o,statistics:i,...a?{providerMetadata:a}:{}}:e),updatedAt:Date.now()}:e);return{sessions:s,currentSession:e.currentSession?.id===t&&s.find(e=>e.id===t)||e.currentSession}}function D(e){return e.reduce((e,t)=>(e[t.id]=t,e),{})}function O(e){return e.map(e=>({name:`persona:${e.id}`,model:e.model,size:0,digest:``,details:{parent_model:e.model,format:`persona`,family:`persona`,families:[`persona`],parameter_size:``,quantization_level:``},modified_at:new Date(e.updated_at).toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPersona:!0,personaName:e.name,personaDescription:e.description}))}function k(e){return e.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`).flatMap(e=>_(e).map(t=>({name:t,model:t,size:0,digest:``,details:{parent_model:``,format:``,family:``,families:[],parameter_size:``,quantization_level:``},modified_at:new Date().toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPlugin:!0,pluginId:e.id,pluginName:e.name})))}var A=`persona:`,j=`plugin:`,M=`ollama:`,N=`legacy:`,P=`agent:`,F=e=>{try{return decodeURIComponent(e)}catch{return null}};function I(e){return e.isLegacySelection?{model:e.name,providerType:null,providerId:null}:e.isPersona?{model:e.name,providerType:`ollama`,providerId:null}:e.isPlugin&&e.pluginId?{model:e.name,providerType:`plugin`,providerId:e.pluginId}:e.isAgent?{model:e.name,providerType:`agent`,providerId:e.agentId||e.name}:{model:e.name,providerType:`ollama`,providerId:null}}function L(e){return e.providerType?e.providerType===`plugin`&&e.providerId?`${j}${encodeURIComponent(e.providerId)}:${encodeURIComponent(e.model)}`:e.providerType===`agent`&&e.providerId?`${P}${encodeURIComponent(e.providerId)}:${encodeURIComponent(e.model)}`:e.providerType===`ollama`&&e.model.startsWith(A)?`${A}${encodeURIComponent(e.model.slice(8))}`:e.providerType===`ollama`?`${M}${encodeURIComponent(e.model)}`:`${N}${encodeURIComponent(e.model)}`:`${N}${encodeURIComponent(e.model)}`}function R(e){return L(I(e))}function z(e){if(e.startsWith(A)){let t=F(e.slice(8));return t===null?null:{model:`${A}${t}`,providerType:`ollama`,providerId:null}}if(e.startsWith(j)){let t=e.slice(7),n=t.indexOf(`:`);if(n<1)return null;let r=F(t.slice(0,n)),i=F(t.slice(n+1));return r&&i?{model:i,providerType:`plugin`,providerId:r}:null}if(e.startsWith(P)){let t=e.slice(6),n=t.indexOf(`:`);if(n<1)return null;let r=F(t.slice(0,n)),i=F(t.slice(n+1));return r&&i?{model:i,providerType:`agent`,providerId:r}:null}if(e.startsWith(M)){let t=F(e.slice(7));return t?{model:t,providerType:`ollama`,providerId:null}:null}if(e.startsWith(N)){let t=F(e.slice(7));return t?{model:t,providerType:null,providerId:null}:null}return null}function B(e,t){return t.providerType===`plugin`?e.find(e=>e.isPlugin&&e.pluginId===t.providerId&&e.name===t.model):t.providerType===`agent`?e.find(e=>e.isAgent&&e.name===t.model):t.providerType===`ollama`?t.model.startsWith(A)?e.find(e=>e.isPersona&&e.name===t.model):e.find(e=>!e.isPlugin&&!e.isPersona&&e.name===t.model):e.find(e=>e.isLegacySelection&&e.name===t.model)??e.find(e=>e.name===t.model)}function V(e,t){if(!t.providerType)return L(t);let n=B(e,t);return n?R(n):L(t)}function H(e,t){let n=e.find(e=>R(e)===t);return n?I(n):z(t)}function U(e){return!e.isPlugin&&!e.isPersona&&!e.isAgent&&!e.isLegacySelection&&!e.isUnavailable}function W(e,t){return t.model?!!B(e.filter(e=>!e.isLegacySelection&&!e.isUnavailable),t):!1}function G(e,t){if(!t.model)return e;if(!t.providerType){if(e.some(e=>e.isLegacySelection&&e.name===t.model))return e;let n=!!B(e,t);return[...e,{name:t.model,model:t.model,size:0,digest:``,modified_at:``,details:{},isLegacySelection:!0,isUnavailable:!n}]}if(B(e,t))return e;let n=t.providerType,r=n===`ollama`&&t.model.startsWith(A),i=n===`plugin`&&t.providerId||void 0;return[...e,{name:t.model,model:t.model,size:0,digest:``,modified_at:``,details:{},isPlugin:n===`plugin`,pluginId:i,pluginName:i,isAgent:n===`agent`,agentId:n===`agent`&&t.providerId||void 0,isPersona:r,personaName:r?t.model.slice(8):void 0,isUnavailable:!0}]}var K=r(`chat-store`),q=n((n,r)=>({sessions:[],currentSession:null,setCurrentSession:e=>{n({currentSession:e})},draftSessionSettings:{},setDraftSessionSettings:e=>{n({draftSessionSettings:e})},createSession:async(e,r,a,o,s)=>{try{n({loading:!0,error:null});let c=await i.createSession(e,r,a,o,s);if(c.success&&c.data){let e=c.data;return n(t=>({sessions:[e,...t.sessions],currentSession:e,loading:!1})),t.success(`New chat created`),e}}catch(e){let r=y(e,`Failed to create session`);n({error:r,loading:!1}),t.error(r)}},loadSessions:async()=>{try{n({loading:!0,error:null});let e=await i.getSessions();e.success&&e.data&&n(t=>{let n=e.data||[],r=n.map(e=>e.id),i=null;return t.currentSession?.isPrivate?i=t.currentSession:t.currentSession&&r.includes(t.currentSession.id)?i=n.find(e=>e.id===t.currentSession.id)||null:n.length>0&&(i=n[0],t.currentSession&&K.warn(`Previous currentSession not found in backend sessions:`,t.currentSession.id)),{sessions:n,currentSession:i,loading:!1}})}catch(e){let r=y(e,`Failed to load sessions`);n({error:r,loading:!1}),t.error(r)}},deleteSession:async e=>{try{let r=await i.deleteSession(e);r.success?(n(t=>{let n=t.sessions.filter(t=>t.id!==e),r=t.currentSession?.id===e?n[0]||null:t.currentSession;return K.debug(`Store: Updating state, sessions count:`,n.length),{sessions:n,currentSession:r}}),t.success(`Chat deleted`)):(K.error(`Store: deleteSession failed:`,r),t.error(`Failed to delete chat`))}catch(e){K.error(`Store: deleteSession error:`,e);let n=y(e,`Failed to delete session`);t.error(n)}},clearAllSessions:async()=>{try{n({loading:!0,error:null});let e=await i.clearAllSessions();e.success?(n({sessions:[],currentSession:null,loading:!1}),t.success(`All chat history cleared`)):(K.error(`Store: clearAllSessions failed:`,e),t.error(`Failed to clear chat history`),n({loading:!1}))}catch(e){K.error(`Store: clearAllSessions error:`,e);let r=y(e,`Failed to clear chat history`);t.error(r),n({loading:!1})}},clearAllState:()=>{n({sessions:[],currentSession:null,models:[],selectedModel:``,selectedProviderType:null,selectedProviderId:null,systemMessage:``,loading:!1,error:null})},applySessionTitle:(e,t,r=Date.now())=>{n(n=>({sessions:n.sessions.map(n=>n.id===e?{...n,title:t,updatedAt:r}:n),currentSession:n.currentSession?.id===e?{...n.currentSession,title:t,updatedAt:r}:n.currentSession}))},updateSessionTitle:async(e,n)=>{try{let a=await i.updateSession(e,{title:n});if(a.success&&a.data){let n=a.data.title,i=a.data.updatedAt??Date.now();r().applySessionTitle(e,n,i),t.success(`Chat title updated`)}}catch(e){let n=y(e,`Failed to update session`);t.error(n)}},addMessage:(e,i)=>{let a=r(),o=x(a,e);if(!C(a,e)){t.error(`No valid chat session. Please create or select a chat.`),K.error(`addMessage blocked: currentSession is not valid`,a.currentSession?.id);return}if(!o&&!S(a,e)){t.error(`Session not found or invalid. Please select or create a valid chat session.`),K.error(`addMessage blocked: sessionId not found in sessions`,e);return}let s=b(i);n(t=>w(t,e,s))},updateMessage:(e,t,r)=>{n(n=>T(n,e,t,r))},updateMessageWithStatistics:(e,t,r,i,a,o)=>{n(n=>E(n,e,t,r,i,a,o))},rateMessage:async(e,t,a)=>{let o=e=>e.map(e=>e.id===t?{...e,rating:a}:e),s=r().currentSession?.isPrivate;if(n(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,messages:o(t.messages)}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,messages:o(t.currentSession.messages)}:t.currentSession})),!s)try{await i.updateMessage(e,t,{rating:a??null})}catch(e){K.error(`Failed to save message rating:`,e)}},folders:[],loadFolders:async()=>{try{let e=await i.getFolders();e.success&&e.data&&n({folders:e.data})}catch(e){K.error(`Failed to load folders:`,e)}},createFolder:async e=>{try{let t=await i.createFolder(e);if(t.success&&t.data){let e=t.data;return n(t=>({folders:[...t.folders,e].sort((e,t)=>e.name.localeCompare(t.name))})),e}}catch(e){K.error(`Failed to create folder:`,e)}},renameFolder:async(e,t)=>{try{let r=await i.renameFolder(e,t);if(r.success&&r.data){let t=r.data;n(n=>({folders:n.folders.map(n=>n.id===e?t:n).sort((e,t)=>e.name.localeCompare(t.name))}))}}catch(e){K.error(`Failed to rename folder:`,e)}},deleteFolder:async e=>{try{(await i.deleteFolder(e)).success&&n(t=>({folders:t.folders.filter(t=>t.id!==e),sessions:t.sessions.map(t=>t.folderId===e?{...t,folderId:null}:t),currentSession:t.currentSession?.folderId===e?{...t.currentSession,folderId:null}:t.currentSession}))}catch(e){K.error(`Failed to delete folder:`,e)}},moveSessionToFolder:async(e,t)=>{n(n=>({sessions:n.sessions.map(n=>n.id===e?{...n,folderId:t}:n),currentSession:n.currentSession?.id===e?{...n.currentSession,folderId:t}:n.currentSession}));try{await i.updateSession(e,{folderId:t})}catch(e){K.error(`Failed to move session to folder:`,e)}},setSessionArchived:async(e,t)=>{n(n=>({sessions:n.sessions.map(n=>n.id===e?{...n,archived:t}:n),currentSession:n.currentSession?.id===e?{...n.currentSession,archived:t}:n.currentSession}));try{await i.updateSession(e,{archived:t})}catch(r){K.error(`Failed to update session archive state:`,r),n(n=>({sessions:n.sessions.map(n=>n.id===e?{...n,archived:!t}:n)}))}},setSessionPinned:async(e,t)=>{n(n=>({sessions:n.sessions.map(n=>n.id===e?{...n,pinned:t}:n),currentSession:n.currentSession?.id===e?{...n.currentSession,pinned:t}:n.currentSession}));try{await i.updateSession(e,{pinned:t})}catch(r){K.error(`Failed to update session pin state:`,r),n(n=>({sessions:n.sessions.map(n=>n.id===e?{...n,pinned:!t}:n)}))}},truncateMessagesFrom:(e,t)=>{let r=e=>{let n=e.findIndex(e=>e.id===t);return n===-1?e:e.slice(0,n)};n(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,messages:r(t.messages),updatedAt:Date.now()}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,messages:r(t.currentSession.messages),updatedAt:Date.now()}:t.currentSession}))},models:[],loadModels:async()=>{try{n({loading:!0,error:null}),K.debug(`Loading models from API...`);let i=[],o;try{let e=await s.getModels();e.success&&e.data?(i=[...e.data],K.debug(`Ollama models loaded:`,e.data.length)):o=Error(e.error||e.message||`Ollama models are unavailable.`)}catch(e){o=e,K.warn(`Ollama models are unavailable; continuing with plugin models:`,e)}try{let e=await a.getAllPlugins();if(e.success&&e.data){let t=e.data.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`);K.debug(`🔌 Active plugins found:`,t.map(e=>e.name));let n=k(t);i.push(...n),K.debug(`Plugin models added:`,n.length)}}catch(e){K.error(`❌ Failed to load plugin models:`,e),e instanceof Error&&K.error(`❌ Plugin error details:`,{message:e.message,response:e.response?.data,status:e.response?.status,url:e.config?.url})}try{let{agentCliApi:t}=await e(async()=>{let{agentCliApi:e}=await import(`./api-DjQINB7B.js`).then(e=>e.t);return{agentCliApi:e}},__vite__mapDeps([0,1,2,3,4,5,6,7])),n=await t.getModels();if(n.success&&n.data){let e=n.data.map(e=>({name:e.id,model:e.id,size:0,digest:``,modified_at:``,details:{},isAgent:!0,agentName:e.name,agentId:e.agentId}));i.push(...e),K.debug(`Agent CLI models added:`,e.length)}}catch(e){K.warn(`Agent CLI models unavailable:`,e)}let l=i.length;try{let{personaApi:t}=await e(async()=>{let{personaApi:e}=await import(`./api-DjQINB7B.js`).then(e=>e.t);return{personaApi:e}},__vite__mapDeps([0,1,2,3,4,5,6,7])),r=await t.getPersonas();if(r.success&&r.data){let e=D(r.data),t=O(r.data);i.push(...t),n(t=>({...t,personas:e}))}}catch(e){K.error(`❌ Failed to load personas:`,e)}K.debug(`Total models loaded:`,i.length);let u=l===0&&o?y(o,`No model provider is available`):null,d=r(),f=d.selectedModel,p={model:f,providerType:d.selectedProviderType,providerId:d.selectedProviderId},m=!!B(i,p),h=d.selectedProviderType===`ollama`||d.selectedProviderType===`plugin`;if(f&&!m&&h){let e=`Selected model "${f}" is unavailable from ${d.selectedProviderType===`plugin`?d.selectedProviderId||`plugin`:`Ollama`}. Reactivate that provider or select another model.`;n({models:i,loading:!1,error:e}),t.error(e);return}if(f&&!m&&i.length>0){let e=I(i[0]);K.debug(`⚠️ Legacy selected model "${f}" no longer available, falling back to "${e.model}"`),n({models:i,loading:!1,selectedModel:e.model,selectedProviderType:e.providerType||null,selectedProviderId:e.providerId||null,error:u}),c.setDefaultModel(e.model,e.providerType,e.providerId).catch(e=>{K.warn(`Failed to save fallback default model:`,e)}),t.success(`Switched to ${e.model} (previous model no longer available)`)}else n({models:i,loading:!1,error:u});u&&t.error(u)}catch(e){K.error(`Error loading models:`,e);let r=y(e,`Failed to load models`);n({error:r,loading:!1}),t.error(r)}},loadPreferences:async()=>{try{let e=await c.getPreferences();if(e.success&&e.data){let{defaultModel:t,defaultProviderType:r,defaultProviderId:i,systemMessage:a}=e.data;t&&(n({selectedModel:t,selectedProviderType:r||null,selectedProviderId:r===`plugin`&&i||null}),K.debug(`✅ Loaded default model from backend:`,t)),a!==void 0&&(n({systemMessage:a}),K.debug(`✅ Loaded system message from backend`))}}catch(e){K.warn(`❌ Failed to load preferences from backend:`,e)}},selectedModel:``,selectedProviderType:null,selectedProviderId:null,setSelectedModel:(e,t=null,r=null)=>{let i=(t===`plugin`||t===`agent`)&&r||null;n({selectedModel:e,selectedProviderType:t,selectedProviderId:i}),c.setDefaultModel(e,t,i).catch(e=>{K.warn(`Failed to save default model to backend:`,e)})},updateCurrentSessionModel:async(e,a=null,o=null)=>{let s=r();if(!s.currentSession)throw Error(`No current session to update`);try{let r=await i.updateSession(s.currentSession.id,{model:e,providerType:a,providerId:a===`plugin`||a===`agent`?o:null});r.success&&r.data&&(n(t=>({sessions:t.sessions.map(e=>e.id===t.currentSession?.id?r.data:e),currentSession:r.data,selectedModel:e,selectedProviderType:a,selectedProviderId:(a===`plugin`||a===`agent`)&&o||null})),t.success(`Model updated for current chat`))}catch(e){let n=y(e,`Failed to update session model`);throw t.error(n),e}},personas:{},loadPersonas:async()=>{try{n({loading:!0,error:null});let e=await o.getPersonas();if(e.success&&e.data){let t=e.data;n({personas:D(t),loading:!1}),K.debug(`✅ Personas loaded:`,t.length)}}catch(e){let t=y(e,`Failed to load personas`);n({error:t,loading:!1}),K.error(`❌ Failed to load personas:`,t)}},getCurrentPersona:()=>{let e=r();if(!e.currentSession||!e.currentSession.model?.startsWith(`persona:`))return null;let t=e.currentSession.model.replace(`persona:`,``);return e.personas[t]||null},systemMessage:``,setSystemMessage:e=>{let t=r();if(n({systemMessage:e}),c.setSystemMessage(e).catch(e=>{K.warn(`Failed to save system message to backend:`,e)}),t.currentSession){let r=t.currentSession.messages.findIndex(e=>e.role===`system`);if(r!==-1){n(t=>{let n=t.sessions.map(n=>{if(n.id===t.currentSession?.id){let t=n.messages.map((t,n)=>n===r&&t.role===`system`?{...t,content:e,timestamp:Date.now()}:t);return{...n,messages:t,updatedAt:Date.now()}}return n});return{sessions:n,currentSession:t.currentSession?n.find(e=>e.id===t.currentSession.id)||t.currentSession:null}});let a=t.currentSession.messages[r];i.updateMessage(t.currentSession.id,a.id,{content:e}).catch(e=>{K.warn(`Failed to sync system message update to backend:`,e)}),K.debug(`✅ Updated system message in current session`)}}},loading:!1,error:null,setError:e=>n({error:e}),generatingTitleForSession:null,setGeneratingTitleForSession:e=>n({generatingTitleForSession:e}),...typeof window<`u`&&{testPluginApi:async()=>{try{K.debug(`🧪 Testing plugin API...`);let e=await a.getAllPlugins();return K.debug(`✅ Plugin API test result:`,e),e}catch(e){return K.error(`❌ Plugin API test failed:`,e),{error:e}}}}}));export{V as a,W as c,p as d,v as f,I as i,G as l,R as n,B as o,m as p,H as r,U as s,q as t,y as u};
@@ -1,2 +0,0 @@
1
- import{i as e}from"./router-vendor-Ca9zqOqT.js";import{t}from"./i18next-DgmgtwsV.js";import{i as n,o as r}from"./useTranslation-CdeLZqSW.js";var i={type:`3rdParty`,init(e){r(e.options.react),n(e)}},{slice:a,forEach:o}=[];function s(e){return o.call(a.call(arguments,1),t=>{if(t)for(let n in t)e[n]===void 0&&(e[n]=t[n])}),e}function c(e){return typeof e==`string`&&[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(t=>t.test(e))}var l=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,u=function(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:`/`},r=`${e}=${encodeURIComponent(t)}`;if(n.maxAge>0){let e=n.maxAge-0;if(Number.isNaN(e))throw Error(`maxAge should be a Number`);r+=`; Max-Age=${Math.floor(e)}`}if(n.domain){if(!l.test(n.domain))throw TypeError(`option domain is invalid`);r+=`; Domain=${n.domain}`}if(n.path){if(!l.test(n.path))throw TypeError(`option path is invalid`);r+=`; Path=${n.path}`}if(n.expires){if(typeof n.expires.toUTCString!=`function`)throw TypeError(`option expires is invalid`);r+=`; Expires=${n.expires.toUTCString()}`}if(n.httpOnly&&(r+=`; HttpOnly`),n.secure&&(r+=`; Secure`),n.sameSite)switch(typeof n.sameSite==`string`?n.sameSite.toLowerCase():n.sameSite){case!0:r+=`; SameSite=Strict`;break;case`lax`:r+=`; SameSite=Lax`;break;case`strict`:r+=`; SameSite=Strict`;break;case`none`:r+=`; SameSite=None`;break;default:throw TypeError(`option sameSite is invalid`)}return n.partitioned&&(r+=`; Partitioned`),r},d={create(e,t,n,r){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:`/`,sameSite:`strict`};n&&(i.expires=new Date,i.expires.setTime(i.expires.getTime()+n*60*1e3)),r&&(i.domain=r),document.cookie=u(e,t,i)},read(e){let t=`${e}=`,n=document.cookie.split(`;`);for(let e=0;e<n.length;e++){let r=n[e];for(;r.charAt(0)===` `;)r=r.substring(1,r.length);if(r.indexOf(t)===0)return r.substring(t.length,r.length)}return null},remove(e,t){this.create(e,``,-1,t)}},f={name:`cookie`,lookup(e){let{lookupCookie:t}=e;if(t&&typeof document<`u`)return d.read(t)||void 0},cacheUserLanguage(e,t){let{lookupCookie:n,cookieMinutes:r,cookieDomain:i,cookieOptions:a}=t;n&&typeof document<`u`&&d.create(n,e,r,i,a)}},p={name:`querystring`,lookup(e){let{lookupQuerystring:t}=e,n;if(typeof window<`u`){let{search:e}=window.location;!window.location.search&&window.location.hash?.indexOf(`?`)>-1&&(e=window.location.hash.substring(window.location.hash.indexOf(`?`)));let r=e.substring(1).split(`&`);for(let e=0;e<r.length;e++){let i=r[e].indexOf(`=`);i>0&&r[e].substring(0,i)===t&&(n=r[e].substring(i+1))}}return n}},m={name:`hash`,lookup(e){let{lookupHash:t,lookupFromHashIndex:n}=e,r;if(typeof window<`u`){let{hash:e}=window.location;if(e&&e.length>2){let i=e.substring(1);if(t){let e=i.split(`&`);for(let n=0;n<e.length;n++){let i=e[n].indexOf(`=`);i>0&&e[n].substring(0,i)===t&&(r=e[n].substring(i+1))}}if(r)return r;if(!r&&n>-1){let t=e.match(/\/([a-zA-Z-]*)/g);return Array.isArray(t)?t[typeof n==`number`?n:0]?.replace(`/`,``):void 0}}}return r}},h=null,g=()=>{if(h!==null)return h;try{if(h=typeof window<`u`&&window.localStorage!==null,!h)return!1;let e=`i18next.translate.boo`;window.localStorage.setItem(e,`foo`),window.localStorage.removeItem(e)}catch{h=!1}return h},_={name:`localStorage`,lookup(e){let{lookupLocalStorage:t}=e;if(t&&g())return window.localStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupLocalStorage:n}=t;n&&g()&&window.localStorage.setItem(n,e)}},v=null,y=()=>{if(v!==null)return v;try{if(v=typeof window<`u`&&window.sessionStorage!==null,!v)return!1;let e=`i18next.translate.boo`;window.sessionStorage.setItem(e,`foo`),window.sessionStorage.removeItem(e)}catch{v=!1}return v},b={name:`sessionStorage`,lookup(e){let{lookupSessionStorage:t}=e;if(t&&y())return window.sessionStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupSessionStorage:n}=t;n&&y()&&window.sessionStorage.setItem(n,e)}},x={name:`navigator`,lookup(e){let t=[];if(typeof navigator<`u`){let{languages:e,userLanguage:n,language:r}=navigator;if(e)for(let n=0;n<e.length;n++)t.push(e[n]);n&&t.push(n),r&&t.push(r)}return t.length>0?t:void 0}},S={name:`htmlTag`,lookup(e){let{htmlTag:t}=e,n,r=t||(typeof document<`u`?document.documentElement:null);return r&&typeof r.getAttribute==`function`&&(n=r.getAttribute(`lang`)),n}},C={name:`path`,lookup(e){let{lookupFromPathIndex:t}=e;if(typeof window>`u`)return;let n=window.location.pathname.match(/\/([a-zA-Z-]*)/g);if(Array.isArray(n))return n[typeof t==`number`?t:0]?.replace(`/`,``)}},w={name:`subdomain`,lookup(e){let{lookupFromSubdomainIndex:t}=e,n=typeof t==`number`?t+1:1,r=typeof window<`u`&&window.location?.hostname?.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(r)return r[n]}},T=!1;try{document.cookie,T=!0}catch{}var E=[`querystring`,`cookie`,`localStorage`,`sessionStorage`,`navigator`,`htmlTag`];T||E.splice(1,1);var D=()=>({order:E,lookupQuerystring:`lng`,lookupCookie:`i18next`,lookupLocalStorage:`i18nextLng`,lookupSessionStorage:`i18nextLng`,caches:[`localStorage`],excludeCacheFor:[`cimode`],convertDetectedLanguage:e=>e}),O=class{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type=`languageDetector`,this.detectors={},this.init(e,t)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=e,this.options=s(t,this.options||{},D()),typeof this.options.convertDetectedLanguage==`string`&&this.options.convertDetectedLanguage.indexOf(`15897`)>-1&&(this.options.convertDetectedLanguage=e=>e.replace(`-`,`_`)),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=n,this.addDetector(f),this.addDetector(p),this.addDetector(_),this.addDetector(b),this.addDetector(x),this.addDetector(S),this.addDetector(C),this.addDetector(w),this.addDetector(m)}addDetector(e){return this.detectors[e.name]=e,this}detect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,t=[];return e.forEach(e=>{if(this.detectors[e]){let n=this.detectors[e].lookup(this.options);n&&typeof n==`string`&&(n=[n]),n&&(t=t.concat(n))}}),t=t.filter(e=>e!=null&&!c(e)).map(e=>this.options.convertDetectedLanguage(e)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}cacheUserLanguage(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(t=>{this.detectors[t]&&this.detectors[t].cacheUserLanguage(e,this.options)}))}};O.type=`languageDetector`;var k={common:{loading:`Loading...`,save:`Save`,saving:`Saving...`,cancel:`Cancel`,delete:`Delete`,edit:`Edit`,close:`Close`,back:`Back`,next:`Next`,confirm:`Confirm`,error:`Error`,success:`Success`,warning:`Warning`,or:`or`,optional:`optional`,enabled:`Enabled`,disabled:`Disabled`,on:`On`,off:`Off`,yes:`Yes`,no:`No`,search:`Search`,noResults:`No results found`,retry:`Retry`,refresh:`Refresh`,download:`Download`,upload:`Upload`,export:`Export`,import:`Import`,reset:`Reset`,apply:`Apply`,clear:`Clear`,all:`All`,none:`None`,default:`Default`,custom:`Custom`,remove:`Remove`,home:`Home`,more:`More`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`Welcome Back`,subtitle:`Sign in to your account to continue`,username:`Username`,usernamePlaceholder:`Enter your username`,password:`Password`,passwordPlaceholder:`Enter your password`,signIn:`Sign In`,signingIn:`Signing in...`,noAccount:`Don't have an account?`,signUpHere:`Sign up here`,loginSuccess:`Login successful!`,loginFailed:`Login failed`,checkCredentials:`Login failed. Please check your credentials.`,approvalPending:`Your account is waiting for administrator approval.`,enterBoth:`Please enter both username and password`,githubSuccess:`GitHub login successful!`,githubFailed:`GitHub authentication failed`,githubVerifyFailed:`Failed to verify GitHub authentication`,verificationFailed:`Security verification failed. Please refresh and try again.`},signup:{title:`Create Account`,subtitle:`Sign up for your new account`,username:`Username`,usernamePlaceholder:`Choose a username`,email:`Email`,emailPlaceholder:`your@email.com`,password:`Password`,passwordPlaceholder:`Choose a password`,confirmPassword:`Confirm Password`,confirmPasswordPlaceholder:`Confirm your password`,createAccount:`Create Account`,creatingAccount:`Creating account...`,hasAccount:`Already have an account?`,signInHere:`Sign in here`,signupSuccess:`Account created successfully!`,approvalPending:`Registration received. An administrator must approve your account.`,awaitingApproval:`Awaiting approval`,awaitingApprovalDescription:`Your account has been created, but an administrator must activate it before you can sign in.`,backToSignIn:`Back to sign in`,signupFailed:`Signup failed`,tryAgain:`Signup failed. Please try again.`,usernameRequired:`Username and password are required`,passwordMismatch:`Passwords do not match`,passwordTooShort:`Password must be at least 6 characters long`},logout:{button:`Log out`,success:`Logged out successfully`},oauth:{continueWith:`Continue with {{provider}}`,connectingTo:`Connecting to {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Checking authentication...`,welcome:`Welcome`,noEmail:`No email provided`,role:`Role`,id:`ID`,userId:`User ID`,signInDescription:`Sign in with your GitHub account to continue`,signInWithGitHub:`Sign in with GitHub`,jwtActive:`JWT Authentication Active`,jwtDescription:`JWT-based authentication with GitHub OAuth`,github:`GitHub`,provider:`Provider`,tagline:`Your AI stack should answer to you.`,selfHosted:`Self-hosted · Apache 2.0`,highlights:{local:{title:`Local first`,body:`Your conversations and files stay on the machine you run this on.`},providers:{title:`Any provider`,body:`Local models through Ollama, plus the remote providers you choose to add.`},work:{title:`Isolated Work`,body:`Give a model a sandboxed workspace with files, a terminal, and a preview.`}}},setup:{welcome:{title:`Welcome to Libre WebUI`,subtitle:`Let's Get Started`,description:`Set up your Libre WebUI instance in just a few steps`,createAdmin:`Create Admin Account`,features:{secure:{title:`Secure & Private`,description:`Your conversations stay on your device`},fast:{title:`Fast & Responsive`,description:`Optimized for speed and performance`},openSource:{title:`Open Source`,description:`Free and open source software`}}},admin:{title:`Create Admin Account`,subtitle:`Administrator Setup`,description:`Create the first admin account for your Libre WebUI instance`,usernamePlaceholder:`Enter admin username`,passwordPlaceholder:`Enter password (min 6 characters)`,confirmPlaceholder:`Confirm your password`,creating:`Creating...`,createAdmin:`Create Admin`,success:`Admin account created successfully!`,failed:`Failed to create admin account`,approvalUnexpected:`The initial administrator could not be activated. Please try again.`,fillAllFields:`Please fill in all fields`,note:`This will be the primary administrator account for your Libre WebUI instance`},encryptionKey:{title:`Save Your Encryption Key`,subtitle:`Important: Save This Key`,description:`This encryption key protects your sensitive data. Store it securely - you'll need it if you ever need to restore your database.`,warning:`Warning`,warningText:`If you lose this key and need to restore your database, your encrypted data (API keys, preferences) will be unrecoverable.`,label:`Your Encryption Key`,loading:`Loading...`,copyToClipboard:`Copy to clipboard`,copied:`Encryption key copied to clipboard!`,copyFailed:`Failed to copy key to clipboard`,envNote:`This key is also saved in your backend/.env file as ENCRYPTION_KEY`,acknowledgment:`I have saved my encryption key in a secure location and understand that losing it may result in data loss.`,confirmRequired:`Please confirm that you have saved the encryption key`,continue:`Continue to Libre WebUI`}},chat:{greeting:{morning:`Good morning`,afternoon:`Good afternoon`,evening:`Good evening`,night:`Good night`},followUp:`Follow up`,welcome:{helpToday:`What can I help with today?`,helpTonight:`What can I help with tonight?`,variety:{create:{title:`What should we make?`,subtitle:`Start with a thought, a sketch, or a stubborn problem.`},explore:{title:`Where should we begin?`,subtitle:`Bring the question you keep returning to.`},imagine:{title:`What are you imagining?`,subtitle:`We can shape it together.`},focus:{title:`What deserves your attention?`,subtitle:`Let's make the next step clear.`},untangle:{title:`What's tangled?`,subtitle:`Give me the messy version first.`},momentum:{title:`Ready when you are.`,subtitle:`Pick up an idea, plan, or unfinished thread.`},open:{title:`What's on your mind?`,subtitle:`Small thought or ambitious project. Both work.`},challenge:{title:`What are we solving?`,subtitle:`Tell me what isn't working yet.`},draft:{title:`Let's start somewhere.`,subtitle:`It doesn't have to be polished.`},possibility:{title:`What could this become?`,subtitle:`Show me the raw material.`},unexpected:{title:`Make something unexpected.`,subtitle:`Give me a constraint, a mood, or a half-formed idea.`}}},input:{placeholder:`Send a message`,messagePlaceholder:`Message...`,attachImages:`Attach images`,attachments:`Attachments and advanced features`,sendMessage:`Send message`,stopGeneration:`Stop generation`,menu:{uploadImages:`Upload images`,attachDocument:`Attach document`,attachWebpage:`Attach webpage`,structuredOutput:`Structured output`,attach:`Attach`,documentAttached:`Document attached`,webpageAttached:`Webpage attached`,attachFailed:`Could not attach that`,attachKnowledge:`Attach knowledge`,noCollections:`No collections yet — create one in Settings → Documents`},voiceInput:`Voice input`,voiceStop:`Stop listening`,webSearchOn:`Web search on — replies use live results`,webSearchOff:`Search the web for this message`},session:{new:`New Chat`,work:`Work`,chat:`Chat`,private:`Private`,incognito:`Incognito Chat`,privateMode:`Private Mode`,privateDescription:`This conversation won't be saved`,privateTooltip:`Start a private conversation that won't be saved`,deleteConfirm:`Are you sure you want to delete this chat?`,generatingTitle:`Generating title`,noChats:`No chats yet`,createFirst:`Create your first chat above`,chats:`Chats`,renameChat:`Rename chat`,openNewTab:`Open in new tab`,pinChat:`Pin`,unpinChat:`Unpin`,deleteChat:`Delete chat`,archiveChat:`Archive chat`,groups:{pinned:`Pinned`,today:`Today`,yesterday:`Yesterday`,previous7Days:`Previous 7 days`,previous30Days:`Previous 30 days`,older:`Older`},folder:{new:`New folder`,namePlaceholder:`Folder name`,move:`Move to folder`,remove:`Remove from folder`,delete:`Delete folder`,deleteConfirm:`Delete this folder? Chats inside are kept.`}},persona:{applied:`Persona applied`,label:`Persona`,removeFailed:`Failed to remove persona`},model:{updated:`Model updated`,noModels:`No models available`,noModelsDescription:`No models available. Make sure Ollama is running and has models installed.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`No models available. Please ensure Ollama is running and models are installed.`,selectBeforePrivateChat:`Select an available model before starting private chat`,selectBeforeSending:`Select an available model before sending`},footer:{disclaimer:`LLM can make mistakes - verify important information`,images:`{{count}} image`,images_plural:`{{count}} images`,structuredOutput:`Structured output`},mediaUpload:{dropImagesHere:`Drop images here or`,supportedFormats:`Supports: JPG, PNG, GIF, WebP (max 10MB each)`,browse:`browse`},structuredOutput:{title:`Response Format`,none:`None (Natural Language)`,noneDescription:`Default natural language response`,json:`JSON`,jsonDescription:`Structured JSON format`,list:`List`,listDescription:`Array of items`,summary:`Summary`,summaryDescription:`Document summary with key points`,analysis:`Analysis`,analysisDescription:`Structured analysis with pros/cons`,custom:`Custom Schema`,customDescription:`Define your own JSON schema`,customSchema:`Custom JSON schema`,schemaPreview:`Schema Preview`,applySchema:`Apply Schema`,cancel:`Cancel`,enabled:`Structured output enabled`},controls:{title:`Chat controls`,systemPrompt:`System prompt`,systemPromptPlaceholder:`Instructions that apply only to this chat…`,advancedParams:`Advanced parameters`,advancedParamsDescription:`Overrides for this chat. Empty fields use your global defaults.`,fromModel:`from model`,fromModelHint:`This value comes from the model's own recommended settings.`,contextCapped:`Context capped at {{context}} of the {{trained}} this model was trained for, so it still loads.`,saved:`Chat controls saved`,saveFailed:`Could not save chat controls`,params:{temperature:`Temperature`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`Max tokens`,repeatPenalty:`Repeat penalty`,seed:`Seed`,contextLength:`Context length`}},message:{sources:`Sources`}},sidebar:{navigation:{chat:`Chat`,models:`Models`,personas:`Personas`,imagine:`Imagine`,agents:`Agents`,work:`Work`,settings:`Settings`,usageAnalytics:`Provider Usage`,system:`System`,userManagement:`User Management`,signOut:`Sign Out`,exploreLabel:`Explore`,notes:`Notes`},toggleSize:`Toggle sidebar size`,expandSidebar:`Expand sidebar`},user:{menu:{changePicture:`Change Picture`,settings:`Settings`,usageAnalytics:`Provider Usage`,system:`System`,userManagement:`User Management`,logout:`Log out`},avatar:{title:`Change Profile Picture`,updated:`Profile picture updated`,updateFailed:`Failed to update profile picture`,saving:`Saving...`,label:`Avatar`,uploadAvatarImage:`Upload avatar image`,dragAndDrop:`Drag and drop an image or click to browse`,chooseImage:`Choose Image`,uploading:`Uploading...`,enterImageUrl:`Or enter image URL`,supportedFormats:`Supports: JPG, PNG, GIF, WebP (max 2MB). Square images work best.`,customAvatar:`Custom avatar image`,clickToChange:`Click to change or remove`,removed:`Avatar removed`,uploaded:`Avatar uploaded successfully`,invalidFile:`Please select a valid image file`,fileTooLarge:`Avatar image size must be less than 2MB`,readFailed:`Failed to read image file`,uploadFailed:`Failed to upload avatar image`},profile:{noEmail:`No email provided`}},settings:JSON.parse(`{"title":"Settings","tabs":{"appearance":"Appearance","model":"Model","systemMessage":"System Message","plugins":"Plugins","search":"Search","generation":"Generation","documents":"Documents","tts":"Speech","imageGen":"Images","data":"Data","shortcuts":"Shortcuts","about":"About"},"appearance":{"title":"Appearance","language":{"title":"Language","description":"Select your preferred language"},"theme":{"title":"Theme","light":"Light","dark":"Dark","amoled":"Pure Black","system":"System"},"accent":{"title":"Accent color","custom":"Custom color","useColor":"Use {{color}} accent","behaviorTitle":"Interface palette","behaviorDescription":"Choose whether the accent stays on controls or adapts the entire light or dark interface.","defaultStyle":"Default","defaultStyleDescription":"Keep the neutral light and dark surfaces.","adaptedStyle":"Adapt to accent","adaptedStyleDescription":"Tint surfaces, borders, and text with your accent."},"chatInterface":{"title":"Chat Interface","showUsername":"Show Username","showUsernameDescription":"Display username in chat messages","followUpSuggestions":"Follow-up suggestions","followUpSuggestionsDescription":"Suggest quick replies after each response","hapticFeedback":"Haptic feedback (Android)","hapticFeedbackDescription":"Use subtle vibration for important mobile actions"},"background":{"title":"Background Image","enable":"Enable background image","enableDescription":"Show custom background with blur effect","blur":"Blur","opacity":"Opacity","upload":"Upload background image","dragDrop":"Drag and drop an image or click to browse","chooseImage":"Choose Image"}},"saveSettings":"Save Settings","model":{"title":"Model Settings","defaultModel":"Default Model","defaultModelDescription":"This model will be used by default for new conversations","selectModel":"Select a model","specializedModels":"Specialized Models","visionModel":"Vision Model","selectVisionModel":"Use the current chat model","visionModelDescription":"Used automatically whenever the outgoing chat context contains images. Choose a model that supports image input.","visionModelUpdateFailed":"Failed to update vision model: {{error}}","visionModelNoProvider":"This vision model has no provider identity. Select an available model.","persona":"Persona","updateAll":"Update All Models","updateAllDescription":"Check for updates and pull latest versions of all installed models","updateAllButton":"Update All","updating":"Updating models...","currentModelInfo":"Current Model Info","name":"Name","size":"Size","family":"Family","format":"Format","status":"Status","statusStarting":"Starting...","statusComplete":"Complete","statusError":"Error","bulkOperations":"Bulk Operations","autoTitle":{"title":"Auto Title Generation","enable":"Enable Auto Title","enableDescription":"Automatically generate titles for new conversations","taskModel":"Task Model","selectTaskModel":"Select task model","taskModelDescription":"Model used for generating conversation titles"},"updatingModel":"Updating {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} of {{total}} models"},"systemMessage":{"title":"System Message","description":"Set a custom system message that will be used for all new conversations.","placeholder":"Enter a system message...","saved":"System message saved","saveFailed":"Failed to save system message"},"plugins":{"title":"Plugins","description":"Manage your installed plugins","providerConnections":"Provider connections","providerConnectionsDescription":"Connect, configure, and inspect model providers through plugins.","providers":"Providers","searchProviders":"Search providers","noProvidersFound":"No providers match your search.","selectProvider":"Select a provider","selectProviderDescription":"Choose a provider to inspect its connection and model catalog.","addNew":"Add New Plugin","upload":"Upload Plugin","addJson":"Add JSON","uploading":"Uploading...","jsonPlaceholder":"Paste plugin JSON configuration...","install":"Install Plugin","noPlugins":"No plugins installed","noPluginsDescription":"Add a plugin to extend functionality","loading":"Loading plugins...","installed":"Installed Plugins","active":"Active Plugins","activeLabel":"Active","inactive":"Inactive","activate":"Activate","deactivate":"Deactivate","models":"models","apiKeySet":"API Key Set","apiKeyConfiguration":"API Key Configuration","apiKeyDescription":"Store a personal API key for {{name}}.","apiKeyEnvAlternative":"Alternatively, set the","environmentVariable":"environment variable","apiKeyConfigured":"API key configured","apiKeyPlaceholder":"Enter your API key...","saveApiKey":"Save API Key","showApiKey":"Show API key","hideApiKey":"Hide API key","configure":"Configure","providerSettings":"Provider settings","status":"Status","defaultEndpoint":"Default endpoint","modelCatalog":"Model catalog","modelCatalogDescription":"Discovered and configured models for this provider and its capabilities.","refreshModels":"Refresh models","noModelsConfigured":"No models are configured for this provider.","modelId":"Model ID","capabilities":"Capabilities","modelCatalogUpdated":"Model catalog updated: {{count}} models.","modelCatalogUnchanged":"Model catalog is already up to date.","modelCatalogNeedsApiKey":"Add a valid API key for this provider to load its live model list.","modelCatalogUnavailable":"Could not load the provider's model list.","modelCatalogRefreshFailed":"Failed to refresh the model catalog","capability":{"chat":"Chat","embedding":"Embedding","image":"Image","speech":"Speech","transcription":"Transcription"},"exportPlugin":"Export plugin","deletePlugin":"Delete plugin","apiKey":{"title":"API Key","placeholder":"Enter API key","save":"Save Key","remove":"Remove Key","configured":"API Key Configured","notConfigured":"API Key Required","saved":"API key saved successfully","removed":"API key removed","saveFailed":"Failed to save API key","removeFailed":"Failed to remove API key","enterKey":"Please enter an API key"},"variables":"Variables"},"generation":{"title":"Generation Options","description":"Configure how the AI generates responses","scopeLabel":"Applies to","scopeAll":"All models","scopeModel":"Only {{model}}","scopeAllHint":"The values every model uses unless it has its own.","scopeModelHint":"Saved for this model alone, and it wins over the values above.","advancedSettings":"Advanced generation settings","advancedSettingsDescription":"Sampling, token limits, context, penalties, and stop sequences","coreParameters":"Core Parameters","temperature":"Temperature","temperatureDescription":"Controls randomness. Lower values are more focused, higher values more creative.","topP":"Top P","topPDescription":"Controls diversity via nucleus sampling. Lower values focus on likely tokens.","topK":"Top K","topKDescription":"Limits token selection to top K most likely. Set to 0 to disable.","minP":"Min P","minPDescription":"Minimum probability threshold for token selection.","generationControl":"Generation Control","maxTokens":"Max Tokens","maxTokensDescription":"Maximum number of tokens to generate in the response.","repeatPenalty":"Repeat Penalty","repeatPenaltyDescription":"Penalizes repeated tokens. Higher values reduce repetition.","contextLength":"Context Length","contextLengthDescription":"Maximum context window size for conversations.","seed":"Seed","optional":"optional","random":"Random","seedDescription":"Set a specific seed for reproducible outputs.","advancedOptions":"Advanced Options","presencePenalty":"Presence Penalty","presencePenaltyDescription":"Penalizes tokens that appear in the context.","frequencyPenalty":"Frequency Penalty","frequencyPenaltyDescription":"Penalizes frequently used tokens.","stopSequences":"Stop Sequences","commaSeparated":"comma separated","stopSequencesDescription":"Custom tokens that will stop generation when encountered.","resetDefaults":"Reset to Defaults","saveOptions":"Save Options","embeddingSettings":"Embedding Settings","enableEmbeddings":"Enable Document Embeddings"},"documents":{"title":"Document Settings","embeddings":{"title":"Embeddings","enable":"Enable document embeddings","model":"Embedding Model","modelDescription":"Select the model used for document embedding","chunkSize":"Chunk Size","chunkSizeInTokens":"(in tokens)","chunkSizeDescription":"Size of text chunks for embedding","chunkOverlap":"Chunk Overlap","chunkOverlapInTokens":"(in tokens)","chunkOverlapDescription":"Overlap between consecutive chunks","similarityThreshold":"Similarity Threshold","similarityDescription":"Minimum similarity score to include results","status":"Embedding Status","statusLabel":"Status","available":"Available","unavailable":"Unavailable","chunksWithEmbeddings":"Chunks with embeddings","coverage":"Coverage","regenerate":"Regenerate Embeddings","regenerating":"Regenerating..."},"collections":{"title":"Knowledge collections","description":"Group documents into collections and attach them to any chat.","namePlaceholder":"Collection name","create":"Create","none":"No collection","deleteConfirm":"Delete this collection? Documents inside are kept."}},"tts":{"title":"Text-to-Speech","description":"Configure text-to-speech settings for reading messages aloud","loadingProviders":"Loading TTS providers...","noProviders":"No TTS Providers","noProvidersDescription":"Configure a plugin with TTS support to enable text-to-speech","enable":"Enable TTS","enableDescription":"Allow text-to-speech for assistant messages","autoPlay":"Auto-play Responses","autoPlayDescription":"Automatically read new assistant messages aloud","streamSentences":"Stream Sentences","streamSentencesDescription":"Play audio sentence by sentence instead of waiting for the full message. Recommended for local TTS to avoid timeouts on long messages.","voiceConfiguration":"Voice Configuration","model":"TTS Model","modelDescription":"Select the model for text-to-speech generation","voice":"Voice","selectVoice":"Select a voice","voiceDescription":"Choose the voice for text-to-speech","speed":"Speed","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Available Providers","models":"models","test":"Test","testing":"Testing...","stop":"Stop"},"imageGen":{"title":"Image Generation","description":"Configure image generation settings and providers","loadingProviders":"Loading image generation providers...","noProviders":"No Image Generation Providers","noProvidersDescription":"Configure a plugin with image generation support","enable":"Enable Image Generation","enableDescription":"Allow AI image generation in conversations","configuration":"Configuration","model":"Model","modelDescription":"Select the model for image generation","size":"Size","sizeDescription":"Resolution of generated images","quality":"Quality","qualityDescription":"Quality level of generated images","style":"Style","styleDescription":"Style preset for generated images","availableProviders":"Available Providers","models":"models"},"data":{"title":"Data Management","export":"Export Data","exportDescription":"Download all your data including preferences, sessions, and documents.","exportAll":"Export All Data","import":"Import Data","importDescription":"Import data from a previous export.","importData":"Import Data","importing":"Importing...","clearSessions":"Clear Sessions","clearSessionsDescription":"Delete all chat sessions. This action cannot be undone.","clearAll":"Clear All","clearing":"Clearing...","importOptions":"Import Options","importOptionsDescription":"Choose how to handle existing data","skipDuplicates":"Skip duplicates","overwrite":"Overwrite existing","importResults":"Import Results","preferences":"Preferences","imported":"Imported","failed":"Failed","sessions":"Sessions","importedLabel":"imported","skipped":"skipped","documents":"Documents","errors":"Errors","archivedChats":{"title":"Archived chats","empty":"No archived chats","unarchive":"Unarchive"}},"about":{"title":"About","versionLabel":"Version","ollama":{"title":"Ollama Status","version":"Version","healthy":"Healthy","unhealthy":"Unhealthy"},"stats":{"models":"Models","sessions":"Sessions"},"features":{"privacy":{"title":"Privacy First","description":"Your data stays on your device"},"openSource":{"title":"Open Source","description":"Free and open source software"},"localInference":{"title":"Local Inference","description":"Run AI models locally with Ollama"}},"openSourceBy":"Open source by {{company}}","links":{"title":"Links","github":"GitHub","githubDescription":"View source code and contribute","website":"Website","websiteDescription":"Visit our website","ollama":"Ollama","ollamaDescription":"Learn more about Ollama","documentation":"Documentation","reportIssue":"Report Issues","reportIssueDescription":"Bug reports & feature requests","gitlab":"GitLab Mirror","gitlabDescription":"Self-hosted GitLab repository","documentationDescription":"Guides, tutorials and API reference"},"version":"Version {{version}}"},"groups":{"general":"General","chat":"Chat","media":"Speech & images","connections":"Connections"},"search":{"title":"Web search","description":"Search the web through a self-hosted SearXNG instance. When enabled, the chat composer offers a search toggle and Work tasks with network access can search.","enableLabel":"Enable web search","enableDescription":"Offer web search to chats and Work tasks. Searches run server-side against the configured instance.","urlLabel":"SearXNG URL","urlDescription":"Base URL of the SearXNG instance, reachable from the server. The bundled private deploy stack provides http://searxng:8080.","maxResultsLabel":"Results per search","maxResultsDescription":"How many results feed a reply or tool call, 1-10.","maxResultsInvalid":"Results per search must be between 1 and 10.","safeSearchLabel":"Safe search","safeSearchDescription":"Ask the engine to filter explicit results.","test":"Test connection","testing":"Testing…","testOk":"Search works — {{results}} results returned","testFailed":"Search test failed","save":"Save","saved":"Search settings saved","saveFailed":"Could not save the search settings"}}`),models:{title:`Models`,subtitle:`Pull, manage, and monitor your Ollama models`,installed:`Installed Models`,available:`Available Models`,pull:`Pull Model`,pulling:`Pulling...`,delete:`Delete Model`,deleting:`Deleting...`,size:`Size`,modified:`Modified`,family:`Family`,parameters:`Parameters`,quantization:`Quantization`,noModels:`No models installed`,pullFirst:`Pull a model to get started`,noModelsFound:`No models found`},personas:{title:`Personas`,create:`Create Persona`,edit:`Edit Persona`,delete:`Delete Persona`,name:`Name`,description:`Description`,systemPrompt:`System Prompt`,model:`Model`,avatar:`Avatar`,background:`Background`,noPersonas:`No personas created`,createFirst:`Create your first persona to customize your chat experience`},gallery:{title:`Gallery`,subtitle:`Your AI-generated images, videos, and audio`,imageCount:`{{count}} images`,generate:`Generate Image`,generateDescription:`Create images with AI`,generating:`Generating...`,prompt:`Prompt`,promptPlaceholder:`Describe the image you want to generate...`,noImages:`No images generated yet`,download:`Download`,delete:`Delete`,regenerate:`Regenerate`,model:`Model`,size:`Size`,quality:`Quality`,created:`Created`},errors:{generic:`An error occurred`,network:`Network error. Please check your connection.`,unauthorized:`You are not authorized to perform this action.`,notFound:`The requested resource was not found.`,serverError:`Server error. Please try again later.`,validation:`Please check your input and try again.`},keyboard:{title:`Keyboard Shortcuts`,toggleSidebar:`Toggle sidebar`,openSettings:`Open settings`,toggleDarkMode:`Toggle dark mode`,showShortcuts:`Show keyboard shortcuts`,closeModals:`Close modals`,groups:{navigation:`Navigation`,general:`General`,chat:`Chat`,workspace:`Workspace`},actions:{sendMessage:`Send message`,newLine:`New line in message`,saveEdit:`Save an edited message`,cancelEdit:`Cancel editing`,saveFile:`Save file`,formatCode:`Format code`},description:`Every keyboard shortcut available in Libre WebUI.`,newChat:`New chat`,newWork:`New Work session`,openPalette:`Open command palette`},modelManager:{title:`Models`,loading:`Loading models...`,systemStatus:{online:`Ollama Online`,offline:`Ollama Offline`,models:`model`,models_plural:`models`,running:`running`,vram:`VRAM`},sections:{pull:`Pull New Model`,library:`Browse Library`,huggingface:`HuggingFace Hub`,running:`Running Models`,local:`Local Models`,advanced:`Advanced Actions`},pull:{placeholder:`Enter model name (e.g., llama3.2:3b, deepseek-r1:14b)`,button:`Pull`,cancel:`Cancel`,popular:`Popular models:`,browseAll:`Browse all models on ollama.com`,success:`Model {{name}} pulled successfully`,cancelled:`Model pull cancelled`,failed:`Failed to pull model`,enterName:`Please enter a model name`,restricted:`Model installation is restricted to administrators on this instance.`},progress:{starting:`Initializing...`,pulling:`Downloading model...`,pullingLayer:`pulling`,verifying:`Verifying integrity...`,verifyingDigest:`verifying sha256 digest`,writing:`Writing manifest...`,cleaning:`Cleaning up...`},library:{available:`available`,search:`Search models...`,noResults:`No models found matching your criteria`,installed:`Installed`,more:`+{{count}} more`,refresh:`Refresh Library`},huggingface:{browseAll:`Browse all on HuggingFace`,checkingGguf:`Checking for GGUF files...`,noGgufAvailable:`No GGUF files available for direct Ollama pull`,ggufFilesCount:`GGUF Files ({{count}}) - Pull directly to Ollama`,noModelsFound:`No models found`,noResults:`No models found. Try adjusting your search or filters.`,browseAllLink:`Browse all`,search:`Search HuggingFace models...`,by:`by`,gated:`Gated`,viewOnHF:`View on HuggingFace`,sortDownloads:`Downloads`,sortLikes:`Likes`,sortRecent:`Recent`,taskTextGeneration:`Text Generation`,taskTextToSpeech:`Text to Speech`,taskTextToImage:`Text to Image`,taskSpeechRecognition:`Speech Recognition`,tasks:{textGen:`Text Generation`,tts:`Text to Speech`,image:`Text to Image`,stt:`Speech Recognition`},sort:{downloads:`Most Downloads`,likes:`Most Liked`,recent:`Recently Updated`}},local:{noModels:`No models installed yet`,pullToStart:`Pull a model above to get started`,installed:`installed`,running:`Running`,info:`Info`,copy:`Copy`,delete:`Delete`,deleteConfirm:`Are you sure you want to delete model "{{name}}"?`,deleteSuccess:`Model {{name}} deleted successfully`,deleteFailed:`Failed to delete model`},advanced:{createModel:`Create Model`,fromModelfile:`From Modelfile`,copyModel:`Copy Model`,duplicateExisting:`Duplicate existing`,testEmbeddings:`Test Embeddings`,generateVectors:`Generate vectors`,healthCheck:`Health Check`,testConnection:`Test connection`,healthy:`Ollama is healthy!`},modals:{details:{title:`Model Details`,info:`Model Information`,family:`Family`,parameters:`Parameters`,quantization:`Quantization`,format:`Format`,systemPrompt:`System Prompt`,template:`Template`,license:`License`,modelfile:`Modelfile`,noDetails:`No details available`},copy:{title:`Copy Model`,source:`Source Model`,selectModel:`Select a model...`,newName:`New Model Name`,placeholder:`e.g., my-custom-model`,copying:`Copying...`,button:`Copy Model`,success:`Model copied to {{name}}`,failed:`Failed to copy model`,enterBoth:`Please enter both source and destination names`},create:{title:`Create Custom Model`,name:`Model Name`,namePlaceholder:`e.g., my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
- SYSTEM You are a helpful assistant.`,see:`See`,docs:`Modelfile docs`,docsLink:`for syntax reference`,creating:`Creating...`,button:`Create Model`,success:`Model {{name}} created successfully`,failed:`Failed to create model`,enterBoth:`Please enter model name and Modelfile content`},embeddings:{title:`Test Embeddings`,model:`Embedding Model`,selectModel:`Select a model...`,recommended:`Recommended: nomic-embed-text, mxbai-embed-large`,input:`Input Text`,placeholder:`Enter text to generate embeddings for...`,generating:`Generating...`,button:`Generate Embeddings`,result:`Result ({{count}} dimensions)`,success:`Generated {{count}}-dimensional embedding vector`,failed:`Failed to generate embeddings`,enterBoth:`Please select a model and enter text`}}},personaManager:{title:`Personas`,subtitle:`Create and manage AI personas with custom personalities, memories, and behaviors`,loading:`Loading personas...`,createButton:`Create Persona`,importExport:`Import/Export`,stats:{title:`Your Personas`,count:`{{count}} persona created`,count_plural:`{{count}} personas created`},empty:{title:`No personas yet`,description:`Create your first persona to get started with personalized AI interactions`,button:`Create Your First Persona`},deleteConfirm:`Are you sure you want to delete "{{name}}"?`,deleteSuccess:`Persona "{{name}}" deleted successfully`,downloadSuccess:`Persona "{{name}}" downloaded successfully`,failed:`Failed to {{action}} persona`},personaForm:{title:{create:`Create New Persona`,edit:`Edit Persona`},subtitle:{create:`Create a new AI persona with custom personality, memory systems, and adaptive learning capabilities`,edit:`Customize your AI persona with advanced memory, adaptive learning, and intelligent parameters`},loading:`Loading form...`,saved:`Saved`,tabs:{basic:`Basic`,parameters:`Parameters`,memory:`Memory & Learning`,advanced:`Advanced`},basic:{name:`Name`,namePlaceholder:`Enter persona name`,model:`Model`,selectModel:`Select a model`,description:`Description`,descriptionPlaceholder:`Describe your persona...`,systemPrompt:`System Prompt`,systemPromptPlaceholder:`Enter the system prompt that defines your persona behavior...`,systemPromptHint:`The system prompt defines how your persona will behave and respond.`},parameters:{temperature:`Temperature`,temperatureHint:`Controls creativity vs consistency`,topP:`Top-P`,topPHint:`Controls response diversity`,topK:`Top-K`,topKHint:`Limits vocabulary to top-k tokens`,contextWindow:`Context Window`,contextWindowHint:`Maximum conversation history length`,maxTokens:`Max Tokens`,maxTokensHint:`Maximum response length`,repeatPenalty:`Repeat Penalty`,repeatPenaltyHint:`Reduces repetitive responses`},memory:{title:`Memory System`,subtitle:`Persona remembers conversations over time`,enableHint:`Enable the memory system to let your persona remember conversations and build context over time.`,loading:`Loading memory status...`,noData:`No memory data yet`,memories:`Memories`,mbUsed:`MB Used`,lastBackup:`Last Backup`,never:`Never`,maxMemories:`Maximum Memories`,maxMemoriesHint:`How many memories this persona can store`,retention:`Memory Retention`,retentionHint:`Days to keep memories before cleanup`,autoCleanup:`Auto-cleanup old memories`,wipeAll:`Wipe All Memories`,wipeCannot:`This cannot be undone`,wipeButton:`Wipe`,wiping:`Wiping...`,wipeConfirm:`Are you sure you want to wipe all memories? This cannot be undone.`,wipeSuccess:`Wiped {{count}} memories`},learning:{title:`Adaptive Learning`,subtitle:`Persona evolves based on interactions`,enableHint:`Enable adaptive learning to let your persona evolve and personalize responses based on your interactions.`,speed:`Learning Speed`,slow:`Slow`,slowDesc:`Gradual changes`,balanced:`Balanced`,balancedDesc:`Moderate pace`,fast:`Fast`,fastDesc:`Quick adaptation`,autoAdapt:`Auto-adapt to user preferences`,whatLearns:`What the persona learns:`,conversationTone:`Conversation tone`,responseStyle:`Response style`,userPreferences:`User preferences`,topicInterests:`Topic interests`},advanced:{embeddingModel:`Embedding Model`,embeddingHint:`Select the model used for memory encoding and semantic search. Embedding models are shown first, followed by other available models.`,noModels:`No models found`,embeddingModels:`Embedding Models`,otherModels:`Other Models`,installHint:`Install an embedding model:`,recommended:`Recommended: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`About Advanced Settings`,aboutDescription:`The embedding model is used by the memory system to understand semantic meaning and find relevant memories during conversations. Choose a model that matches your use case and available resources.`},actions:{cancel:`Cancel`,save:`Save`,saving:`Saving...`,saveClose:`Save & Close`,create:`Create`},success:{created:`Persona created`,updated:`Persona updated`},error:{saveFailed:`Failed to save`}},personaCard:{enhanced:`Enhanced`,systemPrompt:`System Prompt`,memories:`memories`,use:`Use`,editTooltip:`Edit persona`,downloadTooltip:`Download persona`,backup:`Backup`,exportDNA:`Export DNA`,wipeMemories:`Wipe Memories`,wipeConfirm:`Are you sure you want to wipe all memories for this persona? This action cannot be undone.`,wipeSuccess:`Wiped {{count}} memories`,backupSuccess:`Persona backup downloaded successfully`,dnaSuccess:`Persona DNA exported successfully`,failed:`Failed to {{action}}`},userManager:{title:`User Management`,subtitle:`Manage user accounts and permissions`,pageDescription:`Manage user accounts, permissions, and access controls for your Libre WebUI instance.`,loading:`Loading users...`,createUser:`Create User`,search:`Search users...`,noUsers:`No users found`,noUsersMatching:`No users matching your search`,columns:{user:`User`,email:`Email`,role:`Role`,created:`Created`,actions:`Actions`},roles:{admin:`Admin`,user:`User`},noEmail:`No email`,deleteConfirm:`Are you sure you want to delete user "{{name}}"?`,deleteSuccess:`User deleted successfully`,deleteFailed:`Failed to delete user`,cannotDeleteSelf:`You cannot delete your own account`,approval:{title:`Pending approvals`,description:`Review new registrations before allowing them into this instance.`,registered:`Registered`,activate:`Activate account`,reject:`Reject registration`,approved:`{{name}} can now sign in.`,failed:`The account could not be approved.`,notification:`{{count}} registration(s) are waiting for your approval.`,notificationBadge:`{{count}} pending user approvals`},form:{title:{create:`Create User`,edit:`Edit User`},username:`Username`,usernamePlaceholder:`Enter username`,email:`Email`,emailPlaceholder:`Enter email (optional)`,password:`Password`,passwordPlaceholder:`Enter password`,passwordHint:`Leave blank to keep current password`,role:`Role`,creating:`Creating...`,updating:`Updating...`,createButton:`Create User`,updateButton:`Update User`,createSuccess:`User created successfully`,updateSuccess:`User updated successfully`,createFailed:`Failed to create user`,updateFailed:`Failed to update user`},workAccess:{title:`Work access`,description:`Allow all active users to create and run Work tasks in isolated sandboxes. Administrators always have access; host folder workspaces remain admin-only.`,saved:`Work access updated`,saveFailed:`Could not update Work access`},workPolicies:{title:`Work policies`,description:`Named runtime presets (image, limits, idle stop) a task can be created under. Empty fields inherit the global defaults.`,add:`Add policy`,name:`Name`,image:`Image`,memory:`Memory`,cpu:`CPUs`,pids:`PID limit`,workspaceSize:`Workspace size`,idleMinutes:`Idle stop (minutes)`,networkDefault:`Network default`,networkInherit:`Inherit default`,networkOn:`Enabled`,networkOff:`Disabled`,save:`Save`,cancel:`Cancel`,edit:`Edit policy`,delete:`Delete policy`,deleteConfirm:`Delete this policy? Tasks using it fall back to the global defaults.`,empty:`No policies yet. Tasks use the global runtime defaults.`,saved:`Work policy saved`,deleted:`Work policy deleted`,failed:`Could not save the Work policy`,invalidNumber:`PID limit and idle stop must be numbers.`},modelAccess:{title:`Model downloads`,description:`Allow all active users to pull models from Ollama and the Hugging Face browser. Administrators can always download models.`,saved:`Model download access updated`,saveFailed:`Could not update model download access`},webSearchAccess:{title:`Web search`,description:`Allow all active users to use web search in chats and Work tasks. Administrators can always use it. Configure the engine in Settings > Search.`,saved:`Web search access updated`,saveFailed:`Could not update web search access`},agentAccess:{title:`Agents`,description:`Offer the Agents section (Libre Claw) to administrators. Agent CLIs run on the host as the server user, outside the Work sandbox.`,saved:`Agent access updated`,saveFailed:`Could not update agent access`,lockedByEnv:`Pinned by the AGENT_CLI_MODELS_ENABLED environment variable.`}},usageAnalytics:{eyebrow:`Administration`,title:`Provider Usage`,description:`Follow outbound API calls and model consumption across the enabled plugins on this instance.`,days:`{{count}} days`,refresh:`Refresh usage`,loadFailed:`Provider usage could not be loaded.`,metrics:{calls:`Calls`,tokens:`Tokens`},cards:{calls:`API calls`,callsDetail:`Across {{count}} active user(s)`,tokens:`Reported tokens`,tokensDetail:`Usage reported on {{count}} call(s)`,success:`Success rate`,successDetail:`{{count}} failed call(s)`,latency:`Average latency`,latencyDetail:`End-to-end provider time`},activity:{title:`Consumption over time`,callsDescription:`Daily outbound requests to enabled plugins`,tokensDescription:`Daily token totals reported by providers`,chartLabel:`Daily provider {{metric}} chart`},models:{title:`Model consumption`,description:`The models carrying the most traffic in this period.`,model:`Model`,success:`Success`,latency:`Latency`},providers:{title:`Enabled plugin traffic`},capabilities:{title:`Capability mix`,characters:`{{count}} characters`,images:`{{count}} images`,jobs:`{{count}} video jobs`,inputs:`{{count}} inputs`,reportedTokens:`{{count}} reported tokens`},empty:{title:`No provider calls yet`,description:`Calls will appear here after an enabled plugin handles chat, Work, embedding, image, speech, sound, or video requests.`},privacyNote:`Usage is metered on the server at the outbound plugin boundary. Libre WebUI stores provider, model, timing, status, and reported counters—never prompts, responses, endpoints, credentials, or provider error bodies. Token totals include only calls where the provider returned usage metadata.`,heatmap:{title:`A year of activity`,description:`Daily provider calls over the past year, colored by each day's most-used model.`,calls:`calls`,noCalls:`No calls`,other:`Other models`,less:`Less`,more:`More`,yearTotal:`{{formatted}} calls in the last year`}},systemPage:{eyebrow:`Administration`,title:`System`,description:`Monitor the machine and runtime hosting this Libre WebUI instance.`,updated:`Updated {{date}}`,refresh:`Refresh system information`,loadFailed:`System information could not be loaded.`,cards:{uptime:`Host uptime`,uptimeDetail:`Running since {{date}}`,memory:`Memory used`,memoryDetail:`{{used}} of {{total}}`,freeSpace:`Free space`,freeSpaceDetail:`{{label}} · {{total}} total`,containers:`Running containers`,containersDetail:`{{total}} container(s) known to Docker`,dockerUnavailable:`Docker unavailable`,unavailable:`Unavailable`},host:{title:`Host & runtime`,description:`Operating system, processor, and Libre WebUI process details.`,container:`Container runtime`,native:`Native runtime`,hostname:`Hostname`,operatingSystem:`Operating system`,processor:`Processor`,logicalCpus:`logical CPUs`,loadAverage:`Load average · 1 / 5 / 15 min`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Process`,workingDirectory:`Working directory`},memory:{title:`Memory`,description:`Runtime-visible system memory and application process usage.`,usedOf:`{{used}} used of {{total}}`,free:`{{value}} free`,processRss:`Process RSS`,heapUsed:`V8 heap used`,heapTotal:`V8 heap total`,external:`External memory`},storage:{title:`Storage`,description:`Available space for the runtime filesystem and persistent application data.`,used:`{{value}} used`,free:`{{value}} free`,empty:`Filesystem information is unavailable in this runtime.`},docker:{title:`Docker`,description:`Read-only Docker Engine status and a reduced list of containers.`,connected:`Connected`,unavailable:`Unavailable`,unavailableDetail:`Docker Engine diagnostics are unavailable.`,socketStatus:`Local socket: {{status}}`,mounted:`mounted`,notMounted:`not mounted`,running:`Running`,stopped:`Stopped`,paused:`Paused`,total:`Total`,version:`Version`,host:`Host`,architecture:`Architecture`,cpus:`CPUs`,memory:`Memory`,container:`Container`,image:`Image`,state:`State`,created:`Created`,empty:`Docker is connected and no containers are currently listed.`},network:{title:`Network`,description:`Runtime-visible interfaces, addresses, and Linux traffic counters.`,internal:`internal`,empty:`No network interfaces are visible to the application runtime.`},securityNote:`This page is restricted to administrators. The server returns operational summaries only: it does not expose environment variables, credentials, Docker labels, mounts, container commands, or inspect payloads. When Libre WebUI runs in a container, host-level CPU and memory details come from Docker Engine when its local socket is available; other values describe the application runtime.`,work:{title:`Work`,description:`Sandboxes across every user`,access:`Access`,accessAdmins:`Administrators only`,accessAllUsers:`All users`,runtimeAvailable:`Available`,runtimeUnavailable:`Unavailable`,activeRuntimes:`Active runtimes`,pendingCleanups:`Pending cleanups`,orphans:`Orphaned containers`,owner:`Owner`,task:`Task`,state:`State`,preview:`Preview`,terminals:`Terminals`,updated:`Updated`,stateRunning:`Running`,stateStopped:`Stopped`,stateStarting:`Starting`,stateUnknown:`Unknown`,noTasks:`No Work tasks yet.`}},chatHistory:{label:`Conversation history`,jumpToTurn:`Jump to turn {{index}} of {{total}}`},chatMessage:{you:`You`,assistant:`Assistant`,system:`System`,copy:`Copy`,copyMessage:`Copy message`,copied:`Copied!`,regenerate:`Regenerate`,regenerateResponse:`Regenerate response`,edit:`Edit`,editSystemMessage:`Edit system message`,saveChanges:`Save changes`,cancelEditing:`Cancel editing`,saveAndSubmit:`Save & submit`,goodResponse:`Good response`,badResponse:`Bad response`,delete:`Delete`,deleteConfirm:`Delete this message?`,branch:`Branch`,speaking:`Speaking...`,speakMessage:`Speak message`,stopSpeaking:`Stop speaking`,showMore:`Show more`,showLess:`Show less`,thinking:`Thinking`,thoughtFor:`Thought for {{duration}}`,hiddenLines:`{{count}} hidden lines`,systemMessagePlaceholder:`Enter your system message...`,fullSizeImage:`Full size image`,startConversation:`Start a conversation`,startConversationDescription:`Send a message to begin chatting with your AI assistant. Ask questions, get help with code, or have a natural conversation.`,scrollToBottom:`Scroll to bottom`,newMessages:`New messages`},imageGallery:{title:`Image Gallery`,noImages:`No images yet`,noImagesHint:`Generate your first image using the panel on the right`,delete:`Delete`,download:`Download`,deleteConfirm:`Are you sure you want to delete this image?`,deleteSuccess:`Image deleted`,deleteFailed:`Failed to delete image`,downloadFailed:`Failed to download image`,loadMore:`Load More ({{current}} of {{total}})`,loadFailed:`Failed to load gallery`},imageGeneration:{title:`Generate Image`,prompt:`Prompt`,promptPlaceholder:`Describe the image you want to create...`,model:`Model`,selectModel:`Select model`,noModels:`No image generation models available`,configurePlugin:`Configure a plugin with image generation support`,size:`Size`,quality:`Quality`,style:`Style`,generate:`Generate`,generating:`Generating...`,success:`Image generated successfully`,failed:`Failed to generate image`,enterPrompt:`Please enter a prompt`,promptTooLong:`Prompt exceeds maximum length of {{max}} characters`},mediaGeneration:{title:`Generate media`,description:`Create video, sound, music, or speech with an activated media provider.`,image:`Image`,video:`Video`,audio:`Audio`,sound:`Sound`,speech:`Speech`,model:`Model`,voice:`Voice or voice ID`,resolution:`Resolution`,aspectRatio:`Aspect ratio`,duration:`Duration`,providerDefault:`Provider default`,generateAudio:`Generate audio with the video when supported`,prompt:`Prompt`,text:`Text to speak`,videoPlaceholder:`Describe the scene, motion, camera, and lighting...`,audioPlaceholder:`Enter the text you want the voice to speak...`,soundPlaceholder:`Describe the sound, music, atmosphere, or spoken response you want...`,generate:`Generate`,generating:`Generating… this can take several minutes`,success:`Media generated and saved to Imagine`,failed:`Failed to generate media`,loadFailed:`Failed to load media providers`,noModels:`No {{kind}} models are available. Activate a compatible provider and save its credential first.`},mediaGallery:{itemCount:`{{count}} items`,empty:`No generated media yet`,emptyHint:`Generate an image, video, or voice clip and it will appear here.`,filters:{all:`All`,image:`Images`,video:`Videos`,audio:`Audio`}},errorBoundary:{title:`Something went wrong`,description:`We encountered an unexpected error. Please try refreshing the page.`,tryAgain:`Refresh Page`,goHome:`Go to Home`,errorDetails:`Error Details (Development)`},documents:{title:`Documents`,upload:`Upload Document`,uploading:`Uploading...`,noDocuments:`No documents uploaded`,uploadHint:`Upload documents to use in your conversations`,delete:`Delete`,deleteConfirm:`Are you sure you want to delete this document?`,deleteSuccess:`Document deleted`,deleteFailed:`Failed to delete document`,uploadSuccess:`Document uploaded successfully`,uploadFailed:`Failed to upload document`,types:`Supported: PDF, TXT, MD, DOCX`,unsupportedFileType:`Only PDF and TXT files are supported`,fileSizeTooLarge:`File size must be less than 10MB`,uploadSuccessWithName:`Document "{{name}}" uploaded successfully`,removeSuccess:`Document removed successfully`,removeFailed:`Failed to remove document`,removeError:`An error occurred while removing the document`,clickToUpload:`Click to upload`,orDragAndDrop:`or drag and drop`,fileTypesAndSize:`PDF or TXT files up to 10MB`,uploadedDocuments:`Uploaded Documents`,removeDocument:`Remove document`},ttsButton:{speak:`Speak`,stop:`Stop`,speaking:`Speaking...`,generateFailed:`Failed to generate speech`,playbackFailed:`Audio playback failed`,stopSpeaking:`Stop speaking`,generatingSpeech:`Generating speech...`,readAloud:`Read aloud`},artifacts:{title:`Artifacts`,code:`Code`,preview:`Preview`,copy:`Copy code`,copied:`Copied!`,download:`Download`,expand:`Expand`,collapse:`Collapse`,openInNewTab:`Open in new tab`,invalidSvg:`Invalid SVG content`,invalidJson:`Invalid JSON content`,previewMode:`Preview mode`,codeMode:`Code mode`,copyContent:`Copy content`,openInPanel:`Open in panel`,openInNewWindow:`Open in new window`,created:`Created`,closePanelEsc:`Close panel (Esc)`,copyButton:`Copy`,open:`Open`,dragEdgeToResize:`Drag edge to resize`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Version {{current}} of {{total}}`,previousVersion:`Previous version`,nextVersion:`Next version`},personaImportExport:{title:`Import & Export Personas`,description:`Export your personas to share them or import personas from others`,exportPersonas:`Export Personas`,importPersonas:`Import Personas`,noPersonasToExport:`No personas to export`,personasAvailable:`{{count}} persona available`,personasAvailable_plural:`{{count}} personas available`,exportAll:`Export All`,uploadJsonFile:`Upload JSON File`,pasteJsonLabel:`Paste JSON Data`,pasteJsonPlaceholder:`Paste persona JSON data here...`,importing:`Importing...`,importButton:`Import Persona(s)`,expectedFormat:`Expected JSON Format:`,exportSuccess:`Persona "{{name}}" exported successfully`,exportFailed:`Failed to export persona`,exportAllSuccess:`All {{count}} personas exported successfully`,exportAllFailed:`Failed to export personas`,pasteJsonData:`Please paste the persona JSON data`,importMultipleSuccess:`Successfully imported {{count}} personas`,importMultipleFailed:`Failed to import {{count}} personas`,importNoneFailed:`Failed to import any personas`,importSuccess:`Persona imported successfully`,importFailed:`Failed to import persona`},generationStats:{details:`Details`,promptTokens:`Prompt tokens:`,generatedTokens:`Generated tokens:`,totalTokens:`Total tokens:`,speed:`Speed:`,promptEval:`Prompt eval:`,generation:`Generation:`,modelLoad:`Model load:`,totalTime:`Total time:`,generatedAt:`Generated at:`},userMenu:{loggedOut:`Logged out successfully`,pictureUpdated:`Profile picture updated`,failedUpdateAvatar:`Failed to update avatar`,failedUpdatePicture:`Failed to update profile picture`,noEmail:`No email provided`,changePicture:`Change Picture`,settings:`Settings`,userManagement:`User Management`,signOut:`Sign Out`,changeProfilePicture:`Change Profile Picture`},pluginManager:{title:`Plugin Manager`,upload:`Upload`,addJson:`Add JSON`,browseHF:`Browse HF Hub`,confirmDelete:`Are you sure you want to delete this plugin?`,uploading:`Uploading plugin...`,pasteJson:`Paste plugin JSON here...`,installPlugin:`Install Plugin`,loading:`Loading plugins...`,noPlugins:`No Plugins Installed`,noPluginsDescription:`Upload a plugin file or add a plugin from JSON to get started.`,active:`Active`,id:`ID`,endpoint:`Endpoint`,activate:`Activate`,deactivate:`Deactivate`,activePlugin:`Active Plugin`,activePluginDescription:`All chat requests will be routed through this plugin`,variables:{title:`Variables`,save:`Save`,saving:`Saving...`,saved:`Variables saved`,saveFailed:`Failed to save variables`,resetDefaults:`Reset to Defaults`,reset:`Variables reset to defaults`,resetFailed:`Failed to reset variables`,sensitiveSet:`Value is set (enter new value to change)`,showValue:`Show {{label}} value`,hideValue:`Hide {{label}} value`,connection:`Connection`,advanced:`Advanced parameters`,inherited:`Use provider default`,inheritedValue:`Use provider default ({{value}})`,enabled:`Enabled`,disabled:`Disabled`,required:`A value is required`,fullApiEndpoint:`Full API endpoint URL`,endpointHelp:`Enter the complete request URL, including its operation path (for example, /v1/chat/completions), not only the provider base URL.`,invalidUrl:`Enter a valid full API endpoint URL, for example https://provider.example/v1/chat/completions`,insecureUrl:`API endpoints must use HTTP or HTTPS.`,httpWarning:`HTTP does not encrypt credentials or traffic. Use it only on a trusted network.`,invalidBaseUrl:`Base URLs cannot contain a query string or fragment.`,invalidApiPath:`Must start with / and contain no URL, query, fragment, or .. segment`,tooLong:`Value is too long`}},huggingface:{title:`HuggingFace Model Browser`,subtitle:`Browse and select models from the Hub`,searchPlaceholder:`Search models...`,filters:`Filters`,task:`Task`,sortBy:`Sort By`,noModels:`No models found`,adjustSearch:`Try adjusting your search or filters`,gated:`Gated`,selected:`Selected`,select:`Select`,refresh:`Refresh`,modelsFound:`models found`},demoMode:{title:`Demo Mode`,github:`GitHub`},libreClaw:{title:`Agents`,subtitle:`Local agent runs, approvals, schedules, memory, tools, and usage.`,dashboard:`Dashboard`,connection:{disconnectedTitle:`Libre Claw daemon is not connected`,disconnectedDescription:`Start it locally with <command>libre-claw start</command> or set <env>LIBRE_CLAW_BASE_URL</env> in the backend environment.`},status:{connected:`Connected`,disconnected:`Disconnected`,activeRuns:`{{count}} active`,activeRuns_plural:`{{count}} active`},states:{queued:`Queued`,running:`Running`,blocked:`Blocked`,done:`Done`,failed:`Failed`,cancelled:`Cancelled`},startRun:{title:`Start Agent Run`,placeholder:`Ask Libre Claw to inspect a repo, fix a bug, run a review, schedule a report...`,chatRun:`Chat run`,goalMode:`Goal mode`,providerOverride:`Provider override`,modelOverride:`Model override`,run:`Run`},modelRoute:{title:`Model Route`,providerPlaceholder:`provider`,modelPlaceholder:`model`,persistGlobal:`Persist to Libre Claw global config`,saveModel:`Save model`,theme:`Libre Claw theme`,saveTheme:`Save theme`},runs:{title:`Runs`,empty:`No Libre Claw runs yet.`},timeline:{title:`Run Timeline`,empty:`Select a run to inspect its events.`,streaming:`Streaming...`,assistantResponse:`Assistant response`,resultOk:`ok`,resultError:`error`,labels:{userMessage:`User message`,toolCall:`Tool call`,toolResult:`Tool result`,approvalRequest:`Approval request`,approvalResponse:`Approval response`,runStarted:`Run started`,runFinished:`Run finished`,usage:`Usage`,error:`Error`}},approvals:{needed:`Approval needed`,allowOnce:`Allow once`,alwaysAllowTool:`Always allow tool`,deny:`Deny`,toolApprovalRequested:`Tool approval requested`},automations:{title:`Automations`,namePlaceholder:`Name`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Automation prompt`,create:`Create`,empty:`No scheduled Libre Claw automations.`,runNow:`Run now`,pause:`Pause`,resume:`Resume`,routes:{report:`Report`,telegram:`Telegram`},status:{active:`Active`,paused:`Paused`}},usageFallback:{title:`Usage And Fallback`,usage:`Usage`,fallbackRoute:`Fallback Route`,noUsage:`No usage records yet.`},metrics:{provider:`Provider`,model:`Model`,input:`Input`,output:`Output`,cached:`Cached`,reasoning:`Reasoning`,cost:`Cost`,tool:`Tool`,resolution:`Resolution`,state:`State`,stopReason:`Stop reason`,tokens:`{{formatted}} token`,tokens_plural:`{{formatted}} tokens`},fallbacks:{tool:`tool`,unknown:`unknown`,resolved:`resolved`,unknownError:`Unknown error`},toasts:{loadStatusFailed:`Could not load Libre Claw status`,enterTask:`Enter a task for Libre Claw`,runStarted:`Libre Claw run started`,startRunFailed:`Could not start Libre Claw run`,runCancelled:`Run cancelled`,cancelRunFailed:`Could not cancel run`,approved:`Approved`,denied:`Denied`,resolvePermissionFailed:`Could not resolve permission`,providerModelRequired:`Provider and model are required`,modelUpdated:`Libre Claw model updated`,updateModelFailed:`Could not update model`,themeUpdated:`Libre Claw theme updated`,updateThemeFailed:`Could not update theme`,automationRequired:`Automation name, schedule, and prompt are required`,automationCreated:`Automation created`,createAutomationFailed:`Could not create automation`,automationUpdated:`Automation updated`,updateAutomationFailed:`Could not update automation`}},work:{title:`Work`,subtitle:`Isolated model workspaces`,tasks:{title:`Work tasks`,subtitle:`Persistent local workspaces`,new:`New task`,emptyTitle:`No Work tasks yet`,empty:`Your Work tasks will appear here after you send the first message.`,untitled:`Untitled task`,actions:`Task actions`,delete:`Delete task`,deleteNamed:`Delete {{title}}`,deleteConfirm:`Delete “{{title}}” and its workspace permanently?`,close:`Close Work tasks`,open:`Open Work tasks`,rename:`Task title`,loading:`Loading task…`,notFound:`This Work task is unavailable`,back:`Start a new task`,status:`Status: {{status}}`},landing:{title:`Start a new Work task`,description:`Give a local or configured provider model a durable, isolated workspace. It can inspect files, run tools, and continue where it left off when you return.`,isolated:`Isolated`,isolatedBody:`Every task gets its own container and files.`,durable:`Durable`,durableBody:`Return to its conversation and workspace later.`,controlled:`Controlled`,controlledBody:`The runtime and task files stay isolated from the host.`},composer:{placeholder:`Describe what you want to build or change…`,model:`Work model`,noModels:`No Work-compatible models`,cancel:`Stop`,send:`Run`,hint:`Each task keeps its own files and history. Review model output before using it.`,remoteTitle:`Remote provider`,remoteHint:`Conversation and tool output are sent to the configured service. One autonomous run can make multiple provider calls and may incur charges. Workspace files stay local unless a tool returns their contents.`,remoteDismiss:`Dismiss`,remoteDismissLabel:`Dismiss remote provider notice`,remoteDismissFailed:`Could not save the remote provider preference.`,noModelSelected:`No Work-compatible model is selected.`},conversation:{ready:`Workspace ready`,empty:`Continue the task below. This conversation and its files stay attached to this workspace.`,loadOlder:`Load older messages`},status:{preparing:`Preparing isolated workspace…`,running:`Working in the local workspace…`},statusLabels:{idle:`Idle`,thinking:`Thinking`,complete:`Complete`,needsInput:`Needs input`,error:`Error`},live:{connecting:`Connecting to live updates…`,reconnecting:`Reconnecting to live updates…`,unavailable:`Live updates unavailable`,newActivity:`New activity`,skillsLoaded:`Workspace skills · {{count}}`},runtime:{unavailable:`Runtime unavailable`,ready:`Runtime ready`,readyOllama:`Docker ready`,readyPlugin:`Docker + plugin ready`,readyHybrid:`Docker + models ready`,reason:`Docker and an available Ollama or plugin model provider are required.`},workspace:{label:`Workspace views`,files:`Files`,activity:`Activity`,preview:`Preview`,resize:`Resize conversation and workspace`,resizeHint:`Drag to resize. Use arrow keys for precise control. Double-click or press Enter to reset.`,splitSize:`Conversation {{conversation}}%, workspace {{workspace}}%`,terminal:`Terminal`,git:`Git`},files:{discard:`Discard unsaved file changes?`,leaveWithDraft:`Leave this file? Your unsaved edit will remain as a browser draft.`,up:`Parent folder`,back:`Back to files`,empty:`No files in this folder yet.`,select:`Select a file to inspect and edit it.`,editorLabel:`File editor: {{path}}`,format:`Format`,formatted:`Code formatted.`,formatFailed:`Could not format this file.`,formatShortcut:`Format (Shift+Alt+F)`,formatTooLarge:`Formatting is limited to files under 100,000 characters and 4,000 lines.`,formatUnsupported:`Formatting is not available for this file type.`,saveShortcut:`Save (⌘/Ctrl+S)`,highlightPaused:`Live highlighting is paused for large files to keep editing responsive.`,plainTextLarge:`Plain text · large file`,changes:`Changes`,changesSince:`What changed since the last turn`,diffLabel:`Changes since the last turn: {{path}}`,diffFolded:`{{count}} unchanged lines`},activity:{empty:`Commands, file operations, and tool results will appear here.`,toolActivity:`Tool activity`,details:`Details`,kinds:{message:`Message`,toolCall:`Tool call`,toolResult:`Tool result`,error:`Error`}},preview:{command:`Optional start command`,start:`Start preview`,stop:`Stop preview`,open:`Open`,starting:`Starting preview…`,frameTitle:`Workspace preview`,failed:`The preview could not start. Check Activity, then try another command.`,empty:`Start the app inside this workspace to inspect it here.`},mobile:{surface:`Task surface`,conversation:`Conversation`,workspace:`Workspace`},toasts:{runFailed:`Could not start the Work task.`,updateFailed:`Could not update this task.`,renameFailed:`Could not rename this task.`,cancelled:`Work run stopped.`,cancelFailed:`Could not stop the Work run.`,deleteFailed:`Could not delete this Work task.`,saveFailed:`Could not save this file.`,saved:`File saved.`,previewFailed:`Could not start the preview.`,previewStopFailed:`Could not stop the preview.`},terminal:{connecting:`Opening a shell in the sandbox…`,closed:`Terminal session ended.`,failed:`The terminal session could not start.`,reconnect:`Reconnect`,unavailable:`The interactive terminal is not available in this deployment.`,blockedByRun:`The model is using this container. The terminal opens when the turn finishes.`,taskRunning:`Model turn in progress`},policy:{label:`Runtime policy`,default:`Default (global limits)`},git:{actionFailed:`Git action failed.`,blockedByPreview:`Stop the preview before changing Git state.`,blockedByRun:`Git write actions unlock when the model turn finishes.`,branchCreated:`Created {{name}}.`,branchSwitched:`Switched to {{name}}.`,clean:`Working tree is clean.`,commit:`Commit staged changes`,commitMessage:`Commit message`,committed:`Commit created.`,detached:`detached HEAD`,diff:`Diff preview`,diffFailed:`Could not load this diff.`,history:`Local history`,initialize:`Initialize Git`,initializeDescription:`Create a local repository for status, diffs, branches, and commits. No remote credentials are connected.`,initialized:`Git repository initialized.`,loadFailed:`Could not load Git status.`,localOnly:`Local Git only. Push, pull, and pull requests require a separate trusted credential broker.`,newBranch:`New local branch`,noCommits:`No commits yet.`,noDiff:`No textual diff is available yet. Untracked files appear after staging.`,notInitialized:`Git is not initialized`,selectChange:`Select a changed file to inspect its diff.`,selectPath:`Select {{path}}`,stageAll:`Stage all`,stageSelected:`Stage {{count}}`,staged:`Changes staged.`,switchBranch:`Switch local branch`,changes:`Changes`,createBranch:`Create`},hostWorkspace:{hint:`Leave blank for an isolated workspace, or point the task at a folder on this machine.`,label:`Workspace folder (optional)`,warning:`The task can read and write this folder directly. Leave blank to use an isolated workspace instead.`}},personaBackground:{label:`Background Image`,uploadBackgroundImage:`Upload background image`,dragAndDrop:`Drag and drop an image or click to browse`,chooseImage:`Choose Image`,uploading:`Uploading...`,enterImageUrl:`Or enter image URL`,supportedFormats:`Supports: JPG, PNG, GIF, WebP (max 5MB). Wide landscape images work best.`,customBackground:`Custom background image`,clickToChange:`Click to change or remove`,removed:`Background removed`,uploaded:`Background uploaded successfully`,invalidFile:`Please select a valid image file`,fileTooLarge:`Background image size must be less than 5MB`,readFailed:`Failed to read image file`,uploadFailed:`Failed to upload background image`},modelSelector:{searchInstalled:`Search installed models...`,searchOllama:`Search Ollama library...`,searchHuggingFace:`Search HuggingFace...`,selectModel:`Select a model`,personas:`Personas`,ollamaModels:`Ollama Models`,pluginModels:`Plugin Models`,actions:`Actions`,installed:`Installed`,use:`Use`,pull:`Pull`,pullRestricted:`Model installation is restricted to administrators on this instance.`,adminOnlyPull:`Admins only`,legacyProvider:`provider not recorded`,providerNotRecorded:`Provider not recorded`,providerUnavailable:`provider unavailable`,reselectProvider:`reselect a provider to pin this model`,unavailable:`unavailable`,unavailableSelections:`Unavailable selections`,agentModels:`Agents`},whatsNew:{title:`What's new`,releaseNotes:`Release notes`,cta:`Okay, let's go`},notes:{title:`Notes`,new:`New note`,untitled:`Untitled`,empty:`No notes yet`,selectOrCreate:`Select a note or create a new one`,contentPlaceholder:`Write in Markdown…`,saved:`Saved`,saveFailed:`Could not save the note`,createFailed:`Could not create a note`,deleteConfirm:`Delete this note?`,deleteFailed:`Could not delete the note`},home:{active:`active`,continue:`Continue`,start:`Start`,explore:`Explore`},palette:{empty:`No matches.`,placeholder:`Search chats, Work, actions…`,toggleTheme:`Toggle theme`,actions:`Actions`,chats:`Chats`,search:`Search`,settings:`Settings`,work:`Work`},tabs:{actions:`Tab actions`,close:`Close tab`,closeAll:`Close all tabs`,closeOthers:`Close other tabs`,closeRight:`Close tabs to the right`,home:`Home`,label:`Open tabs`,new:`New tab`,newWork:`New Work`,chat:`Chat`,newChat:`New Chat`,work:`Work`}},A={en:{translation:k}},j=[{code:`en`,name:`English`,nativeName:`English`,dir:`ltr`},{code:`ar`,name:`Arabic`,nativeName:`العربية`,dir:`rtl`},{code:`bn`,name:`Bengali`,nativeName:`বাংলা`,dir:`ltr`},{code:`cs`,name:`Czech`,nativeName:`Čeština`,dir:`ltr`},{code:`da`,name:`Danish`,nativeName:`Dansk`,dir:`ltr`},{code:`de`,name:`German`,nativeName:`Deutsch`,dir:`ltr`},{code:`es`,name:`Spanish`,nativeName:`Español`,dir:`ltr`},{code:`fr`,name:`French`,nativeName:`Français`,dir:`ltr`},{code:`hi`,name:`Hindi`,nativeName:`हिन्दी`,dir:`ltr`},{code:`id`,name:`Indonesian`,nativeName:`Bahasa Indonesia`,dir:`ltr`},{code:`is`,name:`Icelandic`,nativeName:`Íslenska`,dir:`ltr`},{code:`it`,name:`Italian`,nativeName:`Italiano`,dir:`ltr`},{code:`ja`,name:`Japanese`,nativeName:`日本語`,dir:`ltr`},{code:`ko`,name:`Korean`,nativeName:`한국어`,dir:`ltr`},{code:`ms`,name:`Malay`,nativeName:`Bahasa Melayu`,dir:`ltr`},{code:`nl`,name:`Dutch`,nativeName:`Nederlands`,dir:`ltr`},{code:`pl`,name:`Polish`,nativeName:`Polski`,dir:`ltr`},{code:`pt`,name:`Portuguese`,nativeName:`Português`,dir:`ltr`},{code:`ru`,name:`Russian`,nativeName:`Русский`,dir:`ltr`},{code:`sv`,name:`Swedish`,nativeName:`Svenska`,dir:`ltr`},{code:`th`,name:`Thai`,nativeName:`ไทย`,dir:`ltr`},{code:`tr`,name:`Turkish`,nativeName:`Türkçe`,dir:`ltr`},{code:`uk`,name:`Ukrainian`,nativeName:`Українська`,dir:`ltr`},{code:`vi`,name:`Vietnamese`,nativeName:`Tiếng Việt`,dir:`ltr`},{code:`zh`,name:`Chinese`,nativeName:`中文`,dir:`ltr`}],M=[`ar`,`he`,`fa`,`ur`],N=j.map(e=>e.code),P={en:()=>Promise.resolve(k),ar:()=>e(()=>import(`./ar-Bm27TCMQ.js`).then(e=>e.default),[]),bn:()=>e(()=>import(`./bn-C7CHC42H.js`).then(e=>e.default),[]),cs:()=>e(()=>import(`./cs-zGEtwQn_.js`).then(e=>e.default),[]),da:()=>e(()=>import(`./da-B-0sHNTu.js`).then(e=>e.default),[]),de:()=>e(()=>import(`./de-UZNE6t2h.js`).then(e=>e.default),[]),es:()=>e(()=>import(`./es-CPLnFYIw.js`).then(e=>e.default),[]),fr:()=>e(()=>import(`./fr-Br1o0WVz.js`).then(e=>e.default),[]),hi:()=>e(()=>import(`./hi-BcEvNEpb.js`).then(e=>e.default),[]),id:()=>e(()=>import(`./id-C30L2DoT.js`).then(e=>e.default),[]),is:()=>e(()=>import(`./is-BAEhfi5Z.js`).then(e=>e.default),[]),it:()=>e(()=>import(`./it-HWnfQXZY.js`).then(e=>e.default),[]),ja:()=>e(()=>import(`./ja-Dvux1mon.js`).then(e=>e.default),[]),ko:()=>e(()=>import(`./ko-agDQ__KP.js`).then(e=>e.default),[]),ms:()=>e(()=>import(`./ms-aNRa2QX7.js`).then(e=>e.default),[]),nl:()=>e(()=>import(`./nl-BtkiDUn-.js`).then(e=>e.default),[]),pl:()=>e(()=>import(`./pl-SEO0lBnX.js`).then(e=>e.default),[]),pt:()=>e(()=>import(`./pt-BYtjmvq1.js`).then(e=>e.default),[]),ru:()=>e(()=>import(`./ru-B-ynj2hU.js`).then(e=>e.default),[]),sv:()=>e(()=>import(`./sv-CliKR15U.js`).then(e=>e.default),[]),th:()=>e(()=>import(`./th-DJQyDr9J.js`).then(e=>e.default),[]),tr:()=>e(()=>import(`./tr-BBGKZ1la.js`).then(e=>e.default),[]),uk:()=>e(()=>import(`./uk-C1GcFWxE.js`).then(e=>e.default),[]),vi:()=>e(()=>import(`./vi-CIxgICOQ.js`).then(e=>e.default),[]),zh:()=>e(()=>import(`./zh-Cm7vsQ9s.js`).then(e=>e.default),[])},F=e=>{let t=e?.toLowerCase().split(`-`)[0];return N.includes(t)?t:`en`},I=e=>M.includes(F(e)),L=e=>{if(typeof document>`u`)return;let t=F(e);document.documentElement.lang=t,document.documentElement.dir=I(t)?`rtl`:`ltr`},R=async e=>{let n=F(e);if(!t.hasResourceBundle(n,`translation`)){let e=await P[n]();t.addResourceBundle(n,`translation`,e,!0,!0)}return n},z=async e=>{let n=await R(e);return await t.changeLanguage(n),n};if(typeof window<`u`){let e=navigator.language;try{e=window.localStorage.getItem(`i18nextLng`)||e}catch{}L(e),t.on(`languageChanged`,L)}var B=(async()=>{t.isInitialized||await t.use(O).use(i).init({resources:A,fallbackLng:`en`,supportedLngs:N,nonExplicitSupportedLngs:!0,load:`languageOnly`,debug:!1,interpolation:{escapeValue:!1},detection:{order:[`localStorage`,`navigator`,`htmlTag`],caches:[`localStorage`],lookupLocalStorage:`i18nextLng`}});let e=F(t.language||t.resolvedLanguage);if(e!==`en`)try{await R(e),F(t.language)===e&&await t.changeLanguage(e)}catch{await t.changeLanguage(`en`)}L(t.resolvedLanguage||t.language||`en`)})();export{F as a,I as i,z as n,j as o,B as r,L as t};