// SPDX-License-Identifier: AGPL-3.0-only
// Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0

import type { DeepPartialMessageTree } from "../types";
import type { en } from "./en";

export const ar = {
  picker: {
    onDevice: "على الجهاز",
    huggingFace: "Hugging Face",
    retry: "إعادة المحاولة",
    loadMore: "تحميل المزيد",
    offlineTitle: "أنت غير متصل بالإنترنت",
    offlineBody:
      "انتقل إلى «الجهاز» لاستخدام {noun} المحلية أو المخزّنة مؤقتًا.",
    offlineSwitchDevice: "الجهاز",
    searchAriaLabel: "البحث في {noun}",
    modelSourceAriaLabel: "مصدر النموذج",
    hubSectionAriaLabel: "قسم Hub",
    modelDropped: "لم يعد متاحًا",
    modelDroppedByProvider: "{provider} · لم يعد متاحًا",
    modelDisabled: "غير مُفعَّل",
    modelDisabledByProvider: "{provider} · غير مُفعَّل",
    multipleMatches:
      "توجد عدة نتائج مطابقة ضمن {noun}. اختر نتيجة من القائمة.",
    rateLimitedTitle: "تم بلوغ حد طلبات Hugging Face",
    rateLimitedBody: "انتظر قليلًا، ثم أعد البحث في {noun}.",
    hfToken: {
      label: "توكن HF",
      saved: "محفوظ",
      add: "إضافة",
      savedAriaLabel: "تم حفظ توكن Hugging Face",
      addAriaLabel: "تعيين توكن Hugging Face",
      savedHint: "تم حفظ التوكن. سيُتحقق من الوصول عند استخدامه.",
      addHint: "عيّن توكنًا للوصول إلى المستودعات الخاصة والمقيّدة.",
    },
  },
  common: {
    cancel: "إلغاء",
    close: "إغلاق",
    delete: "حذف",
    done: "تم",
    error: "خطأ",
    export: "تصدير",
    help: "مساعدة",
    loading: "جارٍ التحميل...",
    new: "جديد",
    rename: "إعادة تسمية",
    save: "حفظ",
    saving: "جارٍ الحفظ...",
    search: "بحث",
    shutdown: "إيقاف التشغيل",
  },
  shell: {
    beta: "BETA",
    brand: "unsloth",
    product: "Unsloth",
    accountMenu: "قائمة حساب {name}",
    updateAvailable: "يتوفر تحديث",
    resize: {
      collapse: "انقر للطي",
      expand: "انقر للتوسيع",
      drag: "اسحب لتغيير الحجم",
    },
    aria: {
      home: "الصفحة الرئيسية لـ Unsloth",
      closeSidebar: "إغلاق الشريط الجانبي",
      openSidebar: "فتح الشريط الجانبي",
      resizeSidebar: "تغيير حجم الشريط الجانبي أو طيه",
      resizeRunSettings: "تغيير حجم إعدادات التشغيل أو إغلاقها",
      openRunSettings: "فتح إعدادات التشغيل",
      chatOptions: "خيارات المحادثة",
      runOptions: "خيارات التدريب",
    },
    navigation: {
      newChat: "محادثة جديدة",
      returnToChat: "العودة إلى المحادثة",
      returnToChats: "العودة إلى المحادثات قيد التشغيل ({count})",
      chatGenerating: "جارٍ الإنشاء",
      compare: "مقارنة",
      search: "بحث",
      hub: "مركز النماذج",
      projects: "المشاريع",
      train: "تدريب",
      recipes: "الوصفات",
      images: "الصور",
      video: "الفيديو",
      audio: "الصوت",
      trainChecking: "جارٍ التحقق من دعم هذا الجهاز للتدريب...",
      videoChecking: "جارٍ التحقق من دعم هذا الجهاز للفيديو...",
      more: "المزيد",
      customizeSidebar: "تخصيص الشريط الجانبي",
      newBadge: "جديد",
      export: "تصدير",
      recents: "العناصر الأخيرة",
      noChatsYet: "لا توجد محادثات بعد",
      settings: "الإعدادات",
      api: "API",
      lightMode: "الوضع الفاتح",
      darkMode: "الوضع الداكن",
      guidedTour: "جولة إرشادية",
      help: "مساعدة",
      logOut: "تسجيل الخروج",
      shutdown: "إيقاف التشغيل",
    },
    notFound: {
      title: "الصفحة غير موجودة",
      description: "{path} غير موجود.",
      backToChat: "العودة إلى المحادثة",
    },
    dialog: {
      deleteChat: {
        title: "حذف المحادثة",
        description: "هل أنت متأكد من رغبتك في حذف هذه المحادثة «{name}»؟",
      },
      deleteRun: {
        title: "حذف عملية التدريب",
        description: "هل أنت متأكد من رغبتك في حذف عملية التدريب «{name}»؟",
      },
      renameChat: {
        title: "إعادة تسمية المحادثة",
        placeholder: "عنوان المحادثة",
      },
      renameRun: {
        title: "إعادة تسمية العملية",
        placeholder: "اسم العملية",
      },
    },
    toast: {
      cannotDeleteRunningRun: "لا يمكن حذف عملية تدريب قيد التشغيل",
      failedToDeleteChat: "فشل حذف المحادثة",
      failedToDeleteRun: "فشل حذف العملية",
      failedToRenameChat: "فشلت إعادة تسمية المحادثة",
      failedToRenameRun: "فشلت إعادة تسمية العملية",
    },
  },
  settings: {
    title: "الإعدادات",
    dialog: {
      title: "الإعدادات",
      description: "إدارة تفضيلات Unsloth الخاصة بك.",
      closeAriaLabel: "إغلاق الإعدادات",
      searchPlaceholder: "ابحث في الإعدادات…",
      searchNoResults: "لم يُعثر على أي إعداد.",
    },
    tabs: {
      general: "عام",
      profile: "الملف الشخصي",
      appearance: "المظهر",
      resources: "النظام",
      chat: "المحادثة",
      connections: "الاتصالات",
      apiKeys: "API",
      about: "حول",
      data: "البيانات",
      agents: "الوكلاء",
      debugging: "السجلات",
      voice: "الصوت",
    },
    debugging: {
      logSection: "ملف السجل",
      source: "ملف السجل",
      sourceHint: "تكتب مشغّلات النماذج سجلاتها الخاصة، لذا غالبًا ما يكون سبب فشل التحميل أو التوليد موضّحًا فيها لا في سجل الخادم.",
      path: "الموقع",
      pathCopy: "نسخ المسار",
      refreshSection: "التحديث",
      mode: "الوضع",
      modeLive: "مباشر",
      modeInterval: "كل 3 ثوانٍ",
      modeManual: "يدوي",
      refreshNow: "تحديث الآن",
      privacyNote: "تُخفى بيانات الاعتماد في هذا العرض. أما في الملف الموجود على القرص فلا تُخفى.",
      copyVisible: "نسخ السجل الظاهر",
      empty: "لم يُسجَّل أي شيء بعد.",
      disabled: "التسجيل في ملف مُعطَّل (UNSLOTH_STUDIO_NO_FILE_LOG=1).",
      missing: "لم يُعثر على أي ملف سجل.",
      unreadable: "تعذّرت قراءة ملف السجل.",
      timeout: "انتهت مهلة طلب السجل. قد يتعذر الوصول إلى الخادم.",
      droppedNotice: "تم تخطي بعض الأسطر: كُتب السجل بسرعة أكبر مما أمكن قراءته.",
      morePending: "لا يزال يجري قراءة أسطر إضافية، وستظهر عند التحديث التالي.",
      staleSession: "تسجيل الملفات معطل، لذا هذه جلسة سابقة ولن يتم تحديثها.",
      keywords: "تصحيح الأخطاء سجل السجلات خطأ أخطاء تعطل تتبع تشخيص استكشاف الأخطاء debug log logs error",
    },
    voice: {
      title: "الصوت",
      description: "الميكروفون والإملاء وتحويل الكلام إلى نص والقراءة بصوت عالٍ",
      dictation: {
        sectionTitle: "الإملاء",
        engineLabel: "محرك الإملاء",
        engineBrowser: "المتصفح",
        engineBrowserDescription:
          "يفرّغ الصوت نصيًا باستخدام خدمة الكلام في متصفحك. اختر «التفريغ النصي المحلي» لاستخدام نموذج STT.",
        engineModel: "التفريغ النصي المحلي",
        engineModelDescription:
          "يشغّل نموذج تحويل الكلام إلى نص (STT) محليًا ويعمل دون اتصال. نزّله ثم حمّله، ويُفرَغ من الذاكرة بعد فترة من عدم الاستخدام.",
        sttModelLabel: "نموذج التعرّف على الكلام",
        sttModelDescription: "اختر نموذج STT أو ابحث عنه لتشغيله محليًا.",
        sttModelSearchPlaceholder: "ابحث عن نموذج",
        sttModelSearching: "جارٍ البحث في Hugging Face…",
        sttModelValidating: "جارٍ التحقق من التوافق مع Whisper…",
        sttModelNoResults: "لم يُعثر على نماذج Whisper",
        sttModelInvalid: "لا يمكن استخدام هذا المستودع للإملاء",
        sttModelFailed: "تعذّر تحميل نموذج STT",
        sttModelUnsupported: "التسجيل غير مدعوم في هذا المتصفح",
        sttChecking: "جارٍ التحقق…",
        sttOnDemand: "تم التنزيل",
        sttLoadingModel: "جارٍ تحميل النموذج…",
        sttReady: "مُحمَّل على {device}",
        sttLoaded: "مُحمَّل",
        sttUnavailable:
          "غير مثبّت على هذا الخادم. نفّذ `unsloth studio update` لتفعيل الإملاء المحلي.",
        sttRetry: "إعادة المحاولة",
        sttDownloadChecking: "جارٍ التحقق من حالة التنزيل…",
        sttNotDownloaded: "لم يُنزَّل",
        sttDownloadStatusFailed: "تعذّر التحقق من حالة التنزيل",
        sttDownload: "تنزيل",
        sttDownloadConfirmTitle: "تنزيل {model}؟",
        sttDownloadConfirmBody:
          "يعمل الإملاء المحلي دون اتصال تمامًا، لكنه يحتاج أولاً إلى نموذج الكلام {model}. حجمه {size} تقريبًا، ويُنزَّل مرة واحدة إلى ذاكرة Hugging Face المؤقتة.",
        sttDownloadConfirmBodyUnsized:
          "يعمل الإملاء المحلي دون اتصال تمامًا، لكنه يحتاج أولاً إلى نموذج الكلام {model}. ويُنزَّل مرة واحدة إلى ذاكرة Hugging Face المؤقتة.",
        sttOpenVoiceSettings: "فتح إعدادات الصوت",
        sttDownloadStarted: "جارٍ تنزيل {model}",
        sttDownloading: "جارٍ التنزيل… {progress}%",
        sttCancelDownload: "إلغاء",
        sttCancellingDownload: "جارٍ الإلغاء…",
        sttCancelDownloadFailed: "تعذّر إلغاء التنزيل",
        sttDownloadComplete: "تم تنزيل نموذج التعرّف على الكلام",
        sttModelReady: "{model} جاهز للإملاء",
        sttRecommended: "موصى به",
        sttDownloadFailed: "تعذّر تنزيل نموذج التعرّف على الكلام",
        sttLoad: "تحميل",
        sttUnload: "تفريغ النموذج من الذاكرة",
        sttUnloading: "جارٍ تفريغ النموذج من الذاكرة…",
        microphoneLabel: "الميكروفون",
        microphoneFallbackName: "الميكروفون رقم {index}",
        microphoneDescription: "يُستخدم للإملاء",
        microphoneFallbackHint:
          "يُستخدم للإملاء. يعود إلى الجهاز الافتراضي للنظام إذا تعذّر على محرك الكلام في المتصفح استخدام هذا الجهاز",
        microphoneGrantDescription:
          "اسمح بالوصول إلى الميكروفون لعرض أسماء الأجهزة",
        allowMicrophone: "السماح بالميكروفون",
        micAccessBlocked:
          "تم حظر الوصول إلى الميكروفون. اسمح بالوصول إلى الميكروفون لصفحة Unsloth هذه ثم أعد المحاولة.",
        micAccessUnsupported:
          "الوصول إلى الميكروفون غير مدعوم في هذا المتصفح أو السياق.",
        systemDefault: "الإعداد الافتراضي للنظام",
        savedMicDisconnected: "ميكروفون محفوظ (غير متصل)",
        languageLabel: "لغة الإملاء",
        languageDescription: "اللغة المراد التعرّف عليها",
        languageAuto: "تلقائي (لغة المتصفح)",
      },
      dictionary: {
        sectionTitle: "قاموس الإملاء",
        sectionDescription: "حدّد كيف يتهجّى الإملاء كلمات أو عبارات بعينها",
        manageLabel: "تهجئات مخصّصة",
        manage: "إدارة",
        backToVoice: "العودة إلى الصوت",
        addEntry: "إضافة مدخل",
        newEntryAria: "مدخل جديد في القاموس",
        entryPlaceholder: "سارة أحمد",
        entryAria: "مدخل القاموس رقم {index}",
        removeEntryAria: "إزالة مدخل القاموس رقم {index}",
      },
      recents: {
        sectionTitle: "سجل الإملاء",
        sectionDescription: "يُحفظ كل إملاء هنا حتى تتمكن من استعادة النص",
        manageLabel: "سجل الإملاء",
        manage: "إدارة",
        pageDescription:
          "يُحفظ كل إملاء. اعرضه أو انسخه أو احذفه، أو افتح المحادثة التي استُخدم فيها.",
        searchPlaceholder: "ابحث في الإملاءات",
        sortLabel: "ترتيب الإملاءات",
        sortNewest: "الأحدث",
        sortOldest: "الأقدم",
        sortAlpha: "من الألف إلى الياء",
        noMatches: "لا توجد إملاءات تطابق بحثك",
        detailTitle: "إملاء محفوظ",
        backToVoice: "العودة إلى الصوت",
        backToRecents: "العودة إلى الإملاءات الأخيرة",
        view: "عرض الإملاء كاملًا",
        empty: "لا توجد إملاءات بعد",
        dictationColumn: "الإملاء",
        dateColumn: "تاريخ الإنشاء",
        copy: "نسخ الإملاء",
        copied: "تم النسخ إلى الحافظة",
        copyFailed: "تعذّر النسخ إلى الحافظة",
        delete: "حذف الإملاء",
        deleteTitle: "حذف الإملاء",
        deleteDescription:
          "هل تريد حذف هذا الإملاء المحفوظ؟ لا يمكن التراجع عن ذلك.",
        deleteLinkedDescription:
          "هل تريد حذف هذا الإملاء المحفوظ؟ يمكنك أيضًا حذف المحادثة التي استُخدم فيها. لا يمكن التراجع عن ذلك.",
        deleteWithChat: "حذف المحادثة والإملاء",
        deleteWithChatFailed: "تعذّر حذف المحادثة",
        clear: "مسح السجل",
        clearTitle: "مسح سجل الإملاء",
        clearDescription:
          "هل تريد حذف كل الإملاءات المحفوظة؟ لا يمكن التراجع عن ذلك.",
        clearConfirm: "مسح الكل",
        showMore: "عرض المزيد ({count})",
        openChat: "فتح المحادثة",
      },
      readAloud: {
        sectionTitle: "القراءة بصوت عالٍ",
        buttonLabel: "زر القراءة بصوت عالٍ",
        buttonDescription: "إظهاره في ردود المساعد",
        engineLabel: "محرك TTS",
        engineSystemDescription: "الأصوات المدمجة في الجهاز",
        engineStudioDescription:
          "يستخدم النموذج الصوتي المُحمَّل (مثل Orpheus)",
        engineSystem: "أصوات النظام",
        engineStudio: "تحميل نموذج TTS",
        modelLabel: "نموذج TTS",
        modelDescription:
          "حمّل نموذجًا صوتيًا من محدّد النماذج (مثل Orpheus TTS)",
        voiceLabel: "الصوت",
        voiceDescription: "أفضل الأصوات على هذا الجهاز",
        speedLabel: "السرعة",
        pitchLabel: "طبقة الصوت",
        volumeLabel: "مستوى الصوت",
        previewLabel: "معاينة الصوت",
        previewDescription: "تشغيل عيّنة قصيرة",
        previewFailed: "فشلت معاينة تحويل النص إلى كلام",
        previewAction: "معاينة",
        stopAction: "إيقاف",
        ttsLabel: "تحويل النص إلى كلام",
        notSupported: "غير مدعوم في هذا المتصفح",
      },
    },
    general: {
      title: "عام",
      description: "التفضيلات العامة لـ Unsloth.",
      account: "الحساب",
      huggingFaceToken: "رمز وصول Hugging Face",
      huggingFaceTokenDescription:
        "يُستخدم لتحميل النماذج المقيّدة ورفع المخرجات.",
      hideToken: "إخفاء الرمز",
      showToken: "إظهار الرمز",
      clearToken: "مسح",
      checkingToken: "جارٍ التحقق من رمز الوصول...",
      tokenValidated: "تم التحقق من الرمز",
      password: "كلمة المرور",
      passwordDescription: "تغيير كلمة المرور لحساب Unsloth هذا.",
      passwordDialog: {
        trigger: "تغيير كلمة المرور",
        title: "تغيير كلمة المرور",
        description:
          "أدخل كلمة المرور الحالية واختر كلمة مرور جديدة (بحد أدنى {minLength} حرفًا).",
        setTrigger: "تعيين كلمة مرور الوصول عن بُعد",
        setTitle: "تعيين كلمة مرور الوصول عن بُعد",
        setDescription:
          "اختر كلمة المرور التي تسجّل بها المتصفحات البعيدة الدخول باسم unsloth (بحد أدنى {minLength} حرفًا). سيواصل تطبيق Unsloth لسطح المكتب تسجيل الدخول تلقائيًا.",
        setSubmit: "تعيين كلمة المرور",
        setting: "جارٍ التعيين...",
        setDone: "تم تعيين كلمة المرور.",
        currentPassword: "كلمة المرور الحالية",
        newPassword: "كلمة المرور الجديدة",
        confirmPassword: "تأكيد كلمة المرور الجديدة",
        currentTooShort:
          "يجب أن تتكون كلمة المرور الحالية من {minLength} حرفًا على الأقل.",
        newTooShort:
          "يجب أن تتكون كلمة المرور الجديدة من {minLength} حرفًا على الأقل.",
        mismatch: "كلمتا المرور غير متطابقتين.",
        samePassword:
          "يجب أن تختلف كلمة المرور الجديدة عن كلمة المرور الحالية.",
        update: "تحديث كلمة المرور",
        updating: "جارٍ التحديث...",
        updated: "تم تحديث كلمة المرور.",
        updateFailed: "فشل تحديث كلمة المرور.",
        newHasSpaces: "لا يمكن أن تحتوي كلمة المرور الجديدة على مسافات.",
      },
      chatDefaults: "الإعدادات الافتراضية للمحادثة",
      autoTitleNewChats: "عنونة المحادثات الجديدة تلقائيًا",
      autoTitleNewChatsDescription:
        "إنشاء عنوان قصير من الرسالة الأولى.",
      helperLlm: {
        sectionTitle: "نموذج LLM المساعد",
        preloadOnStartup: "تحميل نموذج LLM المساعد مسبقًا عند بدء التشغيل",
        preloadOnStartupDescription:
          "تنزيل نموذج مساعد AI Assist في الخلفية عند بدء التشغيل. مُعطّل افتراضيًا؛ لا يزال بإمكان AI Assist جلبه عند الطلب.",
        disabledByEnv:
          "مُعطّل بواسطة UNSLOTH_HELPER_MODEL_DISABLE في بيئة الخادم.",
        loadError: "فشل تحميل إعدادات نموذج LLM المساعد.",
        saveError: "فشل حفظ إعدادات نموذج LLM المساعد.",
      },
      modelAutoSwitch: {
        sectionTitle: "التبديل التلقائي للنموذج (OpenAI API)",
        enable: "تبديل النموذج حسب الطلب",
        enableDescription:
          "تحميل ملف GGUF منزّل ومذكور في طلب API قبل تلبية الطلب. مُعطّل افتراضيًا.",
        idleUnload: "التفريغ التلقائي عند الخمول",
        idleUnloadDescription:
          "حرّر ذاكرة VRAM بعد هذا العدد من ثواني الخمول. تُبقي القيمة 0 النموذج محمّلًا، والحد الأدنى 60 ثانية.",
        idleSecondsAriaLabel:
          "عدد الثواني قبل التفريغ التلقائي عند الخمول",
        mediaIdleUnload: "التفريغ التلقائي عند الخمول للصور والفيديو",
        mediaIdleUnloadDescription:
          "حرّر ذاكرة VRAM بتفريغ نموذجَي الصور والفيديو بعد هذا العدد من ثواني الخمول. إنه إعداد مستقل: الإعداد أعلاه يخصّ نموذج المحادثة فقط. تُبقي القيمة 0 النموذجين محمَّلين، والحد الأدنى 60 ثانية.",
        mediaIdleSecondsAriaLabel:
          "عدد الثواني قبل التفريغ التلقائي عند الخمول للصور والفيديو",
        mediaIdlePaused:
          "متوقف مؤقتًا ما دام «إبقاء النموذج في ذاكرة كرت الرسوميات» أو «تفريغ النماذج التي حمّلتها واجهة API فقط» مفعّلًا.",
        idleNeedsEnable: "فعّل «تبديل النموذج حسب الطلب» أولًا.",
        idleActiveViaEnv:
          "التفريغ التلقائي عند الخمول مُفعَّل عبر متغير البيئة UNSLOTH_MODEL_IDLE_TTL.",
        loadError: "فشل تحميل إعدادات التبديل التلقائي للنموذج.",
        saveError: "فشل حفظ إعدادات التبديل التلقائي للنموذج.",
        idleError: "أدخل 0 لإبقاء النموذج محمَّلاً، أو 60 ثانية على الأقل.",
        autoDownload: "تنزيل النماذج غير المنزَّلة",
        autoDownloadDescription:
          "يجلب ملف GGUF المذكور في طلب واجهة API إذا لم يكن منزَّلًا بعد. عندئذٍ يمكن لأي شخص لديه مفتاح API استهلاك مساحة القرص وعرض النطاق.",
        keepKv: "الاحتفاظ بسياق المحادثة عند التفريغ التلقائي بسبب الخمول",
        keepKvDescription:
          "يحفظ ذاكرة KV المؤقتة قبل التفريغ التلقائي عند الخمول، حتى لا تعيد المحادثات المستأنفة قراءة السجل. بحد أقصى 10 جيجابايت على القرص.",
        apiOnly: "تفريغ النماذج التي حمّلتها واجهة API فقط",
        apiOnlyDescription:
          "يُبقي التفريغ التلقائي عند الخمول النموذج الذي حمّلته من Studio في الذاكرة، ولا يفرّغ سوى النماذج التي حمّلها طلب عبر واجهة API.",
      },
      previewSharing: {
        sectionTitle: "مشاركة المعاينة",
        enableLabel: "روابط المعاينة العامة",
        enableDescription:
          "اسمح لأي شخص لديه رابط موقّع بالمحادثة مع نموذج مكتمل دون الحاجة إلى تسجيل الدخول. أوقف التشغيل لإخفاء واجهة المعاينة العامة؛ تتوقف الروابط المشتركة عن العمل.",
        loadError: "فشل تحميل إعدادات مشاركة المعاينة.",
        saveError: "فشل حفظ إعدادات مشاركة المعاينة.",
        revokeLabel: "إلغاء جميع روابط المعاينة",
        revokeDescription:
          "قم بتدوير سر التوقيع بحيث يتوقف كل رابط شاركته عن العمل. تظل الروابط المنسوخة حديثًا تعمل.",
        revokeAction: "إلغاء الروابط",
        revoking: "جارٍ الإلغاء...",
        revokeConfirmTitle: "إلغاء جميع روابط المعاينة؟",
        revokeConfirmDescription:
          "سيتوقف كل رابط معاينة شاركته عن العمل فورًا. لا يمكن التراجع عن هذا الإجراء.",
        revokeConfirmAction: "إلغاء جميع الروابط",
        revoked: "تم إلغاء جميع روابط المعاينة",
        revokeError: "تعذّر إلغاء روابط المعاينة",
      },
      notifications: {
        sectionTitle: "الإشعارات",
        showLlamaUpdates: "إشعارات تحديث llama.cpp",
        showLlamaUpdatesDescription:
          "التنبيه عند توفر إصدار أحدث من llama.cpp لتشغيل نماذج جديدة. أوقف التشغيل إذا كنت تُدرّب فقط.",
        showLoadedModels: "مؤشر النماذج المحمّلة",
        showLoadedModelsDescription:
          "إظهار بطاقة صغيرة في الزاوية السفلية اليمنى تعرض كل نموذج موجود حاليًا في الذاكرة (الدردشة، الكلام، الصور، الفيديو)، مع زر لإخراج كل منها.",
      },
      startup: {
        sectionTitle: "بدء التشغيل",
        launchAtLogin: "تشغيل Unsloth عند تسجيل الدخول",
        launchAtLoginDescription:
          "يبدأ Unsloth في الخلفية عند تسجيل الدخول، ويبقى في شريط القوائم أو علبة النظام حتى تفتحه.",

        closeToTray: "الإغلاق إلى علبة النظام",
        closeToTrayDescription:
          "إبقاء Unsloth وخادمه قيد التشغيل في الخلفية عند إغلاق النافذة الرئيسية.",
        closeToTraySaveError: "تعذّر تحديث إعداد الإغلاق إلى علبة النظام.",
        loadError: "تعذر تحميل إعداد التشغيل عند تسجيل الدخول.",
        saveError: "تعذر تحديث إعداد التشغيل عند تسجيل الدخول.",
      },
      uploads: {
        sectionTitle: "عمليات الرفع",
        maxUploadSize: "الحد الأقصى لحجم رفع مجموعة بيانات التدريب",
        maxUploadSizeDescription: "القيمة الافتراضية هي {defaultSize} ميجابايت.",
      },
      rag: {
        sectionTitle: "المستندات وRAG",
        embeddingModel: "نموذج التضمين (Embedding)",
        embeddingModelDescription:
          "نموذج Hugging Face أو مسار محلي يُستخدم لفهرسة مستنداتك والبحث فيها. القيمة الافتراضية هي {defaultModel}.",
        reindexWarning:
          "يؤثر فقط في المستندات التي تُفهرس حديثًا. أعِد رفع المستندات الحالية بعد تغيير النموذج.",
        emptyError: "أدخل معرّف نموذج Hugging Face أو مسارًا محليًا.",
        loadError: "فشل تحميل إعداد نموذج التضمين.",
        saveError: "فشل حفظ نموذج التضمين.",
        saved: "تم حفظ نموذج التضمين.",
        saveAnyway: "الحفظ على أي حال",
        resetAction: "إعادة التعيين إلى الافتراضي",
      },
      storage: {
        sectionTitle: "التخزين",
        modelsFolder: "مجلد النماذج",
        modelsFolderDescription: "المكان الذي تُخزَّن فيه النماذج المُنزَّلة.",
        openAction: "فتح",
        copyAction: "نسخ المسار",
        copied: "تم نسخ المسار",
        openError: "تعذّر فتح المجلد",
        copyError: "تعذّر نسخ المسار",
      },
      resetPreferences: {
        sectionTitle: "منطقة الخطر",
        label: "إعادة تعيين جميع التفضيلات المحلية",
        description:
          "يمسح التفضيلات المحلية فقط. تُحفظ المحادثات ووصول API والإعدادات المخزّنة في قاعدة البيانات.",
        action: "إعادة تعيين التفضيلات",
        confirmTitle: "إعادة تعيين جميع التفضيلات المحلية؟",
        confirmDescription:
          "يمسح التفضيلات المحلية فقط ويعيد تحميل Unsloth. تُحفظ المحادثات ووصول API والإعدادات المخزّنة في قاعدة البيانات.",
        confirmAction: "إعادة التعيين وإعادة التحميل",
      },
      permissions: {
        sectionTitle: "الأذونات",
        bypassLabel: "أذونات الأدوات",
        bypassDescription:
          "كيفية موافقة Unsloth على استدعاءات أدوات المحادثة (الطرفية، python، الويب، MCP) قبل تشغيلها. وضع «Full access» يعطّل الموافقات وصندوق عزل الشيفرة.",
      },
    },
    profile: {
      title: "الملف الشخصي",
      description: "كيفية ظهور ملفك الشخصي في Unsloth.",
      changePicture: "تغيير صورة الملف الشخصي",
      displayName: "الاسم المعروض",
      nickname: "بماذا يجب أن يناديك Unsloth؟",
      nicknamePlaceholder: "الاسم المفضّل",
      nicknameSaved: "تم حفظ الاسم المفضّل",
      avatarShape: "شكل صورة الملف الشخصي",
      avatarShapeCircle: "دائري",
      avatarShapeRounded: "مستدير الحواف",
      chooseSloth: "أو اختر كسلانًا",
      nameSaved: "تم حفظ اسم الملف الشخصي",
      namePersistErrorTitle: "تعذّر حفظ اسم الملف الشخصي",
      namePersistErrorDescription:
        "تم تحديث الاسم لهذه الجلسة، لكنه قد لا يُحفظ بعد إعادة التحميل.",
      photoUpdated: "تم تحديث صورة الملف الشخصي",
      photoPersistErrorTitle: "تعذّر حفظ صورة الملف الشخصي",
      photoPersistErrorDescription:
        "تم تحديث الصورة لهذه الجلسة، لكنها قد لا تُحفظ بعد إعادة التحميل.",
      photoUpdateErrorTitle: "تعذّر تحديث صورة الملف الشخصي",
      imageUseError: "تعذّر استخدام هذه الصورة.",
      uploadPhoto: "رفع صورة",
      removePhoto: "إزالة",
      pictureOptions: "خيارات صورة الملف الشخصي",
      greetingSloth: "الكسلان في التحية",
      greetingSlothDescription: "إظهار الكسلان في تحية المحادثة.",
      noPicture: "لا توجد صورة ملف شخصي",
      noneLabel: "بلا",
      stats: {
        title: "إحصاءاتك",
        subtitle:
          "كل ما يلي محسوب من سجلك الخاص. لا يُجمَع أي شيء ولا يُرسَل إلى Unsloth.",
        retry: "إعادة المحاولة",
        privacyNote:
          "تُحسب الإحصاءات من سجل المحادثات والتدريب المحفوظ في نسخة Unsloth لديك. لا يُجمَع أي شيء، ولا يُرسَل شيء إلى Unsloth أو إلى أي طرف ثالث.",
        emptyChats:
          "لا توجد محادثات بعد. ابدأ محادثة وستظهر إحصاءاتك هنا.",
        lifetimeTokens: "إجمالي التوكنات",
        peakTokens: "يوم الذروة",
        longestChat: "أطول محادثة",
        currentStreak: "التتابع الحالي",
        longestStreak: "أطول تتابع",
        activityTitle: "نشاط التوكنات",
        activityDescription: "{total} خلال آخر {weeks}",
        mode: {
          daily: "يومي",
          weekly: "أسبوعي",
          cumulative: "تراكمي",
        },
        cellTooltip: "{date} · {tokens}، {messages}",
        weekTooltip: "أسبوع {date} · {tokens}",
        less: "أقل",
        more: "أكثر",
        insightsTitle: "تحليل النشاط",
        totalChats: "إجمالي المحادثات",
        totalMessages: "إجمالي الرسائل",
        tokensIn: "التوكنات المُرسَلة",
        tokensOut: "التوكنات المُولَّدة",
        cachedTokens: "التوكنات المخزّنة مؤقتًا",
        cachedValue: "{tokens} ({percent}% من المُدخَلات)",
        avgTokensPerChat: "متوسط التوكنات لكل محادثة",
        timeInChat: "الوقت في المحادثة",
        activeDays: "الأيام النشطة",
        toolCalls: "استدعاءات الأدوات",
        attachments: "الملفات المرفقة",
        avgSpeed: "متوسط السرعة",
        bestSpeed: "أسرع رد",
        firstToken: "متوسط الزمن حتى أول توكن",
        tokensPerSecond: "{value} توكن/ث",
        topModelsTitle: "النماذج الأكثر استخدامًا",
        topModelsDescription: "مرتّبة حسب التوكنات المتبادلة",
        modelSummary: "{tokens} · {messages}",
        noModels: "لم يُسجَّل أي استخدام للنماذج بعد.",
        trainingTitle: "التدريب",
        trainingDescription: "عمليات الضبط الدقيق في مساحة العمل هذه",
        trainingRuns: "عمليات التدريب",
        trainingCompleted: "مكتملة",
        trainingSteps: "الخطوات",
        trainingTokens: "التوكنات المُدرَّب عليها",
        trainingTime: "زمن التدريب",
        bestLoss: "أقل خسارة",
        runSteps: "{steps}",
        runLoss: "الخسارة {loss}",
      },
    },
    appearance: {
      title: "المظهر",
      description: "كيفية ظهور Unsloth على هذا الجهاز.",
      theme: {
        title: "السمة",
        label: "نظام الألوان",
        description: "فاتح أو داكن أو حسب إعداد نظامك.",
        system: "النظام",
        light: "فاتح",
        dark: "داكن",
      },
      palette: {
        label: "لوحة الألوان",
        description: "الألوان المستخدمة في Unsloth في الوضعين الفاتح والداكن.",
        standard: "قياسية",
        classic: "كلاسيكية",
        minimal: "بسيطة",
      },
      custom: {
        reset: "إعادة تعيين",
        resetAll: "إعادة تعيين التخصيص",
        preferencesTitle: "التفضيلات",
        colors: {
          lightGroup: "المظهر الفاتح",
          darkGroup: "المظهر الداكن",
          accent: "لون التمييز",
          background: "الخلفية",
          foreground: "اللون الأمامي",
        },
        fontDefault: "افتراضي",
        fontBundledGroup: "مدمجة",
        fontImportedGroup: "مستوردة",
        fontDeviceGroup: "على هذا الجهاز",
        fontFolderGroup: "من مجلد",
        fontDeviceLoading: "جارٍ البحث عن خطوط الجهاز…",
        fontSearch: "ابحث عن الخطوط…",
        fontNoResults: "لم يُعثر على خطوط.",
        colorPicker: {
          hue: "درجة اللون",
          hex: "لون سداسي عشري",
          eyedropper: "اختيار لون من الشاشة",
        },
        uiFont: {
          label: "خط الواجهة",
        },
        headingFont: {
          label: "خط العناوين",
        },
        chatFont: {
          label: "خط المحادثة",
        },
        codeFont: {
          label: "خط الشيفرة",
        },
        importFont: {
          upload: "رفع",
          scanFolder: "اختيار مجلد",
          alreadyAvailable:
            "هذا الخط متوفر بالفعل، لذا تُستخدم النسخة الموجودة.",
          folderNoFonts: "لم يُعثر على ملفات خطوط في ذلك المجلد.",
          remove: "إزالة",
          errorInvalidType:
            "نوع ملف غير مدعوم. استخدم ‎.woff2 أو ‎.woff أو ‎.ttf أو ‎.otf.",
          errorTooLarge: "ملف الخط كبير جدًا (بحد أقصى 1.5 ميجابايت).",
          errorLimit: "يمكنك استيراد 3 خطوط كحد أقصى.",
          errorStorageFull:
            "لا توجد مساحة تخزين محلية كافية لهذا الخط. أزل خطًا مستوردًا أولًا.",
          errorFailed: "تعذّر تحميل ملف الخط هذا.",
        },
        uiFontSize: {
          label: "حجم خط الواجهة",
          description: "اضبط الحجم الأساسي المستخدم في واجهة Unsloth.",
        },
        codeFontSize: {
          label: "حجم خط الشيفرة",
          description: "اضبط الحجم الأساسي المستخدم للشيفرة.",
        },
        fontSmoothing: {
          label: "تنعيم الخطوط",
          description: "استخدام تنعيم حواف الخطوط.",
        },
        contrast: {
          label: "التباين",
          description: "مدى وضوح الحدود والنصوص الثانوية.",
        },
        reduceMotion: {
          label: "تقليل الحركة",
          description: "قلّل الرسوم المتحركة أو اتبع إعداد نظامك.",
          system: "النظام",
          on: "تشغيل",
          off: "إيقاف",
        },
        pointerCursors: {
          label: "استخدام مؤشر اليد",
          description:
            "تغيير المؤشر إلى يد عند المرور فوق العناصر التفاعلية.",
        },
      },
      language: {
        title: "اللغة",
        label: "لغة العرض",
        description: "اللغة التي يستخدمها Unsloth.",
        autoDetect: "اكتشاف تلقائي",
      },
      layout: {
        title: "التخطيط",
        compactSidebar: "تثبيت الشريط الجانبي افتراضيًا",
        compactSidebarDescription:
          "إبقاء الشريط الجانبي موسّعًا بدلاً من طيّه إلى أيقونات.",
      },
      sidebarNav: {
        title: "التنقّل في الشريط الجانبي",
        description:
          "ثبّت علامات تبويب الشريط الجانبي وأعد ترتيبها. تتجمّع العلامات غير المثبّتة في قائمة «المزيد»؛ وإذا بقيت علامة واحدة غير مثبّتة فتُخفى بدلاً من إنشاء قائمة بعنصر واحد. تبقى «محادثة جديدة» ثابتة.",
        dragToReorder: "اسحب لإعادة الترتيب",
        pinToSidebar: "تثبيت {name} في الشريط الجانبي",
        moreHolds: "المزيد ({count})",
      },
      sidebarMenu: {
        title: "قائمة الشريط الجانبي",
        description:
          "أظهر عناصر قائمة الملف الشخصي في الشريط الجانبي وأخفها وأعد ترتيبها. تبقى الإعدادات والمساعدة وتسجيل الخروج وإيقاف التشغيل ثابتة.",
        darkModeToggle: "مفتاح الوضع الداكن",
        dragToReorder: "اسحب لإعادة الترتيب",
      },
    },
    resources: {
      title: "النظام",
      description: "راقب عتاد خادم Unsloth هذا ومساحة تخزينه.",
      liveUpdates: "التحديثات المباشرة",
      floatingWindow: "نافذة عائمة",
      disableOverlay: "تعطيل التراكب",
      liveMonitor: {
        title: "المراقبة المباشرة",
        apiTitle: "مراقبة API",
        summary: "الطلبات المباشرة والأخطاء واستخدام التوكنات",
        status: "نشطة: {active} · حديثة: {recent} · {model}",
        noModelLoaded: "لا يوجد نموذج محمّل",
        autoOpen: "إظهار الشاشة العائمة تلقائيًا",
        autoOpenDescription: "يفتح لوحة صغيرة عند وصول حركة مرور إلى API.",
        cpu: "CPU",
        ram: "RAM",
        disk: "القرص",
        vram: "VRAM",
        cpuCores: "{logical} نواة منطقية / {physical} نواة فعلية",
        currentLoad: "الحمل الحالي",
        free: "{value} متاح",
        noGpu: "لا يوجد GPU مرئي",
      },
      gpu: {
        title: "أجهزة GPU",
        ggufInference: "استدلال GGUF",
        unavailable: "غير متاح",
        noGpu: "لم يُكتشف أي GPU مرئي. تُعرض موارد CPU فقط أعلاه.",
        unknownDevice: "GPU غير معروف",
        deviceWithIndex: "GPU {index}",
        vramUtilization: "VRAM",
        used: "{value} مستخدم",
        free: "{value} متاح",
        total: "{value} إجمالي",
      },
      llamaBackend: {
        title: "محرك استدلال GGUF",
        label: "خلفية الحوسبة",
        description: "الخلفية التي يستخدمها llama.cpp لتشغيل نماذج GGUF.",
        runningOn: "يعمل llama.cpp حاليًا على {backend}.",
        hint: "يثبّت إصدار llama.cpp الخاص بهذه الخلفية ويحافظ عليه عبر التحديثات. مفيد عندما ينهار الاختيار التلقائي أو لا يدعمه تعريف كرت الشاشة لديك. تظهر فقط الخلفيات التي يتوفر لها إصدار لهذا الجهاز، والتدريب لا يتأثر.",
        autoWith: "تلقائي ({backend})",
        apply: "تطبيق",
        applying: "جارٍ التثبيت...",
        applyHint: "ينزّل الإصدار الجديد ويعيد تشغيل llama.cpp. سيتم تفريغ النموذج المحمّل.",
        applyHintWithSize: "ينزّل {size} ويعيد تشغيل llama.cpp. سيتم تفريغ النموذج المحمّل.",
        switchedTo: "يعمل llama.cpp الآن على {backend}.",
        switchFailed: "تعذّر تغيير خلفية llama.cpp.",
        switchInterrupted: "توقفت عملية التبديل قبل اكتمالها.",
        envLocked: "تم ضبطها على {backend} عبر متغيّر البيئة UNSLOTH_LLAMA_CPP_BACKEND، وهو يتجاوز هذا الإعداد.",
        backends: {
          auto: "تلقائي",
          cpu: "CPU",
          cuda: "CUDA",
          rocm: "ROCm",
          vulkan: "Vulkan",
          metal: "Metal",
        },
        unsupported: {
          notInstalled: "لم يُعثر على تثبيت llama.cpp مُدار، لذا لا توجد خلفية لتبديلها.",
          localLink: "llama.cpp مجلد محلي ربطته بنفسك، ولن يستبدله Unsloth.",
          sourceBuild: "بُني هذا الإصدار من llama.cpp من الشيفرة المصدرية، لذا لا يمكن تبديل خلفيته من هنا.",
          unresolved: "تعذّر التحقق من الخلفيات المتاحة. تحقّق من اتصالك وحاول مرة أخرى.",
        },
        // لا يظهر: كلمات إضافية لبحث الإعدادات.
        llamaBackendKeywords:
          "llama.cpp backend gguf استدلال cuda rocm hip vulkan metal cpu gpu مسرّع prebuilt تبديل محرك",
      },
      modelMemory: {
        title: "ذاكرة النموذج",
        keepResident: "إبقاء النموذج في ذاكرة كرت الرسوميات",
        keepResidentDescription: "يبقى في ذاكرة كرت الرسوميات بين الرسائل.",
        keepResidentHint: "لا تُعاد الأوزان إلى ذاكرة النظام ما دام النموذج محمَّلاً. يعطّل التفريغ التلقائي عند الخمول، وإذا كانت الأوزان موجودة فعلاً في ذاكرة المضيف (ذاكرة موحّدة أو تفريغ جزئي إلى المعالج الرسومي) فإنه يمرّر ‎--mlock‎ أيضاً حتى لا يُخرجها النظام من الذاكرة ويعيد رفعها عند رسالتك التالية.",
        noRamReserve: "عدم حجز ذاكرة النظام للنموذج",
        noRamReserveDescription: "لا يحتفظ بنسخة كاملة في ذاكرة النظام.",
        noRamReserveHint: "ينقل الأوزان إلى ذاكرة كرت الرسوميات بدل الاحتفاظ بنسخة كاملة في ذاكرة النظام. يُبقي تحميل llama.cpp المعتمد على تعيين الذاكرة ويحذف ‎--no-mmap‎ و‎--mlock‎.",
        mlockVetoed: "يبقى ‎--mlock‎ معطَّلاً: تثبيت النموذج سيحجز ذاكرة تكفي حجمه كاملاً. ولا يزال التفريغ التلقائي عند الخمول معطَّلاً.",
        memlockCapped: "يحدّ هذا النظام الذاكرة المقفلة عند {limit}. لن يُثبَّت نموذج أكبر بالكامل؛ ارفع الحد باستخدام ulimit -l.",
        reloadRequired: "أعد تحميل النموذج لتطبيق خيارات الذاكرة الجديدة.",
        loadError: "تعذّر تحميل إعدادات ذاكرة النموذج",
        saveError: "تعذّر حفظ إعدادات ذاكرة النموذج",
        // Not rendered: extra terms the settings search matches these rows on.
        modelMemoryKeywords:
          "mlock memlock ulimit vram gpu ذاكرة رام مقيم تثبيت قفل إبقاء محمل تفريغ خامل mmap no-mmap load-mode تبديل ترحيل",
      },
      storage: {
        title: "التخزين",
        systemDisk: "قرص النظام",
        diskUsage: "{used} مستخدم / {total}",
        diskFree: "{free} متاح",
        modelsFolder: "مجلد النماذج",
        modelsFolderKeywords:
          "النماذج مجلد دليل مسار موقع تنزيلات التنزيل ذاكرة التخزين المؤقت تخزين قرص محرك نقل تغيير models folder path hugging face",
        modelsFolderDescription: "مكان تخزين النماذج التي جرى تنزيلها.",
        modelsFolderHint: "مكان تخزين النماذج التي جرى تنزيلها. غيّره لإبقاء النماذج بعيدًا عن قرص النظام. ينطبق على التنزيلات الجديدة فقط، أما النماذج الموجودة لديك فتبقى في مكانها.",
        openAction: "فتح",
        copyAction: "نسخ المسار",
        copied: "تم نسخ المسار",
        openError: "تعذّر فتح المجلد",
        copyError: "تعذّر نسخ المسار",
        futureDownloads: "التنزيلات الجديدة فقط",
        environmentManaged: "يُدار عبر متغيّر البيئة {variable}.",
        locationFree: "{free} متاح",
        changeAction: "تغيير",
        resetAction: "استخدام الافتراضي",
        chooseTitle: "اختيار موقع تنزيل النماذج",
        chooseAction: "استخدامه للتنزيلات القادمة",
        cacheSaved: "تم تحديث موقع تنزيل النماذج",
        cacheSaveError: "تعذّر تحديث موقع تنزيل النماذج",
        cachePickerError: "تعذّر فتح أداة اختيار المجلد",
      },
      environment: {
        title: "البيئة",
        backend: "الواجهة الخلفية",
        python: "Python",
        torch: "Torch",
        transformers: "Transformers",
        uptime: "مدة التشغيل",
        processMemory: "ذاكرة العملية",
        notInstalled: "غير مثبّت",
        unknown: "غير معروف",
      },
    },
    agents: {
      title: "الوكلاء",
      description:
        "اربط وكلاء البرمجة مثل Claude Code وCodex بنموذج محلي باستخدام unsloth start.",
      intro:
        "يربط Claude Code وCodex وHermes وOpenClaw وOpenCode وغيرها من الوكلاء بنموذج يقدّمه Unsloth محليًا، دون اتصال بالإنترنت تمامًا. يشغّل خادمًا متوافقًا مع OpenAI ولا يمسّ ملفات إعدادات وكيلك إطلاقًا.",
      readDocs: "قراءة التوثيق",
      copy: "نسخ",
      copied: "تم النسخ",
      commandBuilder: "منشئ الأوامر",
      agent: "وكيل البرمجة",
      model: "النموذج",
      searchModels: "ابحث عن نماذج GGUF...",
      noModels: "لا توجد نماذج GGUF مطابقة.",
      showingModels:
        "يتم عرض {shown} من أصل {total} نتيجة. تابع الكتابة لتضييق القائمة.",
      quantization: "التكميم",
      loadingQuantizations: "جارٍ تحميل أنواع التكميم...",
      noQuantizations: "لا يوجد تكميم منفصل",
      recommended: "موصى به",
      downloaded: "مُنزَّل",
      quantizationLoadError:
        "تعذّر تحميل جميع أنواع التكميم. سيستخدم الأمر قيمة النموذج المتاحة.",
      generatedCommand: "الأمر المُنشأ",
      docs: "التوثيق",
      agentDocs: "فتح توثيق إعداد {agent}",
      copyGeneratedCommand: "نسخ الأمر المُنشأ",
      modelNote:
        "يتطلب Codex نموذج GGUF يقدّمه llama-server. أما الوكلاء الآخرون فيمكنهم استخدام النماذج المبنية على transformers أيضًا؛ احذف ‎--model لاستخدام النموذج المُحمَّل بالفعل في Unsloth.",
      subagent: {
        title: "استخدام نموذج محلي كوكيل فرعي",
        description:
          "أبقِ {agent} على نموذجه الحالي وفوّض مهام محددة إلى نموذج Unsloth المحلي هذا.",
        setupCommand: "أمر الإعداد",
        copySetupCommand: "نسخ أمر إعداد الوكيل الفرعي",
        usagePrompt: "ثم اكتب في {agent}:",
        copyUsagePrompt: "نسخ موجّه استخدام الوكيل الفرعي",
        defaultPrompt: "شغّل وكيلًا محليًا لتنفيذ هذه الدالة.",
        opencodePrompt: "@unsloth ابحث عن سبب فشل هذا الاختبار",
      },
      quickstart: {
        title: "بناء أمر",
        description:
          "شغّل وكيلًا على النموذج المُحمَّل حاليًا في Studio. حمّل نموذجًا أولًا، ثم استبدل claude بأي وكيل مدعوم أدناه.",
        noneDetected: "لم يُعثر في متغيّر PATH لديك على أي واجهة أوامر لوكيل مدعوم.",
        installed: "مثبّت",
      },
      supportedAgents: {
        title: "الوكلاء المدعومون",
        description: "يُشغَّل كل وكيل بأمره الخاص:",
        requiresGguf: "يحتاج إلى نموذج GGUF",
      },
      models: {
        title: "اختيار نموذج",
        description:
          "استخدم ‎--model لاختيار النموذج والتكميم، و‎--context-length لتحديد نافذة السياق. استخدم لاحقة تكميم أو الراية الصريحة ‎--gguf-variant.",
        suffixLabel: "مع لاحقة تكميم",
        variantLabel: "مع راية صريحة للنسخة",
      },
      options: {
        title: "الخيارات الشائعة",
        description:
          "تُحلَّل رايات Unsloth أولًا؛ وأي شيء لا يتعرّف عليه يُمرَّر كما هو إلى الوكيل.",
        model:
          "يختار نموذجًا. بدون ‎--model يستخدم unsloth start النموذج المُحمَّل حاليًا في Studio، ويُظهر خطأ إن لم يكن هناك أي نموذج محمَّل.",
        contextLength:
          "يحدد طول السياق المطلوب (اسم بديل: ‎--max-seq-length).",
        ggufVariant: "يختار نسخة تكميم GGUF.",
        loadIn4bit: "يفعّل أو يعطّل التحميل بـ 4 بت لنماذج Hugging Face.",
        tensorParallel:
          "يفعّل أو يعطّل التوازي التنسوري عبر عدة أجهزة GPU.",
        serve: "يفعّل أو يعطّل الخادم المحلي التلقائي.",
        launch: "يشغّل الوكيل، أو يكتفي بطباعة الأمر والبيئة.",
        persist: "يحتفظ بمساحة تخزين الوكيل التي يديرها Unsloth بين عمليات التشغيل.",
        asSubagent:
          "يبقي الوكيل الأصلي على نموذجه الحالي ويسجّل Unsloth كوكيل فرعي محلي (Claude Code وCodex وOpenCode).",
        apiKey: "يمرّر مفتاح API الخاص بـ Unsloth (أو اضبط UNSLOTH_API_KEY).",
        yolo: "يتخطى طلبات الموافقة. استخدمه في البيئات الموثوقة فقط.",
      },
      remote: {
        title: "الاتصال بنسخة بعيدة من Studio",
        description:
          "وجّه unsloth start إلى نسخة من Studio تعمل في مكان آخر بضبط ما يلي قبل التشغيل (أو مرّر ‎--api-key مباشرة):",
      },
      passthrough: {
        title: "تمرير وسائط إلى الوكيل",
        description:
          "الوسائط التي تأتي بعد رايات Unsloth تُمرَّر إلى الوكيل نفسه، لذا تظل أوامره الأصلية مثل resume تعمل:",
      },
      dryRun: {
        title: "المعاينة دون تشغيل",
        description:
          "أضف ‎--no-launch لطباعة البيئة والأمر بدلًا من تشغيل الوكيل. وإذا كان ‎--model مضبوطًا، فقد يُحدَّد النموذج ويُحمَّل رغم ذلك.",
      },
    },
    chat: {
      title: "المحادثة",
      description: "خصّص طريقة عمل المحادثة على هذا الجهاز.",
      modelSelection: {
        title: "إعدادات اختيار النموذج",
        expandQuantizations: "توسيع خيارات التكميم",
        expandQuantizationsDescription:
          "عند التفعيل: تعرض نماذج GGUF ضمن «On Device» خيارات التكميم الخاصة بها مباشرةً. عند التعطيل: انقر على نموذج لعرض خيارات التكميم الخاصة به.",
        showAllQuantizations: "إظهار جميع خيارات التكميم",
        showAllQuantizationsDescription:
          "عند التفعيل: تُدرج جميع خيارات التكميم ضمن «On Device»، بما فيها الخيارات غير المُنزَّلة. عند التعطيل: لا تظهر إلا خيارات التكميم المُنزَّلة.",
      },
      menu: {
        title: "قائمة المحادثة",
        description:
          "ثبّت العناصر في القائمة الجانبية لعلامة + في المحادثة. تنتقل العناصر الأخرى إلى «المزيد».",
        chatWithFiles: "المحادثة مع الملفات (RAG)",
        mcp: "MCP",
        savedPrompts: "الموجّهات المحفوظة",
        compareChat: "مقارنة المحادثات",
        exportChat: "تصدير المحادثة",
      },
      showResponseModel: "إظهار نموذج الاستجابة",
      showResponseModelDescription:
        "إظهار البيانات الوصفية للنموذج في ردود المساعد.",
      modelDisclaimer: "إظهار إخلاء مسؤولية النموذج",
      modelDisclaimerDescription:
        'إظهار عبارة "LLMs can make mistakes" أسفل مربع المحادثة.',
      thinking: {
        collapseByDefault: "طيّ التفكير افتراضيًا",
        collapseByDefaultDescription:
          "إبقاء التفكير مطويًا أثناء تفكير النموذج بدلًا من فتحه تلقائيًا. وسّع أي كتلة لقراءتها.",
      },
      artifacts: {
        title: "Canvas",
        collapseHtmlBlocks: "طي كتل HTML",
        collapseHtmlBlocksDescription:
          "يطوي وضع Canvas ملفات HTML الكاملة تلقائيًا. فعّل هذا لطي مستندات HTML المُحاطة بأسوار أيضًا عند إيقاف Canvas.",
        allowNetworkAccess: "السماح بوصول Canvas إلى الشبكة",
        allowNetworkAccessDescription:
          "اسمح لمعاينات Canvas بتحميل النصوص البرمجية والأنماط والخطوط والوسائط وموارد الشبكة من شبكات CDN. أبقِه معطّلاً للمعاينات دون اتصال بالكامل.",
        blockedBanner: "تم حظر {count} مورد خارجي من {hosts}.",
        blockedBannerPlural: "تم حظر {count} موارد خارجية من {hosts}.",
        blockedBannerAction: "السماح لهذا الـ Canvas",
      },
      data: "البيانات",
      exportHistory: "تصدير سجل المحادثات",
      exportHistoryDescription: "تنزيل جميع المحادثات والرسائل بصيغة JSON.",
      exportAction: "تصدير",
      exportingAction: "جارٍ التصدير...",
      exportConversations: "تصدير العناصر الأخيرة والمشاريع",
      exportConversationsDescription:
        "نزّل العناصر الأخيرة وحدها أو مع محادثات المشاريع بصيغة JSONL خام أو CSV أو ShareGPT JSONL، في ملف مجمّع أو في ملف لكل محادثة.",
      exportConversationsAction: "تصدير",
      exportScopeRecents: "العناصر الأخيرة",
      exportScopeAll: "العناصر الأخيرة + المشاريع",
      exportCombinedSuffix: "(مجمّعة)",
      exportPerChatSuffix: "(لكل محادثة)",
      importChats: "استيراد المحادثات",
      importChatsDescription:
        "استيراد ملف تصدير من Open WebUI أو JSONL أو NDJSON أو CSV إلى الأخيرة.",
      importChatsAction: "استيراد",
      importNoConversations: "لم يُعثر على محادثات في الملف.",
      importedOneChat: "تم استيراد محادثة واحدة إلى العناصر الأخيرة.",
      importedChatCount:
        "تم استيراد المحادثات إلى العناصر الأخيرة. العدد: {count}.",
      importingChats: "جارٍ استيراد المحادثات: {count} حتى الآن ({percent}%)...",
      importedChatCountPartial: "تم استيراد {count} محادثة إلى الأخيرة؛ تعذّر حفظ {failed} منها.",
      importFailed: "فشل الاستيراد.",
      clearHistory: "مسح سجل المحادثات",
      clearHistoryDescription: "حذف سجل المحادثات من هذا الجهاز.",
      clearAction: "مسح",
      clearAllChats: "مسح جميع المحادثات",
      clearAllChatsDescription: "حذف كل محادثة على هذا الجهاز نهائيًا.",
      noChatsToClear: "لا توجد محادثات لمسحها.",
      clearOneChatDescription:
        "حذف المحادثة الوحيدة على هذا الجهاز نهائيًا.",
      clearChatCountDescription:
        "حذف جميع المحادثات على هذا الجهاز نهائيًا. العدد: {count}.",
      clearChatsAction: "مسح المحادثات",
      clearOneChatTitle: "مسح محادثة واحدة؟",
      clearChatsTitle: "مسح المحادثات؟ العدد: {count}",
      clearChatsConfirmDescription:
        "يحذف كل محادثة على هذا الجهاز نهائيًا. لا يمكن التراجع عن هذا الإجراء.",
      clearingAction: "جارٍ المسح...",
      clearOneChatAction: "مسح محادثة واحدة",
      clearChatCountAction: "مسح المحادثات ({count})",
      clearedAllChats: "تم مسح جميع المحادثات",
      clearedOneChat: "تم مسح محادثة واحدة",
      clearedChatCount: "تم مسح المحادثات. العدد: {count}",
      someChatsCouldNotBeCleared: "تعذّر مسح بعض المحادثات",
      chatsClearedRemainOne:
        "تم مسح بعض المحادثات، وعددها {clearedCount}؛ وتبقّت محادثة واحدة. يُرجى إعادة المحاولة.",
      chatsClearedRemain:
        "تم مسح بعض المحادثات، وعددها {clearedCount}؛ وما زالت محادثات أخرى موجودة، وعددها {remainingCount}. يُرجى إعادة المحاولة.",
      oneChatClearedRemain:
        "تم مسح محادثة واحدة؛ وما زالت محادثات أخرى موجودة، وعددها {remainingCount}. يُرجى إعادة المحاولة.",
      oneChatClearedRemainOne:
        "تم مسح محادثة واحدة؛ تبقّت محادثة واحدة. يُرجى إعادة المحاولة.",
      storageClearFailedOne:
        "فشل مسح أحد مواقع التخزين؛ قد تبقى محادثة واحدة. يُرجى إعادة المحاولة.",
      storageClearFailed:
        "فشل مسح أحد مواقع التخزين؛ وقد تبقى محادثات، وعددها {count}. يُرجى إعادة المحاولة.",
      failedToClearChats: "فشل مسح المحادثات",
    },
    data: {
      title: "البيانات",
      backToData: "العودة إلى البيانات",
      exportFailed: "تعذّر تصدير المحادثات",
      description:
        "أدر سجل المحادثات والملفات المرفوعة المخزّنة على هذا الجهاز.",
      archivedChats: "المحادثات المؤرشفة",
      archivedChatsDescription: "اعرض المحادثات التي أرشفتها وأدرها.",
      archivedImages: "الصور المؤرشفة",
      archivedImagesDescription: "اعرض الصور التي أرشفتها وأدرها.",
      archivedVideos: "الفيديوهات المؤرشفة",
      archivedVideosDescription: "اعرض الفيديوهات التي أرشفتها وأدرها.",
      manageAction: "إدارة",
      exportArchivedChats: "تصدير",
      exportingArchivedChats: "جارٍ التصدير...",
      exportedOneArchivedChat: "تم تصدير محادثة مؤرشفة واحدة",
      exportedArchivedChatCount: "تم تصدير محادثات مؤرشفة، وعددها {count}",
      noArchivedChatsToExport: "لا توجد محادثات مؤرشفة للتصدير.",
      failedToExportArchivedChats: "تعذّر تصدير المحادثات المؤرشفة",
      archiveAllChats: "أرشفة جميع المحادثات",
      archiveAllChatsDescription:
        "ينقل كل محادثة في «العناصر الأخيرة» و«المشاريع» إلى الأرشيف.",
      noChatsToArchive: "لا توجد محادثات للأرشفة.",
      archiveAllAction: "أرشفة الكل",
      archivingAction: "جارٍ الأرشفة...",
      archiveAllChatsTitle: "أرشفة جميع المحادثات؟",
      archiveAllChatsConfirmDescription:
        "ينقل كل محادثة على هذا الجهاز إلى الأرشيف. تبقى المحادثات المؤرشفة متاحة ويمكن إخراجها من الأرشيف في أي وقت.",
      archivedAllChats: "تمت أرشفة جميع المحادثات",
      archivedOneChat: "تمت أرشفة محادثة واحدة",
      archivedChatCount: "تمت أرشفة محادثات، وعددها {count}",
      failedToArchiveChats: "تعذّرت أرشفة المحادثات",
      confirmBeforeDeleting: "التأكيد قبل الحذف",
      confirmBeforeDeletingDescription:
        "يطلب تأكيدًا قبل حذف أي محادثة. عطّله للحذف الفوري.",
      filesSection: "الملفات",
      uploadedFiles: "الملفات المرفوعة",
      uploadedFilesDescription:
        "اعرض الملفات المرفوعة إلى المحادثات والمشاريع وقواعد المعرفة وأدرها.",
      fineTuneExport: "استخدام المحادثات كبيانات تدريب",
      fineTuneExportDescription:
        "أنشئ مجموعة بيانات JSONL للضبط الدقيق من محادثاتك. حمّلها في تبويب التدريب، أو حسّنها في الوصفات، أو صدّرها.",
      fineTuneExportAction: "تصدير JSONL",
      fineTuneRunAction: "تشغيل",
      fineTuneExportingAction: "جارٍ التصدير...",
      fineTuneOpenRecipesAction: "فتح في الوصفات",
      fineTuneOpeningRecipesAction: "جارٍ الفتح...",
      fineTuneTrainAction: "تحميل في تبويب التدريب",
      fineTuneTrainingAction: "جارٍ التحميل...",
      fineTuneExportFailed: "تعذّر تصدير بيانات التدريب",
      fineTuneRecipeFailed: "تعذّر فتح المحادثات في الوصفات",
      fineTuneTrainFailed: "تعذّر تحميل مجموعة البيانات في تبويب التدريب",
    },
    connections: {
      title: "الاتصالات",
      description: "إدارة المزوّدين والاتصالات الخارجية.",
    },
    apiKeys: {
      title: "API",
      description: "الوصول إلى Unsloth عبر واجهة API المتوافقة مع OpenAI.",
      readDocs: "قراءة وثائق API",
      noAccess: "لا يوجد وصول إلى API بعد.",
      accessTokens: "توكنات الوصول",
      loadError: "تعذّر تحميل وصول API.",
      createError: "تعذّر إنشاء توكن الوصول.",
      revokeError: "تعذّر إلغاء توكن الوصول.",
      never: "دون انتهاء",
      tokenNamePlaceholder: "اسم التوكن (مثل production)",
      newAccessTokenName: "اسم توكن الوصول الجديد",
      createToken: "إنشاء توكن",
      creating: "جارٍ الإنشاء...",
      newTokenCreated: "تم إنشاء توكن وصول جديد",
      accessTokenCopied: "تم نسخ توكن الوصول",
      copyAccessToken: "نسخ توكن الوصول",
      copyNow: "انسخه الآن - لن يُعرض مرة أخرى.",
      usageExamples: "أمثلة الاستخدام",
      usageTools: "الأدوات",
      exampleCurlTools: "curl + أدوات",
      examplePythonTools: "Python + أدوات",
      exampleJavaScriptTools: "JavaScript + أدوات",
      exampleCurlAdvanced: "curl + متقدم",
      examplePythonAdvanced: "Python + متقدم",
      exampleJavaScriptAdvanced: "JavaScript + متقدم",
      osUnix: "Linux / macOS / WSL",
      osWindows: "Windows",
      secureHttps: "HTTPS آمن",
      secureHttpsHint:
        "لا يزال المنفذ على العنوان 0.0.0.0 متاحًا عالميًا. للحصول على أمان كامل، شغّل Unsloth باستخدام --secure لإتاحة رابط HTTPS هذا فقط.",
      copyTunnelUrl: "نسخ رابط النفق",
      copySnippet: "نسخ المقتطف",
      copy: "نسخ",
      copied: "تم النسخ",
      setupDocs: "وثائق الإعداد:",
      codingAgents: "وكلاء البرمجة",
      codingAgentsHint:
        "شغّل وكيل برمجة متصلًا بهذا الخادم. يستخدم الوكيل النموذج المُحمَّل؛ وينشئ الخادم المحلي مفتاح API تلقائيًا، بينما يضمّنه الخادم البعيد في الأمر.",
      codingAgentsSwap: "استبدل claude بـ codex أو openclaw أو opencode أو hermes.",
      codingAgentDetected: "مثبّت على هذا الجهاز",
      codingAgentsDetectedHint: "وكلاء البرمجة المكتشفون على هذا الجهاز: {agents}.",
      relativeNever: "لا يوجد",
      relativeJustNow: "للتوّ",
      expired: "منتهي الصلاحية",
      today: "اليوم",
      created: "أُنشئ {value}",
      used: "آخر استخدام: {value}",
      expires: "الانتهاء: {value}",
      actionsFor: "إجراءات {name}",
      copyPrefix: "نسخ البادئة",
      revokeToken: "إلغاء التوكن",
      revokeTitle: 'إلغاء توكن الوصول "{name}"؟',
      revokeDescription:
        "ستفقد التطبيقات التي تستخدم هذا التوكن الوصول فورًا. لا يمكن التراجع عن هذا الإجراء.",
      revokeAction: 'إلغاء "{name}"',
      revoking: "جارٍ الإلغاء...",
      usageNoModel:
        "حمّل نموذجًا أو نزّله لعرض أمثلة قابلة للتشغيل. لا يوجد في هذا الخادم أي نموذج يمكن استخدامه في الأمثلة بعد.",
    },
    about: {
      title: "حول",
      description: "الوثائق وملاحظات الإصدار والآراء ومعلومات النسخة.",
      studioVersion: "إصدار Unsloth",
      packageVersion: "إصدار الحزمة",
      desktopAppVersion: "إصدار تطبيق سطح المكتب",
      desktopAppVersionUnavailable: "غير متاح",
      llamaCppVersion: "إصدار llama.cpp",
      hardware: "الأجهزة",
      gpu: "GPU",
      cuda: "CUDA",
      rocm: "ROCm",
      xpu: "XPU",
      updates: "التحديث",
      help: "مساعدة",
      documentation: "الوثائق",
      releaseNotes: "ملاحظات الإصدار",
      whatsNew: "ما الجديد",
      feedback: "الملاحظات",
      reportIssue: "الإبلاغ عن مشكلة",
      license: {
        sectionTitle: "الترخيص",
        studioLabel: "Unsloth",
        studioLicense: "AGPL-3.0",
        studioDescription: "مفتوح المصدر بموجب GNU AGPL v3.0.",
        libraryLabel: "Unsloth Core",
        libraryLicense: "Apache-2.0",
        libraryDescription: "مرخّص بموجب Apache 2.0.",
      },
      dangerZone: "منطقة الخطر",
      shutDownStudio: "إيقاف تشغيل Unsloth",
      shutDownStudioDescription:
        "يوقف خادم Unsloth وينهي جلستك.",
      shutDown: "إيقاف التشغيل",
      update: {
        title: "تحديث Unsloth",
        commandText: "نص {label}",
        copied: "تم النسخ",
        copyCommand: "نسخ الأمر",
        commandCopied: "تم نسخ {label}",
        copyNamedCommand: "نسخ {label}",
        checkingInstall: "جارٍ التحقق من طريقة تثبيت Unsloth...",
        installIntro: "لتثبيت أو تحديث Unsloth:",
        localUpdateHeading: "تحديث محلي",
        installCommandUnix: "أمر التثبيت على macOS أو Linux",
        installCommandWindows: "أمر التثبيت على Windows",
        localInstallDetected:
          "تم اكتشاف تثبيت محلي. حدّث من نسختك الأصلية لتجنّب استبدالها بإصدار PyPI.",
        pullThenUpdate:
          "اسحب أحدث التغييرات، ثم شغّل المثبّت المحلي:",
        gitPullCommand: "أمر git pull",
        localInstallerCommand: "أمر المثبّت المحلي",
        sourceInstallDetected:
          "تم اكتشاف تثبيت من المصدر أو حزمة VCS. أعد التثبيت من المسار المحلي الأصلي أو رابط Git.",
        repoCheckoutFallback:
          "إذا كانت لا تزال لديك نسخة المستودع، شغّل المثبّت المحلي منها:",
        restartAfterUpdate: "أعد تشغيل Unsloth بعد التحديث.",
        desktopManaged:
          "يتحقق تطبيق سطح المكتب تلقائيًا من توفر إصدارات جديدة. ويمكنك أيضًا التحقق من وجود تحديثات أو تثبيتها هنا في أي وقت.",
        desktopReady: "تحديثات تطبيق سطح المكتب",
        desktopReadyDescription:
          "تحقق مما إذا كان يتوفر إصدار أحدث من تطبيق سطح المكتب.",
        desktopChecking: "جارٍ التحقق من وجود تحديثات",
        desktopCheckingDescription: "يستغرق ذلك عادةً بضع ثوانٍ.",
        desktopAvailable: "يتوفر إصدار جديد من تطبيق سطح المكتب: {version}",
        desktopAvailableDescription:
          "حدّث الآن، وسيُعاد تشغيل تطبيق سطح المكتب عند اكتمال التحديث.",
        desktopExternalServer:
          "شغّل الأمر `unsloth studio update` في الطرفية التي شغّلت الخادم.",
        desktopManualInstall:
          "افتح صفحة الإصدار لتثبيت أحدث حزمة لنظام Linux.",
        desktopCheckFailed: "تعذّر التحقق من وجود تحديثات",
        desktopCheckFailedDescription: "تحقق من اتصالك ثم حاول مرة أخرى.",
        desktopCurrent: "تطبيق سطح المكتب محدّث",
        desktopCurrentDescription: "سيواصل Unsloth التحقق تلقائيًا.",
        checkForUpdates: "التحقق من وجود تحديثات",
        checkAgain: "التحقق مرة أخرى",
        retryCheck: "إعادة المحاولة",
        checking: "جارٍ التحقق...",
        updateNow: "التحديث الآن",
        openReleasePage: "فتح صفحة الإصدار",
        unknownInstall:
          "تعذّر اكتشاف طريقة تثبيت Unsloth. لعمليات تثبيت المثبّت أو PyPI، استخدم الأوامر أعلاه.",
        localCheckout:
          "لعمليات تثبيت النسخة المحلية، شغّل المثبّت المحلي من تلك النسخة:",
        docs: "وثائق التثبيت:",
        docsInstall: "التثبيت",
        docsUpdating: "التحديث",
        docsMac: "Mac",
        docsWindows: "Windows",
      },
    },
  },
  studio: {
    imageTraining: "تدريب الصور",
    goToImageTraining: "الانتقال إلى تدريب الصور",
    routeTitle: "تدريب",
    wizard: {
      modelTitle: "النموذج",
      modelDescription: "اختر النموذج وطريقة التدريب",
      datasetTitle: "مجموعة البيانات",
      datasetDescription: "اختر بيانات التدريب أو حمّلها",
      paramsTitle: "المعلمات",
      paramsDescription: "اضبط معلمات التدريب",
      configTitle: "التكوين",
      configDescription: "احفظ التكوينات وحمّلها",
      modelLabel: "النموذج",
      methodLabel: "الطريقة",
      datasetLabel: "مجموعة البيانات",
      modelTooltip: "النموذج الأساسي الذي تريد ضبطه.",
      methodTooltip: "طريقة تدريب النموذج. يحدّث LoRA وQLoRA محوّلات صغيرة بدلاً من جميع الأوزان.",
      datasetTooltip: "بيانات التدريب المستخدمة لضبط النموذج.",
      hfTokenDescription:
        "مطلوب للنماذج ومجموعات البيانات المقيّدة أو الخاصة.",
      uploadLocalLabel: "أو حمّل ملفًا محليًا",
      sourceBrowse: "استعراض",
      releaseToUpload: "أفلت للتحميل",
      loadYaml: "تحميل YAML",
      saveYaml: "حفظ YAML",
      resetDefaults: "إعادة التعيين إلى القيم الافتراضية",
      cachedModelGoneTitle: "لم يعد النموذج المخزّن مؤقتًا متاحًا",
      cachedModelGoneDescription:
        "لم تعد ملفات النموذج موجودة على هذا الجهاز، لذا سيُعاد تنزيلها عند بدء التدريب.",
      cachedDatasetGoneTitle:
        "لم تعد مجموعة البيانات المخزّنة مؤقتًا متاحة",
      cachedDatasetGoneDescription:
        "لم تعد ملفات مجموعة البيانات موجودة على هذا الجهاز، لذا سيُعاد تنزيلها عند بدء التدريب.",
    },
    preview: {
      title: "معاينة العملية",
      ready: "جاهز",
      notReady: "غير جاهز",
      modelPending: "بانتظار النموذج",
      datasetPending: "بانتظار مجموعة البيانات",
      method: "الطريقة",
      length: "الطول",
      stepZero: "{count} خطوة",
      step: "{count} خطوة",
      stepTwo: "{count} خطوتان",
      stepFew: "{count} خطوات",
      stepMany: "{count} خطوة",
      steps: "{count} خطوة",
      epochZero: "{count} حقبة",
      epoch: "{count} حقبة",
      epochTwo: "{count} حقبتان",
      epochFew: "{count} حقب",
      epochMany: "{count} حقبة",
      epochs: "{count} حقبة",
      batch: "الدفعة",
      context: "السياق",
      lr: "معدل التعلّم",
      hardware: "الأجهزة",
      noGpu: "لم يتم اكتشاف GPU",
      hfToken: "توكن HF",
      saved: "محفوظ",
      notSet: "غير معيّن",
      files: "الملفات",
      model: "النموذج",
      dataset: "مجموعة البيانات",
      downloadsOnStart: "سيتم التنزيل عند البدء",
      continuesOnStart: "سيُستكمل عند البدء",
      noticeModelDownload:
        "هذا النموذج غير موجود على الجهاز بعد. سيُنزّله التدريب تلقائيًا.",
      noticeModelPartial:
        "سيُكمل التدريب التنزيل غير المكتمل للنموذج قبل تحميله.",
      noticeDatasetDownload:
        "مجموعة البيانات هذه غير موجودة على الجهاز بعد. سيُنزّلها التدريب تلقائيًا.",
      noticeDatasetPartial:
        "سيُكمل التدريب التنزيل غير المكتمل لمجموعة البيانات قبل قراءتها.",
      noticeTransformersUpgrade:
        "لا يدعم أي إصدار مثبَّت من transformers هذه البنية بعد. عند بدء التشغيل سيُعرض تثبيت transformers {version} أولاً.",
      noticeSixteenBitOnly:
        "تتدرَّب هذه البنية بـ LoRA بدقة 16 بت: خيار 4 بت غير متاح لها، لذا يحتاج التشغيل ذاكرة VRAM أكبر بكثير من QLoRA.",
      noticeInstallSwitchesSixteenBit:
        "تثبيت ذلك الإصدار بدل الإبقاء على شيفرة النموذج نفسه ينقل هذا التشغيل إلى LoRA بدقة 16 بت، وهو يحتاج ذاكرة VRAM أكبر بكثير من QLoRA.",
      advancedSettings: "الإعدادات المتقدمة",
      defaultAdvancedSettings: "الإعدادات الافتراضية",
      nonDefaultAdvancedSettings: "{count} غير افتراضي",
    },
    datasetPicker: {
      noun: "مجموعات البيانات",
      selectDataset: "اختر مجموعة بيانات",
      hubPlaceholder: "ابحث في مجموعات بيانات Hugging Face...",
      devicePlaceholder: "ابحث في مجموعات البيانات المحلية...",
      useAsHubDataset: "استخدامها كمجموعة بيانات Hugging Face",
      hfCacheLabel: "ذاكرة HF المؤقتة",
      scanningLocal: "جارٍ فحص مجموعات البيانات على هذا الجهاز…",
      couldntScan: "تعذّر فحص مجموعات البيانات المحلية",
      someLocationsUnscanned:
        "تعذّر فحص بعض مواقع مجموعات البيانات.",
      noLocalDatasets:
        "لا توجد بيانات على هذا الجهاز بعد. نزّل مجموعة بيانات من Hub أو أنشئ واحدة في الوصفات أو حمّل ملفًا.",
      openDataRecipes: "فتح وصفات البيانات",
      searchingHub: "جارٍ البحث في Hugging Face…",
      noDatasetsFound: "لم يُعثر على مجموعات بيانات.",
      tokenRejectedTitle: "رُفض توكن Hugging Face",
      tokenRejectedBody:
        "حدّث التوكن في الإعدادات ← عام، ثم أعد المحاولة.",
      hubUnreachable: "تعذّر الوصول إلى Hugging Face",
      cantUseDataset: "تعذّر استخدام مجموعة البيانات",
      reasonInvalidHubId:
        "أدخل معرّفًا صالحًا لمجموعة بيانات Hugging Face بصيغة مستودع أو مالك/مستودع، باستخدام الأحرف والأرقام و. و_ و- فقط (بحد أقصى 96 حرفًا لكل جزء).",
      sourceRecipe: "وصفة",
      sourceUpload: "رفع",
      sourceLocal: "محلي",
    },
    modelPicker: {
      noun: "النماذج",
      selectModel: "اختر نموذجًا",
      hubPlaceholder: "ابحث أو الصق معرّف Hugging Face...",
      devicePlaceholder: "ابحث في النماذج المحلية أو الصق مسار مجلد...",
      useAsHubModel: "استخدامه كنموذج Hugging Face",
      useAsLocalPath: "استخدامه كمسار محلي",
      hfCacheLabel: "ذاكرة HF المؤقتة",
      scanningLocal: "جارٍ فحص النماذج المحلية…",
      couldntScan: "تعذّر فحص النماذج المحلية",
      someLocationsUnscanned: "تعذّر فحص بعض المواقع المحلية.",
      noLocalModels: "لم يُعثر على نماذج محلية.",
      noLocalModelsHint:
        "الصق مسار مجلد أعلاه أو انتقل إلى Hugging Face.",
      searchingHub: "جارٍ البحث في Hugging Face…",
      noModelsFound: "لم يُعثر على نماذج.",
      tokenRejectedTitle: "رُفض توكن Hugging Face",
      tokenRejectedBody:
        "حدّث التوكن في الإعدادات ← عام، ثم أعد المحاولة.",
      hubUnreachable: "تعذّر الوصول إلى Hugging Face",
      cantUseModel: "لا يمكن استخدام النموذج للتدريب",
      reasonTypeMismatch:
        "هذا النموذج لا يطابق نوع التدريب المحدد في الخطوة السابقة.",
      reasonEmptyId: "أدخل معرّف نموذج أو مسار نموذج محلي.",
      reasonInvalidHubId:
        "أدخل معرّفًا صالحًا لنموذج Hugging Face بصيغة مستودع أو مالك/مستودع، باستخدام الأحرف والأرقام و. و_ و- فقط (بحد أقصى 96 حرفًا لكل جزء).",
      reasonGguf: "لا يمكن استخدام نماذج GGUF للتدريب.",
      reasonAdapter:
        "لا يمكن استخدام مخرجات المهايئ كنماذج أساسية للتدريب.",
      reasonNotTrainable: "هذا النموذج الموجود على الجهاز غير قابل للتدريب.",
      reasonUnsupportedFormat: "تنسيق هذا النموذج غير مدعوم للتدريب.",
      vramNeeds: "يحتاج إلى نحو {est}GB من VRAM (GPU: {total}GB)",
      vramTight: "نحو {est}GB من VRAM (المساحة ضيقة على {total}GB)",
      vramApprox: "نحو {est}GB من VRAM",
      sourceModelsFolder: "مجلد النماذج",
      sourceHfCache: "ذاكرة HF المؤقتة",
      sourceLmStudio: "LM Studio",
      sourceOllama: "Ollama",
      sourceCustomFolder: "مجلد مخصّص",
      sourceLocalModel: "نموذج محلي",
      vramOomBadge: "OOM",
      vramTightBadge: "محدود",
    },
    methods: {
      qlora: {
        label: "QLoRA",
        hint: "تكميم 4 بت. أقل استهلاكًا لـ VRAM وأسرع بدءًا.",
        note: "4 بت",
      },
      lora: {
        label: "LoRA",
        hint: "مهايئات 16 بت. توازن بين الجودة والذاكرة.",
        note: "16 بت",
      },
      full: {
        label: "ضبط دقيق كامل",
        hint: "يدرّب جميع الأوزان. أعلى جودة ويتطلب أكبر قدر من VRAM.",
        note: "fp16",
      },
      cpt: {
        label: "التدريب المسبق المستمر",
        hint: "تدريب مسبق مستمر لمجالات أو لغات جديدة.",
        note: "مستمر",
      },
    },
    subtitles: {
      configure: "إعداد التدريب وبدئه",
      trainingInProgress: "التدريب قيد التقدم",
      viewPastRuns: "عرض عمليات التدريب السابقة",
      viewingPastRun: "عرض عملية سابقة",
    },
    tabs: {
      configure: "الإعداد",
      currentRun: "العملية الحالية",
      history: "السجل",
    },
    loadingRuntime: "جارٍ تحميل بيئة تشغيل التدريب...",
    checkingSupport: "جارٍ التحقق من دعم هذا الجهاز للتدريب...",
    backToHistory: "العودة إلى السجل",
    dataset: {
      selectors: {
        subset: "المجموعة الفرعية",
        subsetTooltip:
          "اختر المجموعة الفرعية (الإعداد) من مجموعة البيانات لاستخدامها.",
        trainSplit: "قسم التدريب",
        trainSplitTooltip: "اختر القسم الذي سيُستخدم للتدريب.",
        evaluationSplit: "قسم التقييم",
        evaluationSplitTooltip:
          "اختر القسم الذي سيُستخدم للتقييم. يعني «بلا» عدم إجراء تقييم أثناء التدريب.",
        selectSubset: "اختر مجموعة فرعية...",
        selectSplit: "اختر قسمًا...",
        none: "بلا",
        loading: "جارٍ تحميل إعدادات مجموعة البيانات وأقسامها...",
        manualTitle: "أدخل خيارات مجموعة البيانات يدويًا",
        manualDescription:
          "أدخل أسماء إعداد Hugging Face والأقسام الدقيقة المراد استخدامها.",
        manualSubsetPlaceholder: "اسم الإعداد اختياري",
        manualRequired: "قسم التدريب مطلوب.",
        manualTooLong: "استخدم 128 حرفًا أو أقل.",
        manualInvalid: "تحتوي هذه القيمة على أحرف غير مدعومة.",
      },
      sourceAriaLabel: "مصدر مجموعة البيانات",
      localDataset: "مجموعة بيانات محلية",
      localDatasetRows: " / عدد الصفوف: {count}",
      huggingFaceDataset: "مجموعة بيانات Hugging Face",
      localDatasetMetadata: "بيانات وصفية لمجموعة البيانات المحلية",
      dataRecipeOutput: "مخرجات Data Recipe.",
      rows: "الصفوف",
      columns: "الأعمدة",
      batches: "الدفعات",
      updated: "آخر تحديث",
      evalDataset: "مجموعة بيانات التقييم",
      uploading: "جارٍ الرفع...",
      uploadEvalFile: "رفع ملف التقييم",
      fileTooLarge: "الملف كبير جدًا",
      fileTooLargeDescription:
        "حجم {file} هو {size}. تدعم عمليات تحميل بيانات التدريب حجمًا يصل إلى {limit}.",
      documentRedirect: {
        title: "يجب تحويل هذا الملف أولًا",
        genericFile: "هذا الملف",
        description:
          "{file} مادة مصدر وليس مجموعة بيانات جاهزة للتدريب. استخدم Data Recipes لتحويل المستند إلى مجموعة بيانات، ثم عُد إلى هنا لإجراء الضبط الدقيق.",
        nextStepTitle: "أفضل خطوة تالية",
        nextStepDescription:
          "افتح Learning Recipes وابدأ بوصفة قائمة على المستندات مثل PDF grounded QA.",
        openAction: "فتح Learning Recipes",
      },
      evalDatasetDescription:
        "اختياري. إذا لم يُقدَّم، سيتم فصل جزء صغير من بيانات التدريب.",
      advanced: "متقدم",
      targetFormat: "التنسيق المستهدف",
      targetFormatTooltip:
        "تنسيق بيانات التدريب الخاصة بك. يعمل الاكتشاف التلقائي مع معظم مجموعات البيانات.",
      streamingInfoAriaLabel: "معلومات بث مجموعة البيانات",
      streaming: {
        label: "تفعيل البث",
        description:
          "بث مجموعات البيانات النصية من Hugging Face بدلًا من تنزيلها.",
        unavailable: "البث غير متاح. لتفعيله:",
        completionsUnavailable:
          "غير متاح أثناء تفعيل بث مجموعة البيانات.",
        blockers: {
          source:
            "استخدم مجموعة بيانات من Hugging Face (وليس تحميلًا محليًا أو مصدر S3).",
          maxSteps:
            "اضبط الحد الأقصى للخطوات على قيمة أكبر من 0 — لا تملك مجموعات البيانات المتدفقة طولًا معروفًا.",
          trainOnCompletions: 'أوقف خيار "إكمالات المساعد فقط".',
          evalSplit:
            "اختر تقسيم تقييم منفصلًا — التقييم مفعّل، لكن لم يُعيّن تقسيم تقييم مميز.",
          visionModel: "نماذج الرؤية لا تدعم البث.",
          audioModel: "نماذج الصوت لا تدعم البث.",
          embeddingModel:
            "نماذج التضمين لا تدعم البث (يحتاج التدريب إلى مجموعة البيانات كاملة).",
          imageDataset:
            "يبدو أن مجموعة البيانات هذه تحتوي على صور، ولا يمكن بثها.",
          audioDataset:
            "يبدو أن مجموعة البيانات هذه تحتوي على صوت، ولا يمكن بثها.",
          appleSilicon:
            "البث غير مدعوم على Apple Silicon (MLX) حتى الآن.",
        },
        options: {
          trainOnCompletions: "إكمالات المساعد فقط",
          evaluation: "التقييم (يتطلب تقسيم تقييم منفصلًا)",
        },
        notifications: {
          turnedOffMaxSteps:
            "تم إيقاف البث: يتطلب البث حدًا أقصى ثابتًا للخطوات أكبر من 0.",
          adjusted:
            "تم ضبط الإعدادات للبث. عُطّلت الخيارات غير المتوافقة: {options}.",
          needsMaxSteps:
            "يتطلب البث حدًا أقصى ثابتًا للخطوات (لا تملك مجموعات البيانات المتدفقة طولًا معروفًا). اضبط الحد الأقصى للخطوات على قيمة أكبر من 0 أولًا.",
          enabledAdjusted:
            "تم تفعيل البث. عُطّلت الخيارات غير المتوافقة: {options}.",
          disabledForDetectedModality:
            "تم إيقاف البث لأن مجموعات بيانات الصور والصوت تتطلب تنزيلًا كاملًا. راجع الإعداد، ثم ابدأ التدريب مجددًا.",
        },
      },
      auto: "تلقائي",
      rawText: "نص خام",
      trainSplitStart: "بداية تقسيم التدريب",
      trainSplitStartTooltip:
        "درّب على جزء فرعي فقط من تقسيم التدريب عبر تحديد فهرس صف البداية (شامل، يبدأ من 0). اتركه فارغًا للبدء من الصف الأول.",
      trainSplitEnd: "نهاية تقسيم التدريب",
      trainSplitEndTooltip:
        "آخر فهرس صف يُضمَّن من تقسيم التدريب (شامل، يبدأ من 0). على سبيل المثال، اضبط البداية على 0 والنهاية على 99 للتدريب على أول 100 صف. اتركه فارغًا لاستخدام جميع الصفوف المتبقية.",
      endPlaceholder: "النهاية",
      clear: "مسح",
      dropFileOrClick: "أفلت ملفًا واحدًا هنا أو انقر لرفعه",
      uploadDetails: "تفاصيل التحميل",
      uploadDetailsTooltip:
        "حتى {limit} لكل ملف. ملفات PDF وDOCX وTXT ليست مجموعات بيانات جاهزة للتدريب، لذا حوّلها أولًا في وصفات التعلّم.",
      viewDataset: "عرض مجموعة البيانات",
      uploadFailed: "فشل الرفع",
      unknownError: "خطأ غير معروف",
      unsupportedFileType: "نوع ملف غير مدعوم",
      uploadOneFileType: "ارفع ملفًا واحدًا من نوع {types}.",
      datasetUploaded: "تم رفع مجموعة البيانات",
      evalDatasetUploaded: "تم رفع مجموعة بيانات التقييم",
      uploadOneFileAtATime: "ارفع ملفًا واحدًا في كل مرة",
      uploadSingleFileDescription:
        "لا يمكن رفع أكثر من ملف واحد لمجموعة بيانات التدريب.",
      previewLoadingHuggingFace:
        "جارٍ جلب معاينة مجموعة البيانات من Hugging Face...",
      previewLoading: "جارٍ تحميل المعاينة...",
      mappingRequirements: {
        audioAndText: "الصوت والنص",
        imageAndText: "الصورة والنص",
        instructionAndOutput: "التعليمات والمخرجات",
        humanAndGpt: "الإنسان وGPT",
        userAndAssistant: "المستخدم والمساعد",
      },
      mappingStatus: {
        heuristicTitle: "تعيين مكتشف بالاستدلال",
        readyTitle: "التعيين جاهز",
        requiredTitle: "تعيين أعمدة مجموعة البيانات",
        heuristicDescription:
          "اكتشفنا تلقائيًا تعيين الأعمدة أدناه باستخدام الاستدلال. راجعه وعدّله من القوائم المنسدلة في رؤوس الأعمدة، أو استخدم مساعدة الذكاء الاصطناعي للحصول على تعيين أدق.",
        readyDescription:
          "يبدو كل شيء جيدًا. سنحوّل مجموعة البيانات هذه تلقائيًا.",
        requiredDescription:
          "عيّن أدوارًا للأعمدة باستخدام القوائم المنسدلة في الرؤوس. يجب تعيين {required} على الأقل.",
      },
      s3: {
        title: "تكوين S3",
        description:
          "تحميل مجموعات بيانات .parquet أو .json أو .jsonl أو .csv من Amazon S3",
        bucket: "اسم الحاوية (Bucket)",
        bucketPlaceholder: "my-training-data-bucket",
        region: "منطقة AWS",
        regionPlaceholder: "us-east-1",
        prefix: "بادئة المسار",
        prefixPlaceholder: "datasets/whisper/",
        accessKeyId: "معرّف مفتاح الوصول",
        accessKeyIdPlaceholder: "AKIAIOSFODNN7EXAMPLE",
        secretAccessKey: "مفتاح الوصول السري",
        secretAccessKeyPlaceholder: "مفتاح الوصول السري لـ AWS الخاص بك",
        useIamRole: "استخدام دور IAM",
      },
    },
    params: {
      mode: {
        simple: "بسيط",
        advanced: "متقدم",
        ariaLabel: "وضع المعلمات",
      },
      projectName: "اسم المشروع",
      optional: "اختياري",
      projectNameDescription:
        "يُستخدم في أسماء مجلدات مخرجات التدريب والقيم الافتراضية للتصدير والسجل.",
      loraSettings: "إعدادات LoRA",
      trainingHyperparameters: "المعلمات الفائقة للتدريب",
      maxSteps: "الحد الأقصى للخطوات",
      epochs: "الحقب (Epochs)",
      useMaxSteps: "استخدام الحد الأقصى للخطوات",
      useEpochs: "استخدام الحقب",
      maxStepsTooltip: "تجاوز إجمالي خطوات المُحسِّن.",
      epochsTooltip: "عدد المرات الكاملة للمرور على مجموعة البيانات.",
      contextLength: "طول السياق",
      contextLengthTooltip: "الحد الأقصى لعدد التوكنات لكل عينة تدريب.",
      customContextLength: "أدخل قيمة مخصّصة",
      learningRate: "معدل التعلم",
      learningRateTooltip:
        "حجم الخطوة المستخدمة لتحديث الأوزان. تؤدي القيم الأقل إلى تدريب أبطأ وأكثر استقرارًا.",
      learningRateDescription:
        "موصى به: 2e-4 لـ LoRA، 5e-5 لـ CPT، 2e-5 للضبط الدقيق الكامل",
      embeddingLearningRate: "معدل تعلم التضمين (Embedding)",
      embeddingLearningRateTooltip:
        "يُستخدم فقط عندما تُدرّب CPT على embed_tokens. التضمينات أسهل في زعزعة استقرارها من أوزان LoRA، لذا تحتاج عادةً إلى معدل تعلم أصغر. اتركه فارغًا لاستخدام lr/10؛ النطاق المعتاد أصغر بمقدار 2x إلى 10x من معدل التعلم الرئيسي. زِده فقط إذا كان تكييف المفردات أو توكنات المجال بطيئًا جدًا.",
      rank: "الرتبة",
      rankTooltip: "بُعد المصفوفات منخفضة الرتبة. تمنح القيم الأعلى سعة أكبر.",
      alpha: "Alpha",
      alphaTooltip: "عامل القياس لتحديثات LoRA. عادةً ضعف قيمة Rank.",
      dropout: "Dropout",
      dropoutTooltip:
        "احتمال Dropout لطبقات LoRA لتقليل فرط التخصيص.",
      visionLayers: "طبقات الرؤية",
      languageLayers: "طبقات اللغة",
      attentionModules: "وحدات الانتباه",
      mlpModules: "وحدات MLP",
      targetModules: "الوحدات المستهدفة",
      enableLora: "تفعيل LoRA",
      trainWithLora: "التدريب باستخدام LoRA",
      stableRank: "رتبة مستقرة",
      memoryEfficient: "موفّر للذاكرة",
      weightDecomposed: "أوزان مُفكَّكة",
      notSupportedAppleSilicon: "غير مدعوم على Apple Silicon",
      optimization: "التحسين",
      schedule: "الجدولة",
      memory: "الذاكرة",
      optimizer: "المُحسِّن",
      optimizerTooltip:
        "خوارزمية التحسين. تقلّل الخيارات ذات 8 بت استهلاك الذاكرة. يُنصح بخيار Fused لنماذج الرؤية.",
      optimizerTooltipMlx:
        "خوارزمية التحسين. AdamW هو الخيار الافتراضي. يستخدم Lion ذاكرة أقل، لكنه يحتاج عادةً إلى معدل تعلم أقل.",
      lrScheduler: "مُجدوِل معدل التعلم",
      lrSchedulerTooltip:
        "كيفية تغيّر معدل التعلم خلال التدريب. Linear يتناقص بثبات؛ Cosine يتناقص في منحنى.",
      optimizerOptions: {
        adamw8bit: "AdamW 8-bit",
        pagedAdamw8bit: "Paged AdamW 8-bit",
        adamwBnb8bit: "AdamW BNB 8-bit",
        pagedAdamw32bit: "Paged AdamW 32-bit",
        adamwTorch: "AdamW (PyTorch)",
        adamwTorchFused: "AdamW (PyTorch Fused)",
      },
      lrSchedulerOptions: {
        linear: "خطي",
        cosine: "جيب التمام (Cosine)",
      },
      batchSize: "حجم الدفعة",
      batchSizeTooltip:
        "عدد العينات المعالجة في كل خطوة. تستخدم القيم الأعلى مساحة أكبر من VRAM.",
      gradAccum: "تراكم التدرّج",
      gradAccumTooltip: "يحاكي أحجام دفعات أكبر دون VRAM إضافي.",
      weightDecay: "اضمحلال الأوزان",
      weightDecayTooltip: "تنظيم L2 لمنع فرط التخصيص.",
      warmupSteps: "خطوات الإحماء",
      warmupStepsTooltip:
        "زيادة معدل التعلم تدريجيًا في بداية التدريب لتحقيق الاستقرار.",
      scheduleEpochsTooltip:
        "عدد المرات الكاملة للمرور على مجموعة البيانات. اضبطه على 0 للتشغيل حسب الحد الأقصى للخطوات.",
      saveSteps: "خطوات الحفظ",
      saveStepsTooltip: "حفظ نقطة تحقق كل N خطوة. 0 للتعطيل.",
      evalSteps: "خطوات التقييم",
      evalStepsTooltip:
        "نسبة إجمالي خطوات التدريب بين عمليات التقييم (0-1). اضبطها على 0 لتعطيل التقييم. مثال: 0.01 = تقييم كل 1% من الخطوات.",
      seed: "البذرة (Seed)",
      seedTooltip: "بذرة عشوائية لإمكانية إعادة الإنتاج.",
      gradCheckpoint: "نقطة تحقق التدرّج",
      gradCheckpointTooltip:
        "مقايضة الحوسبة بالذاكرة عبر إعادة حساب التنشيطات.",
      none: "بلا",
      standard: "قياسي",
      enablePacking: "تفعيل التعبئة (packing)",
      assistantCompletionsOnly: "إكمالات المساعد فقط",
      readMore: "اقرأ المزيد",
    },
    training: {
      startTraining: "بدء التدريب",
      starting: "جارٍ البدء...",
      loadingModel: "جارٍ تحميل النموذج...",
      checkingDataset: "جارٍ التحقق من مجموعة البيانات...",
      chooseModel: "اختر نموذجًا",
      chooseDataset: "اختر مجموعة بيانات",
      chooseModelAndDataset: "اختر نموذجًا ومجموعة بيانات",
      modelUnverified:
        "تعذّر التحقق من إعدادات هذا النموذج. تحقق من اتصالك أو توكن Hugging Face، ثم أعد المحاولة.",
      legacyDatasetScriptUnsupported:
        "تعتمد مجموعة بيانات Hub هذه على برنامج نصي مخصص قديم، وهي غير مدعومة في مسار التدريب هذا.",
      hfModelAccessDenied:
        "رفض Hugging Face الوصول إلى هذا النموذج. أضف رمز Hugging Face صالحًا يملك صلاحية الوصول إلى المستودع، ووافق على أي شروط وصول مطلوبة، ثم أعد المحاولة.",
      hfModelVerificationRateLimited:
        "وصل التحقق من نموذج Hugging Face إلى حد معدل الطلبات. أعد المحاولة بعد قليل.",
      hfModelVerificationFailed:
        "تعذر التحقق من نموذج Hugging Face. تحقق من معرّف المستودع ورمز الوصول.",
      hfModelMetadataUnavailable:
        "بيانات تعريف نموذج Hugging Face غير متاحة مؤقتًا. أعد المحاولة قبل بدء التدريب.",
      datasetUnverified:
        "تعذّر التحقق من توافق مجموعة البيانات مع هذا النموذج. تحقق من اتصالك أو توكن Hugging Face — ستُعاد محاولة التحقق عند بدء التدريب.",
      setupChanged:
        "تغيّر إعداد التدريب أثناء التحقق منه. راجعه ثم ابدأ التدريب مجددًا.",
      validation: {
        s3MultimodalUnsupported:
          "مجموعات بيانات S3 غير مدعومة بعد لتدريب الرؤية أو الصوت.",
        s3BucketRequired: "أدخل اسم حاوية S3 أولًا.",
        s3CredentialsRequired: "أدخل مفاتيح الوصول إلى S3 أو فعّل دور IAM.",
        modelRequired: "اختر نموذجًا أساسيًا أولًا.",
        learningRatePositive: "أدخل معدل تعلم أكبر من صفر.",
        embeddingLearningRateRange:
          "أدخل معدل تعلم تضمين أكبر من 0 وأقل من 1.",
        hfDatasetRequired: "اختر مجموعة بيانات Hugging Face أولًا.",
        hfDatasetSplitRequired: "اختر قسم التدريب أو أدخله أولًا.",
        localDatasetRequired: "اختر مجموعة بيانات محلية أولًا.",
        unsupportedDatasetSource: "مصدر مجموعة البيانات غير مدعوم.",
      },
      startFailed: "فشل بدء التدريب",
      startUnconfirmed:
        "تعذّر على Unsloth تأكيد بدء التدريب. جارٍ التحقق من الحالة في الخلفية.",
      stopFailed: "فشل إيقاف التدريب",
      trainingStillActiveTitle: "لا يزال التدريب نشطًا",
      stopBeforeConfig: "أوقف التدريب أولًا، ثم عُد إلى التكوين.",
      resumeFailed: "فشل استئناف التدريب",
      resumeFailedTitle: "تعذّر استئناف التدريب",
      resumeUnavailable:
        "لا يمكن استئناف سوى عمليات التدريب المتوقفة أو التي انتهت بخطأ ولديها نقطة تحقق محفوظة.",
      uploadConfigTooltip: "تحميل تكوين YAML محفوظ",
      saveConfigTooltip: "تنزيل التكوين الحالي بصيغة YAML",
      resetConfigTooltip: "إعادة التعيين إلى إعدادات النموذج الافتراضية",
      configLoaded: "تم تحميل التكوين",
      failedToLoadConfig: "فشل تحميل التكوين",
      invalidYamlFile: "ملف YAML غير صالح",
      configTooLarge:
        "ملف تكوين التدريب كبير جدًا (الحد الأقصى 1 MiB).",
      failedToReadFile: "فشلت قراءة الملف",
      failedToSaveConfig: "فشل حفظ التكوين",
      parametersReset: "تمت إعادة تعيين المعلمات إلى إعدادات النموذج الافتراضية",
      audioIncompatible:
        "لا يدعم هذا النموذج الصوت. انتقل إلى نموذج قادر على معالجة الصوت أو اختر مجموعة بيانات غير صوتية.",
      visionIncompatible:
        "النموذج النصي غير متوافق مع مجموعة بيانات متعددة الوسائط. انتقل إلى نموذج رؤية أو اختر مجموعة بيانات نصية فقط.",
      cancelTitle: "إلغاء التدريب",
      cancelDescription: "هل تريد إلغاء عملية التدريب الحالية؟",
      continueAction: "متابعة التدريب",
      cancelAction: "إلغاء التدريب",
      stopTitle: "إيقاف التدريب",
      stopDescription:
        "اختر طريقة إيقاف عملية التدريب الحالية. يؤدي «الإيقاف والحفظ» إلى إنشاء نقطة تحقق يمكنك استئناف التدريب منها لاحقًا، أما الإيقاف دون حفظ فلا يمكن استئناف التدريب بعده.",
      stopAction: "إيقاف",
      stopping: "جارٍ الإيقاف...",
      stopAndSave: "الإيقاف والحفظ",
      compareInChat: "المقارنة في المحادثة",
      exportModel: "تصدير النموذج",
      milestone: "مرحلة مهمة",
      halfwayDone: "اكتمل النصف. تجاوز التدريب 50%.",
      doneNextStep:
        "اكتمل التدريب. الخطوة التالية: قارن مخرجات النموذج الأساسي بمخرجات النموذج بعد الضبط الدقيق.",
    },
    history: {
      title: "السجل",
      filesDeleted: "تم حذف الملفات",
      deleteArtifactsLabel: "حذف ملفات المهايئ من القرص أيضًا",
      deleteArtifactsDescription:
        "يزيل مجلد مخرجات العملية، بما في ذلك المهايئات ونقاط التحقق المحفوظة.",
      deleteArtifactsSharedNote:
        "تشارك عملية أخرى مجلد المخرجات هذا. ستبقى الملفات حتى تُحذف آخر عملية تستخدمها.",
      artifactsKeptShared:
        "تم حذف العملية. أُبقيت ملفات المهايئ لأن عملية أخرى تستخدم المجلد نفسه.",
      deleteArtifactsActiveError:
        "هذه الملفات قيد الاستخدام بواسطة عملية التدريب الجارية. أوقف التدريب قبل حذفها.",
      deleteArtifactsFailed:
        "تم حذف العملية، لكن تعذّرت إزالة ملفاتها.",
      deleteArtifactsRetainedError:
        "تعذّرت إزالة ملفات المحوّل، لذلك تم الاحتفاظ بعملية التدريب في السجل.",
      emptyDescription:
        "لا توجد عمليات تدريب بعد. ابدأ أول عملية تدريب في علامة تبويب الإعداد.",
      loadError: "فشل تحميل عمليات التدريب",
      deleteError: "فشل حذف عملية التدريب. يُرجى إعادة المحاولة.",
      retry: "إعادة المحاولة",
      loadMore: "تحميل المزيد",
      loading: "جارٍ التحميل...",
      loadingRun: "جارٍ تحميل عملية التدريب...",
      runNotFound: "لم يُعثر على العملية",
      deleteTitle: "حذف عملية التدريب؟",
      deleteDescription:
        "سيؤدي هذا إلى حذف عملية التدريب هذه وجميع مقاييسها نهائيًا. لا يمكن التراجع عن هذا الإجراء.",
      resumeTraining: "استئناف التدريب",
      resuming: "جارٍ الاستئناف...",
      deleteRun: "حذف العملية",
      loss: "الخسارة",
      steps: "الخطوات",
      lossTrendSparkline: "مخطط اتجاه الخسارة المصغّر",
      relativeJustNow: "للتوّ",
      status: {
        completed: "مكتمل",
        stopped: "متوقف",
        error: "خطأ",
        running: "قيد التشغيل",
        continued: "مُستأنَف",
      },
      message: {
        completed: "اكتمل التدريب",
        stopped: "توقّف التدريب",
        running: "التدريب قيد التقدم",
        errored: "حدث خطأ في التدريب",
      },
      copyPreviewLink: "نسخ رابط المعاينة",
      previewLinkCopied: "تم نسخ رابط المعاينة",
      previewLinkCopyFailed: "تعذّر نسخ الرابط",
    },
    charts: {
      settings: "إعدادات الرسم البياني",
      settingsDescription:
        "اضبط عرض الرسم البياني بينما يستمر التدريب.",
      openSettings: "فتح إعدادات الرسم البياني",
      viewWindow: "نافذة العرض",
      viewWindowDescription: "إظهار أحدث الخطوات فقط أو السجل الكامل.",
      window: "النافذة",
      all: "الكل",
      trainingLoss: "خسارة التدريب",
      trainingLossDescription: "التحكم في التراكبات وتنعيم EMA.",
      smoothing: "التنعيم",
      smoothingDescription: "حرّك إلى اليمين لمزيد من التنعيم. `0` = خام.",
      showRawLoss: "إظهار الخسارة الخام",
      showSmoothedLoss: "إظهار الخسارة المُنعّمة",
      showAverageLine: "إظهار خط المتوسط",
      scaleAndCleanup: "القياس والتنظيف",
      linear: "خطي",
      log: "لوغاريتمي",
      noClip: "بدون اقتصاص",
      clipP99: "اقتصاص p99",
      clipP95: "اقتصاص p95",
      lossAxis: "محور الخسارة",
      gradientNormAxis: "محور معيار التدرّج",
      learningRateAxis: "محور معدل التعلم",
      resetDefaults: "إعادة الضبط إلى الإعدادات الافتراضية",
      loss: "الخسارة",
      smoothed: "مُنعّم",
      evalLoss: "خسارة التقييم",
      learningRate: "معدل التعلم",
      lr: "LR",
      gradNorm: "معيار التدرّج",
      gradientNorm: "معيار التدرّج",
      step: "الخطوة {step}",
      averageValue: "متوسط {value}",
      waitingForFirstEvaluationStep: "في انتظار خطوة التقييم الأولى...",
      evaluationNotConfigured: "التقييم غير مُعدّ",
      evalChartWillAppear: "سيظهر الرسم البياني بمجرد الوصول إلى eval_steps",
      setEvalDatasetAndSteps:
        "اضبط مجموعة بيانات التقييم وeval_steps لتتبّع خسارة التقييم",
    },
    progress: {
      title: "تقدم التدريب",
      liveMetrics: "مقاييس التدريب المباشرة",
      exportGguf: "التصدير إلى GGUF",
      openConfig: "فتح تكوين التدريب",
      configLabel: "تكوين التدريب",
      hyperparams: "المعلمات الفائقة",
      epochs: "الحقب",
      batchSize: "حجم الدفعة",
      learningRate: "معدل التعلم",
      optimizer: "المُحسِّن",
      maxSteps: "الحد الأقصى للخطوات",
      contextLength: "طول السياق",
      warmupSteps: "خطوات الإحماء",
      rank: "الرتبة",
      alpha: "Alpha",
      dropout: "Dropout",
      variant: "النوع",
      epoch: "الحقبة {value}",
      percentComplete: "{percent}% مكتمل",
      stepProgress: "الخطوة {current} / {total}",
      loss: "الخسارة",
      lr: "LR",
      gradNorm: "معيار التدرّج",
      project: "المشروع",
      model: "النموذج",
      method: "الطريقة",
      elapsed: "المنقضي: {value}",
      eta: "الوقت المتبقّي المقدّر: {value}",
      stepsPerSecond: "{value} خطوة/ث",
      noStepsPerSecond: "-- خطوة/ث",
      tokens: "التوكنات: {value}",
      gpuMonitor: "مراقبة GPU",
      live: "مباشر",
      utilization: "نسبة الاستخدام",
      temperature: "درجة الحرارة",
      vram: "VRAM",
      power: "القدرة",
      phase: {
        idle: "خامل",
        downloadingModel: "جارٍ تنزيل النموذج",
        downloadingDataset: "جارٍ تنزيل مجموعة البيانات",
        loadingModel: "جارٍ تحميل النموذج",
        loadingDataset: "جارٍ تحميل مجموعة البيانات",
        configuring: "جارٍ الإعداد",
        training: "قيد التدريب",
        finalizing: "جارٍ حفظ النموذج",
        completed: "مكتمل",
        error: "خطأ",
        stopped: "متوقف",
      },
    },
    trainingStart: {
      ready: "جاهز",
      downloading: "جارٍ التنزيل",
      preparing: "جارٍ التحضير",
      left: "{eta} متبقٍ",
      downloaded: "تم تنزيل {size}",
      terminalStart: "> يبدأ تدريب Unsloth...",
      preparingResources: "> جارٍ تحضير النموذج ومجموعة البيانات...",
      gettingReady: "> نُجهّز كل شيء لعملية التدريب...",
      waitingForFirstStep: "> {message} | في انتظار الخطوة الأولى... ({step})",
      resumingTraining: "جارٍ استئناف التدريب...",
      startingTraining: "جارٍ بدء التدريب...",
      dataset: "مجموعة البيانات",
      datasetStreaming: "مجموعة البيانات: تُقرأ بالتدفّق (من دون تنزيل كامل)",
      modelWeights: "أوزان النموذج",
    },
  },
} satisfies DeepPartialMessageTree<typeof en>;
