{
	"api_kicker": "واجهة برمجة التطبيقات للمطورين",
	"api_title": "أنشئ الأنشطة من نظامك الخاص",
	"api_intro": "طلب POST واحد لكل نوع نشاط. أرسل محتواك بصيغة JSON، واحصل في المقابل على نشاط في حسابك على Puzzel.org ورابط يمكنك تسليمه للاعبين أو وضعه داخل iframe.",
	"api_search_placeholder": "ابحث في نقاط النهاية والحقول والإعدادات",
	"api_search_results": "مطابقة في هذه الصفحة",
	"api_search_empty": "لا يوجد في هذه الصفحة ما يطابق ذلك. جرّب اسم نقطة نهاية، أو حقلًا مثل activity_key، أو رمز حالة.",
	"api_search_clear": "مسح البحث",
	"api_nav_guide": "البدء",
	"api_nav_endpoints": "نقاط النهاية",
	"api_toc_label": "في هذه الصفحة",
	"api_hero_base_label": "الرابط الأساسي",
	"api_hero_method_label": "الطريقة",
	"api_hero_method_value": "POST، محتوى JSON",
	"api_hero_auth_label": "المصادقة",
	"api_hero_auth_value": "المفتاح والبريد الإلكتروني داخل المحتوى",
	"api_hero_limit_label": "الحصة",
	"api_hero_limit_value": "[limit] أنشطة يوميًا",
	"api_hero_count_label": "نقاط النهاية",
	"api_hero_count_value": "[count] أنواع أنشطة",
	"api_s_quickstart_title": "طلبك الأول",
	"api_s_quickstart_body": "لا شيء لتثبيته ولا مصافحة أولية: أرسل محتوى JSON يتضمّن مفتاحك وبريدك الإلكتروني ومحتواك. يحمل الرد مفتاح النشاط الجديد والرابط الذي يُلعب عليه.",
	"api_s_quickstart_note": "كل مثال في هذه الصفحة هو طلب كامل وقابل للتشغيل. استبدل المفتاح والمحتوى بما يخصّك وسيعمل كما هو.",
	"api_s_auth_title": "المصادقة",
	"api_s_auth_body": "لا رؤوس (headers) ولا رمز حامل (bearer token). ينتقل بيانا الاعتماد كلاهما داخل محتوى JSON لكل طلب، ولا يُقبل المفتاح إلا للحساب الذي يخصّه ذلك البريد الإلكتروني.",
	"api_s_auth_where": "يوجد مفتاحك في قسم الحساب من لوحة التحكم، خلف زر \"إظهار\".",
	"api_s_auth_where_link": "افتح مفتاح API الخاص بي",
	"api_s_auth_premium": "تُمنح مفاتيح API عند بدء الاشتراك، لذا لا يملك الحساب المجاني مفتاحًا بعد.",
	"api_s_auth_plans": "عرض الخطط",
	"api_s_auth_secret": "تعامل مع المفتاح معاملة كلمة المرور. فهو ينشئ الأنشطة ويستبدلها في حسابك، لذا احتفظ به على الخادم بعيدًا عن أي شيء يمكن للمتصفح قراءته.",
	"api_prefill_kicker": "أمثلة",
	"api_prefill_label": "املأ الأمثلة بمفتاح API الخاص بي",
	"api_prefill_signed_out": "سجّل الدخول ليُدرَج مفتاحك في كل مثال في هذه الصفحة.",
	"api_prefill_sign_in": "تسجيل الدخول",
	"api_prefill_none": "لا يوجد مفتاح API لهذا الحساب بعد.",
	"api_prefill_warning": "يحمل كل مثال الآن مفتاحك الحقيقي. لا تلصقه في محادثة أو تذكرة أو مستودع عام.",
	"api_s_request_title": "محتوى الطلب",
	"api_s_request_body": "تأخذ كل نقطة نهاية الحقول الخمسة نفسها. ما يختلف هو حقل المحتوى تحتها: تأخذ معظمها مصفوفة من items، ويأخذ بعضها جملة واحدة أو صورة واحدة، ولا يأخذ السودوكو شيئًا على الإطلاق.",
	"api_s_request_settings": "settings كائن يحوي خيارات خاصة بكل نقطة نهاية. الخيارات التي تقرأها كل نقطة نهاية مذكورة معها أدناه؛ وأي شيء آخر تضعه فيها يُتجاهَل.",
	"api_col_field": "الحقل",
	"api_col_type": "النوع",
	"api_col_notes": "ما يفعله",
	"api_col_status": "الحالة",
	"api_col_meaning": "ما يعنيه",
	"api_required": "مطلوب",
	"api_optional": "اختياري",
	"api_default_label": "الافتراضي",
	"api_allowed_label": "واحد من",
	"api_in_settings": "في settings",
	"api_f_account_api_key": "مفتاح API الخاص بحسابك. يُوضع في المحتوى، لا في رأس الطلب.",
	"api_f_email": "العنوان الذي يسجّل به حسابك على Puzzel.org الدخول. لا يكون المفتاح صالحًا إلا معه.",
	"api_f_title": "الاسم الذي يحمله النشاط في لوحة التحكم. اتركه فارغًا لتستخدم نقطة النهاية اسمها الاحتياطي الخاص.",
	"api_f_language": "يحدّد فقط اللغة في الرابط الذي تحصل عليه — ولا يترجم أي شيء ترسله. تقرؤه الكلمات المخفية أيضًا لتبديل حروف الحشو إلى العربية عندما تكون قيمته \"ar\".",
	"api_f_activity_key": "اتركه فارغًا لإنشاء نشاط جديد. مرّر مفتاح نشاط تملكه بالفعل ليُعاد بناء ذلك النشاط بدلًا من ذلك.",
	"api_f_sentence_cryptogram": "الجملة المراد تشفيرها. يفكّها اللاعبون حرفًا حرفًا.",
	"api_f_sentence_calculation": "الجملة التي يكشفها اللاعبون بحل العمليات الحسابية.",
	"api_f_image": "الرابط المطلق للصورة المراد تقطيعها. يُرسَل في المستوى الأعلى، لا داخل settings.",
	"api_f_image_setting": "الرابط المطلق للصورة المراد تشويشها. خلافًا للصورة المقطّعة، يوجد هذا الحقل داخل settings.",
	"api_s_response_title": "ما الذي يعود إليك",
	"api_s_response_body": "يردّ الطلب الناجح بالرمز 200 مع مفتاح النشاط الجديد والرابط الذي يُلعب عليه. وأي حالة أخرى تردّ بقيمة success مضبوطة على false ونص خطأ واحد.",
	"api_response_success": "نجاح",
	"api_response_error": "فشل",
	"api_s_response_urls": "الرابط url الذي تحصل عليه هو عرض التضمين. استبدل embed بـ play لفتحه في صفحة كاملة، أو بـ build لفتحه في المحرِّر — يبقى المفتاح بعد p= كما هو.",
	"api_s_updating_title": "الإنشاء مقابل التحديث",
	"api_s_updating_body": "أرسل activity_key ليُعاد بناء النشاط الذي يمثّله في مكانه: يُستبدَل محتواه، ويُحدَّث اسمه وختم نسخته، ويبقى المفتاح نفسه كما هو — فتظل الروابط وأدوات التضمين التي شاركتها من قبل تعمل. أما النتائج ومكان المجلد وكل إعداد لا تكتبه نقطة النهاية بنفسها فتبقى كما كانت.",
	"api_s_updating_own": "لا يمكنك تحديث إلا الأنشطة التي يملكها حسابك. مفتاح حساب آخر يردّ بالرمز 403.",
	"api_s_updating_name": "يُطبَّق title في كل تحديث، بما في ذلك قيمته الافتراضية — اتركه فارغًا ليُعاد تسمية النشاط باسم نقطة النهاية الاحتياطي.",
	"api_s_updating_settings": "تُعاد كتابة كتل الإعدادات التي تكتبها نقطة النهاية بنفسها من الصفر، لذا يعيد التحديث أيضًا ضبطها على القيم التي ترسلها، أو على القيم الافتراضية لنقطة النهاية.",
	"api_s_updating_quota": "يكلّف التحديث مثل الإنشاء تمامًا: طلبًا واحدًا يُخصَم من حصة اليوم.",
	"api_s_limits_title": "حد معدل الطلبات",
	"api_s_limits_body": "يُحتسَب كل طلب ناجح، سواء كان إنشاءً أو تحديثًا. وإذا تجاوزت الحد، يردّ الطلب التالي بالرمز 429 حتى تُصفَّر العدّادات.",
	"api_s_limits_counter": "[limit] أنشطة لكل حساب يوميًا",
	"api_s_limits_reset": "تُصفَّر العدّادات مرة واحدة يوميًا بمهمة مجدولة، لا وفق نافذة متحركة مدتها 24 ساعة.",
	"api_s_errors_title": "الأخطاء",
	"api_s_errors_body": "تصل الأخطاء دائمًا بصيغة JSON بالحقلين نفسهما، ولا تصل أبدًا كصفحة HTML. نص الخطأ مكتوب ليقرأه إنسان — فهو يسمّي الحقل أو الحد الذي فشل.",
	"api_err_400": "شيء ما في المحتوى مفقود أو غير صحيح الصياغة أو خارج النطاق المسموح. تسمّي الرسالة الحقل المعني.",
	"api_err_401": "البريد الإلكتروني غير معروف، أو المفتاح لا يخصّ ذلك الحساب.",
	"api_err_403": "activity_key الذي أرسلته يخصّ حسابًا آخر.",
	"api_err_429": "استُنفدت حصة اليوم. تُصفَّر مرة واحدة يوميًا.",
	"api_err_500": "لم يتمكّن المولّد من بناء لغز مما أرسلته — غالبًا بسبب قلة الكلمات، أو كلمات يتعذّر ترتيبها معًا.",
	"api_endpoints_title": "نقاط النهاية",
	"api_endpoints_intro": "مسار واحد لكل نوع نشاط، جميعها POST، وجميعها تحت الرابط الأساسي نفسه. تسرد كل واحدة المحتوى الذي تحتاجه، والإعدادات التي تقرؤها، وطلبًا يمكنك تشغيله.",
	"api_group_words": "الكلمات والحروف",
	"api_group_cards": "البطاقات والأزواج",
	"api_group_questions": "الأسئلة والإجابات",
	"api_group_text": "الجمل والأرقام",
	"api_group_images": "الصور",
	"api_ep_content_label": "المحتوى",
	"api_ep_settings_label": "الإعدادات التي تقرؤها",
	"api_ep_settings_none": "لا تقرأ نقطة النهاية هذه أي إعدادات.",
	"api_ep_example_label": "طلب مثال",
	"api_ep_notes_label": "جدير بالمعرفة",
	"api_ep_min_items": "على الأقل [count] عناصر في items",
	"api_ep_no_items": "لا تأخذ أي items",
	"api_ep_default_title": "تعود إلى الاسم الاحتياطي \"[title]\"",
	"api_copy": "نسخ",
	"api_copied": "تم النسخ",
	"api_toast_copied": "نُسخ إلى الحافظة",
	"api_ep_open_builder": "افتح المحرِّر",
	"api_ep_back_to_top": "العودة إلى الأعلى",
	"api_e_crossword": "يشابك إجاباتك في شبكة ويرقّم التعريفات نيابة عنك.",
	"api_c_crossword": "مصفوفة من الكلمات. يقرن كل عنصر الإجابة بالتعريف الذي يشير إليها.",
	"api_note_crossword_length": "تُستبعَد الإجابات الأقصر من حرفين قبل بناء الشبكة، ويجب أن يتبقى منها اثنتان على الأقل.",
	"api_note_crossword_layout": "تُكتب الإجابات بأحرف كبيرة ويحصل المولّد على عشرين محاولة لترتيبها. وإن تعذّر عليه وضع كلمة واحدة يردّ الطلب بالرمز 500.",
	"api_e_wordseeker": "يخفي كلماتك في شبكة حروف، بالاتجاهات والشكل اللذين تختارهما.",
	"api_c_wordseeker": "مصفوفة من الكلمات. يصبح نص التعريف قائمة الكلمات التي يعمل عليها اللاعبون.",
	"api_note_wordseeker_length": "تُستبعَد الإجابات الأقل من حرفين، وتُكتب كل إجابة بأحرف كبيرة قبل إدراجها في الشبكة.",
	"api_note_wordseeker_arabic": "تُحشى الشبكة بحروف لاتينية ما لم تكن قيمة language هي \"ar\"، التي تبدّل الحشو إلى العربية.",
	"api_set_wordseeker_hidden_solution": "تتهجّى الحروف المتبقية هذه القيمة. كما يخبر ضبطها المولّد بترتيب الحل أولًا بدلًا من حشو أكبر عدد ممكن من الكلمات.",
	"api_set_wordseeker_directions": "الاتجاهات التي يمكن أن تسير فيها الكلمة. اتركها فارغة لتسير الكلمات شرقًا وجنوبًا شرقيًا وجنوبًا فقط.",
	"api_set_wordseeker_template": "يقصّ الشبكة على شكل معيّن بدلًا من تركها مربّعة.",
	"api_e_acrostic": "يرصّ إجاباتك بحيث يتهجّى عمود واحد كلمة مخفية.",
	"api_c_acrostic": "مصفوفة من الكلمات. يجب أن توفّر مجتمعةً كل حرف من الكلمة المخفية.",
	"api_set_acrostic_hidden_solution": "الكلمة التي يتهجّاها العمود المميَّز. لن تعمل نقطة النهاية هذه من دونها.",
	"api_note_acrostic_letters": "إذا تعذّر على الإجابات توفير الحروف التي يحتاجها الحل، يردّ الطلب بالرمز 500 بدلًا من حفظ شبكة غير مكتملة.",
	"api_note_acrostic_order": "يعيد المولّد ترتيب إجاباتك ليعمل العمود، لذا فالترتيب الذي ترسله ليس الترتيب الذي يراه اللاعبون.",
	"api_e_word-scramble": "يخلط حروف كل إجابة ليرتّبها اللاعبون.",
	"api_c_word-scramble": "مصفوفة من الكلمات. يظهر التعريف بجانب الحروف المخلوطة.",
	"api_set_scramble_hidden_solution": "كلمة إضافية اختيارية يُدخلها اللاعبون بعد حل البقية.",
	"api_note_scramble_random": "الأنشطة المُنشأة عبر API يكون فيها إعداد خلط الترتيب مفعّلًا دائمًا، لذا فالترتيب الذي ترسله ليس الترتيب الذي يحصل عليه اللاعبون.",
	"api_e_hangman": "يحوّل كلماتك أو عباراتك إلى جولات لتخمين الحروف.",
	"api_c_hangman": "مصفوفة من الكلمات أو العبارات القصيرة. التعريف هو التلميح الذي يراه اللاعبون.",
	"api_e_wordle": "يصنع لعبة تخمين الكلمة من كل كلمة ترسلها.",
	"api_c_wordle": "مصفوفة من الكلمات. يحصل اللاعبون على جولة واحدة لكل كلمة.",
	"api_note_wordle_dictionary": "يُنشأ وإعداد التحقق من أن التخمينات كلمات حقيقية مفعّل. أوقفه في المحرِّر إذا كانت كلماتك أسماء أو مبتكَرة.",
	"api_e_typing-practice": "يحوّل الجمل إلى تمارين طباعة.",
	"api_c_typing-practice": "مصفوفة من الكلمات أو الجمل المراد كتابتها. يعمل حقل التعريف أيضًا كتعليمة.",
	"api_e_wheel-of-fortune": "يملأ عجلة دوّارة بقطاعاتك.",
	"api_c_wheel-of-fortune": "مصفوفة من القطاعات. تصبح كل إجابة قطاعًا واحدًا.",
	"api_note_wheel_outcome": "يُنشأ بإعداد \"إظهار النتيجة في العجلة فقط\"، لذا تُقرأ النتيجة من العجلة بدلًا من إعلانها بجانبها.",
	"api_e_memory": "بطاقات مقلوبة يقلبها اللاعبون ويطابقونها في أزواج.",
	"api_c_memory": "مصفوفة من الأزواج. يحمل كل زوج البطاقتين اللتين تنتميان معًا.",
	"api_note_cards_media": "البطاقة كائن له type وvalue. استخدم \"text\" للكلمات، أو \"image\" أو \"audio\" أو \"youtube\" أو \"link\" مع رابط في value، وأضف alt لوصف.",
	"api_e_matching-pairs": "عمودان من البطاقات يُسحبان معًا.",
	"api_c_matching-pairs": "مصفوفة من الأزواج. تقع أول بطاقة من كل زوج في جهة، وشريكتها في الجهة الأخرى.",
	"api_e_flash-cards": "بطاقات ذات وجهين يقلّبها اللاعب.",
	"api_c_flash-cards": "مصفوفة من البطاقات. البطاقة الأولى هي الوجه الأمامي، والثانية الوجه الخلفي.",
	"api_note_flashcards_sides": "تخزّن نقطة النهاية عدد البطاقات نفسه الذي ترسله، لذا أرسل بطاقتين بالضبط لكل عنصر — الوجه الأمامي ثم الخلفي.",
	"api_e_categorize": "بطاقات تُصنَّف في الفئة التي تنتمي إليها.",
	"api_c_categorize": "مصفوفة من الفئات، لكل منها اسم والبطاقات التي تنتمي إليها.",
	"api_note_categorize_name": "تُحفَظ الفئة المُرسَلة بلا اسم باسم \"فئة بلا عنوان\"، لذا أرسل اسمًا دائمًا.",
	"api_e_reorder": "تسلسل يجب على اللاعبين إعادة ترتيبه.",
	"api_c_reorder": "مصفوفة من التسلسلات. يحمل كل منها بطاقاته بالترتيب الصحيح.",
	"api_note_reorder_order": "يُخزَّن الترتيب الذي ترسله بوصفه الترتيب الصحيح — رقم واحد أولًا.",
	"api_e_quiz": "أسئلة اختيار من متعدد وأسئلة مفتوحة، تُحتسَب نقاطها أثناء تقدّم اللاعبين.",
	"api_c_quiz": "مصفوفة من الأسئلة. تحمل أسئلة الاختيار من متعدد إجاباتها؛ وتحمل الأسئلة المفتوحة الإجابة التي تقبلها.",
	"api_note_question_types": "قيمة question_type إما \"multiple_choice\"، حيث يحمل الخيار الصحيح isCorrect بقيمة true، أو \"open_answer\"، التي تستخدم correct_answer بدلًا من ذلك. إن تُركت فارغة، تُعامَل كاختيار من متعدد.",
	"api_note_quiz_settings": "تمرّر نقطة نهاية الاختبار settings مباشرة كما هي كتل إعدادات النشاط، لذا فهي ليست مكانًا لخيارات متفرقة — عدّل الاختبار في المحرِّر بعد ذلك.",
	"api_e_board-game": "لوح يتسابق عليه اللاعبون، وأسئلتك موزّعة على المربّعات.",
	"api_c_board-game": "مصفوفة من الأسئلة، بالشكل نفسه الذي تأخذه نقطة نهاية الاختبار تمامًا.",
	"api_set_board_tiles": "عدد مربّعات اللوح. بين 10 و75.",
	"api_set_board_mode": "ما إذا كان اللاعبون يتسابقون إلى خط النهاية أم يجمعون عناصر في الطريق.",
	"api_e_cryptogram": "يحوّل جملة إلى شيفرة يجب فكّها، حرفًا واحدًا في كل مرة.",
	"api_c_cryptogram": "جملة واحدة، في حقل sentence. لا تأخذ نقطة النهاية هذه أي items.",
	"api_note_cryptogram_no_items": "يُتجاهَل أي شيء ترسله في items — يُبنى اللغز من الجملة وحدها.",
	"api_set_cryptogram_helpers": "الحروف التي تُمنح مجانًا كمدخل للحل: لا شيء، أو الأكثر شيوعًا، أو أحرف العلة، أو تلك التي تسردها بنفسك.",
	"api_set_cryptogram_character_list": "الأبجدية التي يُبنى منها الشيفرة. إن تُركت فارغة، يختار التشفير أبجديته الخاصة.",
	"api_set_cryptogram_extra_letters": "الحروف التي تُمنح عندما تكون قيمة helpers هي \"custom\". تُتجاهَل في أوضاع المساعدة الأخرى.",
	"api_set_cryptogram_hide_unused": "يستبعد من المفتاح الحروف التي لا تستخدمها الجملة على الإطلاق.",
	"api_e_calculation": "يخفي جملة خلف عمليات حسابية — حلّ العملية، تكشف الحرف.",
	"api_c_calculation": "جملة واحدة، في حقل sentence. لا تأخذ نقطة النهاية هذه أي items.",
	"api_set_calc_difficulty": "أعلى ناتج يُسمح لعملية حسابية أن تصل إليه.",
	"api_set_calc_operators": "العمليات التي يمكن أن تظهر. x تعني الضرب، و: تعني القسمة.",
	"api_set_calc_max_operations": "عدد العمليات التي يمكن أن تسلسلها عملية حسابية واحدة.",
	"api_set_calc_number_difficulty": "يحدّ الأرقام المفردة داخل العملية الحسابية. من 5 إلى 1000.",
	"api_note_calculation_fit": "إذا كانت القيود ضيقة جدًا بحيث يتعذّر ترميز الجملة، يردّ الطلب بالرمز 400 طالبًا منك تخفيفها بدلًا من حفظ لغز غير مكتمل.",
	"api_e_sudoku": "يولّد شبكة محلولة، ثم يزيل منها بعض الأرقام.",
	"api_c_sudoku": "لا شيء. يصدر اللغز بأكمله من إعداديه الاثنين.",
	"api_note_sudoku_no_items": "لا ترسل items ولا sentence — الحجم والصعوبة هما المُدخل بأكمله.",
	"api_note_sudoku_difficulty_sizes": "لا يوفّر المحرِّر إعداد الصعوبة إلا للأحجام 2x3 و3x3 و3x4. أما API فيطبّقه على كل الأحجام، بما فيها 2x2 و4x4.",
	"api_set_sudoku_size": "حجم الكتلة الواحدة، مكتوبًا كصفوف × أعمدة — يعطي 3x3 الشبكة الكلاسيكية 9x9. لا تتحقق نقطة النهاية إلا من إمكانية تفسيره كرقمين، لذا التزم بالأحجام التي يوفّرها المحرِّر.",
	"api_set_sudoku_difficulty": "عدد الأرقام المتروكة على اللوح للبدء منها.",
	"api_e_jigsaw": "يقطّع صورة إلى قطع تُسحب لإعادة تجميعها.",
	"api_c_jigsaw": "رابط صورة واحد، في حقل image. لا تأخذ نقطة النهاية هذه أي items.",
	"api_note_jigsaw_grid": "ينشئ API دائمًا صورة مقطّعة بحجم 4×4. عدد القطع والقطع غير المنتظمة والحواف المستقيمة إعدادات خاصة بالمحرِّر — إرسال rows أو columns هنا لا يفعل شيئًا.",
	"api_note_image_reachable": "يُخزَّن الرابط كما أرسلته ولا يُنسخ الملف أبدًا، لذا يجب أن يبقى قابلًا للوصول العام طالما ظل النشاط يُلعب.",
	"api_e_slidingpuzzle": "يقسّم صورة إلى مربّعات تنزلق إلى مكانها.",
	"api_c_slidingpuzzle": "رابط صورة واحد، داخل settings. لا تأخذ نقطة النهاية هذه أي items.",
	"api_note_sliding_image_slot": "خلافًا للصورة المقطّعة، تقرأ نقطة النهاية هذه صورتها من settings.image. يُتجاهَل حقل image في المستوى الأعلى ويردّ الطلب بالرمز 400.",
	"api_help_title": "هل هناك خلل ما؟",
	"api_help_body": "أرسل الطلب الذي جرّبته والخطأ الذي حصلت عليه، وستحصل على إجابة حقيقية من الشخص الذي كتب نقطة النهاية.",
	"api_help_cta": "راسل الدعم عبر البريد الإلكتروني",
	"api_int_kicker": "تكاملات المطوّرين",
	"api_int_title": "اربط Puzzel بمنصتك",
	"api_int_intro": "يمكن لـ Puzzel تسليم نتيجة اللاعب مباشرة إلى نظام آخر — نقاطه، ومدى تقدّمه، وما أجاب به — دون أن يكون ذلك النظام نظام LMS كاملاً. تضم هذه الصفحة كل قناة متاحة: ما الذي يخرج، ومتى يخرج، وأصغر ما عليك بناؤه لاستقباله.",
	"api_int_hero_out_label": "تخرج النتائج عبر",
	"api_int_hero_out_value": "webhook، أو رسالة إلى الصفحة المحيطة بالنشاط",
	"api_int_hero_in_label": "تستطيع صفحتك أن",
	"api_int_hero_in_value": "تسجّل دخول اللاعب وتعيد ضبط النشاط",
	"api_int_hero_where_label": "يُفعَّل",
	"api_int_hero_where_value": "لكل نشاط على حدة، ضمن قائمة المطوّر في المحرِّر",
	"api_int_hero_plan_label": "متاح مع",
	"api_int_hero_plan_value": "خطة مدفوعة — هذه الإعدادات مُعطّلة في الحساب المجاني",
	"api_int_search_placeholder": "البحث في القنوات والحقول والأمثلة",
	"api_int_search_empty": "لا شيء في هذه الصفحة يطابق ذلك. جرّب قناة مثل webhook أو postMessage، أو حقلًا مثل progress.",
	"api_int_nav_channels": "القنوات",
	"api_int_s_choose_title": "ما القناة التي تحتاجها؟",
	"api_int_s_choose_body": "هناك ثلاثة أشياء يمكن أن تخرج من النشاط وشيء واحد يمكن أن يدخل إليه. واختيار المناسب منها يعتمد على سؤال واحد: هل يوجد اللاعب داخل صفحتك، أم في مكان مختلف تمامًا؟",
	"api_int_choose_out": "خارج Puzzel",
	"api_int_choose_in": "داخل Puzzel",
	"api_int_choose_when": "استخدمها عندما",
	"api_int_choose_needs": "تحتاج إلى",
	"api_int_choose_setting": "الإعداد",
	"api_int_ch_webhook_name": "webhook النتائج",
	"api_int_ch_webhook_summary": "تُرسَل كل نتيجة محفوظة بطلب POST إلى رابط URL تملكه، بصيغة JSON.",
	"api_int_ch_webhook_when": "قد يكون اللاعب في أي مكان — رابط مشترك، رمز QR، موقع شخص آخر — وتريد أن تصل النتيجة إلى قاعدة بياناتك.",
	"api_int_ch_webhook_needs": "نقطة نهاية HTTPS تقبل طلب POST عابرًا للمصدر.",
	"api_int_ch_parent_name": "النتائج إلى الصفحة المحيطة",
	"api_int_ch_parent_summary": "نفس بيانات JSON، تُرسَل إلى الصفحة التي تُضمِّن النشاط بدلاً من خادم.",
	"api_int_ch_parent_when": "تُضمِّن النشاط في صفحة دورتك، وتستطيع الصفحة نفسها أن تفعل شيئًا بالنتيجة.",
	"api_int_ch_parent_needs": "iframe في صفحتك مع مستمع رسائل. بلا خادم وبلا CORS.",
	"api_int_ch_completion_name": "إشارة الإتمام",
	"api_int_ch_completion_summary": "رسالة واحدة عند انتهاء اللاعب، لا تحمل سوى هذه الحقيقة.",
	"api_int_ch_completion_when": "كل ما تريد معرفته هو ما إذا كان قد انتهى — لتمييز الدرس كمكتمل، أو فتح الدرس التالي، أو عرض شاشتك.",
	"api_int_ch_completion_needs": "iframe في صفحتك مع مستمع رسائل.",
	"api_int_ch_trigger_name": "إعادة الضبط من صفحتك",
	"api_int_ch_trigger_summary": "تُخبر صفحتك النشاط المُضمَّن بمسح إجابات اللاعب والبدء من جديد.",
	"api_int_ch_trigger_when": "لديك زر \"أعد المحاولة\" خارج النشاط.",
	"api_int_ch_trigger_needs": "iframe في صفحتك. لا تُقبل الرسالة إلا من الصفحة القائمة بالتضمين.",
	"api_int_s_webhook_title": "webhook النتائج",
	"api_int_s_webhook_body": "فعّل \"إرسال النتائج إلى webhook\" في المحرِّر وأدخل رابط URL. ومنذ تلك اللحظة، في كل مرة يُحفظ فيها تقدّم اللاعب، يُرسل متصفحه النتيجة كاملة بطلب POST إلى ذلك الرابط بصيغة JSON.",
	"api_int_webhook_steps_title": "الإعداد",
	"api_int_webhook_step_1": "افتح النشاط في المحرِّر وانتقل إلى قائمة المطوّر.",
	"api_int_webhook_step_2": "فعّل \"إرسال النتائج إلى webhook\" والصق رابط نقطة النهاية في الحقل الذي يليها. يجب أن يكون رابط URL كاملاً — فالنطاق المجرّد مرفوض — ويجب أن يكون https، لأن المتصفح يمنع أي طلب http عادي صادر من صفحة تُقدَّم عبر https.",
	"api_int_webhook_step_3": "العب النشاط مرة بنفسك. يصل أول طلب POST بمجرد أن تجيب عن شيء ما.",
	"api_int_webhook_receiver": "المستقبِل، من البداية إلى النهاية",
	"api_int_webhook_timing_title": "يُطلَق أثناء اللعب، لا مرة واحدة في النهاية",
	"api_int_webhook_timing_body": "تخرج نتيجة في كل مرة يُحفظ فيها الإدخال: بعد توقف عن الكتابة، عند وضع بطاقة، عند توقف الساعة، ومرة أخرى عند إتمام النشاط. الكلمات المتقاطعة الطويلة قد تُنتج عشرات الاستدعاءات لا استدعاءً واحدًا — لذا اكتب معالجك كعملية upsert مفتاحها playerUid و activityKey بدلاً من عملية إدخال. يحمل كل استدعاء الحالة الكاملة، فيحلّ الأحدث دائمًا محل الأقدم، ويعوّض الاستدعاء التالي أي استدعاء مفقود.",
	"api_int_webhook_finished_title": "التمييز بين الإنهاء والحفظ",
	"api_int_webhook_finished_body": "progress نسبة مئوية: 100 تعني اكتمال النشاط. بعض الأنواع يمكن أن تنتهي دون الوصول إلى هذه النسبة — اختبار أُجيب عنه بالكامل، أو حقل حل تم حلّه — وتلك تحمل hasAlternateCompletion بدلاً من ذلك. عامل كلتا الحالتين على أنهما إنهاء.",
	"api_int_webhook_cors_title": "يُرسَل من متصفح اللاعب",
	"api_int_webhook_cors_body": "يصل طلب POST من التبويب الذي يُلعب فيه النشاط، لا من خادم Puzzel. معظم نقاط النهاية المُعدّة لاستقبال الـ webhooks تقبله فعلاً. وإن لم تصل أي طلبات إلى نقطتك، فهذا هو السبب: يطلب المتصفح الإذن أولاً، لذا أجب عن طلب OPTIONS التمهيدي بترويسة Access-Control-Allow-Origin ثم يتبعه طلب POST الفعلي.",
	"api_int_webhook_trust_title": "عامل الحمولة بوصفها تصريحًا لا إثباتًا",
	"api_int_webhook_trust_body": "لا يحمل الطلب أي توقيع، ويصل من متصفح لا تتحكم فيه، لذا يستطيع أي شخص يطّلع على الصفحة أن يرسل لك طلبًا مماثلاً. هذا لا يشكّل مشكلة عند تعبئة شريط تقدّم أو لوحة معلومات. أما بالنسبة لأي شيء لا تسمح لطالب بتحديده بنفسه — درجة معتمدة، شهادة، دفعة مالية — فتحقّق منه مقابل النتائج في لوحة تحكم Puzzel، أو دع موصلات درجات LMS تنقل النقاط بدلاً من ذلك.",
	"api_int_s_parent_title": "النتائج إلى الصفحة المحيطة",
	"api_int_s_parent_body": "إذا ضمّنت النشاط، يمكنك أن تجعل نفس بيانات JSON تُرسَل إلى صفحتك بدلاً من خادم. فعّل \"إرسال النتائج إلى الصفحة الأصل\" واستمع للرسالة. لا شيء يغادر المتصفح، فلا حاجة لبناء نقطة نهاية ولا للتفكير في CORS.",
	"api_int_parent_origin_title": "تحقّق من مصدر الرسالة",
	"api_int_parent_origin_body": "يستقبل المستمع كل رسالة تُرسَل إلى الصفحة، بما في ذلك من إطارات أخرى وإضافات المتصفح. قارن event.origin بـ https://puzzel.org قبل أن تثق بمحتواها.",
	"api_int_parent_same_title": "نفس الحمولة، ونفس التوقيت",
	"api_int_parent_same_body": "هذه توأم الـ webhook: الحقول نفسها، تُرسَل في اللحظات نفسها. وكل ما ورد تحت \"ما الذي تحتويه النتيجة\" ينطبق هنا أيضًا.",
	"api_int_s_completion_title": "إشارة الإتمام",
	"api_int_s_completion_body": "أصغر قناة، لما لا تعنيك النتيجة نفسها في شيء: فعّل \"إرسال إشارة إتمام\" وتحصل صفحتك على رسالة واحدة لحظة انتهاء اللاعب.",
	"api_int_completion_shape": "ما الذي يصل",
	"api_int_completion_order_title": "تكون النتيجة محفوظة بالفعل عند وصولها",
	"api_int_completion_order_body": "تُرسَل الإشارة عمدًا بعد أن تكتمل عملية الحفظ التي تُنهي النشاط، لذا فإن الصفحة التي تتفاعل بقراءة النتيجة مرة أخرى ستجدها هناك.",
	"api_int_completion_embed_title": "فقط داخل iframe",
	"api_int_completion_embed_body": "تُرسل كلتا قناتي الرسائل إلى الصفحة التي تُؤطّر النشاط. وعند فتحه في تبويب مستقل لا يوجد من يُخبَر، فلا تُرسل أي رسالة.",
	"api_int_s_payload_title": "ما الذي تحتويه النتيجة",
	"api_int_s_payload_body": "شكل واحد، أيًا كانت القناة التي تحمله. تُفهرس إجابات اللاعب بمعرّفات عناصر النشاط نفسها، لذا تظهر المفاتيح نفسها في correctUids.",
	"api_int_col_when": "متى تكون موجودة",
	"api_int_always": "دائمًا",
	"api_int_sometimes": "أحيانًا",
	"api_int_payload_absent_title": "غائب، لا فارغ",
	"api_int_payload_absent_body": "يُحذف الحقل غير المنطبق من JSON بدلاً من إرساله كـ null أو صفر. وبهذا يُميَّز النوع الذي لا يُسجّل نقاطًا عن التشغيلة التي سجّلت صفرًا — لذا اقرأ القيمة بافتراض قيمة بديلة، ولا تفترض أبدًا وجود المفتاح.",
	"api_int_payload_example": "اختبار منتهٍ، كما يصل",
	"api_int_f_activity_key": "النشاط الذي تنتمي إليه النتيجة. المفتاح نفسه الذي تراه في رابط URL الخاص بالنشاط، بعد ?p=.",
	"api_int_f_player_uid": "من لعب، كمعرّف مجهول. ثابت لهذا اللاعب على هذا الجهاز، لذا هو ما تُفهرس عليه النتائج — وهو ليس عنوان بريد إلكتروني ولا حساب Puzzel.",
	"api_int_f_player": "حقول التسجيل التي يطلبها النشاط، كما أعددتها: name, email, class, student_id وغيرها. تكون غائبة إلى أن يسجّل اللاعب، وغائبة تمامًا في نشاط لا يطلب شيئًا.",
	"api_int_f_progress": "مدى التقدّم، كنسبة مئوية. 100 تعني الانتهاء.",
	"api_int_f_time_passed": "الوقت المُستغرَق في النشاط، بالميلي ثانية.",
	"api_int_f_last_played_at": "متى حُفظت هذه النتيجة، كطابع زمني Unix بالميلي ثانية.",
	"api_int_f_created": "متى بدأت المحاولة، كطابع زمني Unix بالميلي ثانية.",
	"api_int_f_player_input": "ما أدخله اللاعب فعليًا، مُفهرسًا بمعرّف العنصر الذي ينتمي إليه. يعتمد الشكل الداخلي على نوع النشاط — كلمة، قائمة بطاقات موضوعة، أو خيار مُختار.",
	"api_int_f_correct_uids": "أي من تلك العناصر صحيح، مُفهرس بالطريقة نفسها. غائب ما دام لم تتم الإجابة عن شيء بعد.",
	"api_int_f_score": "النقاط المُحرزة، في الأنواع التي تُسجّل نقاطًا للتشغيلة. غائب في كل ما عدا ذلك — بما في ذلك تشغيلة سجّلت صفرًا بالفعل، لذا تحقّق من وجود المفتاح قبل قراءته.",
	"api_int_f_performance": "مقياس النوع الخاص لجودة الأداء، حيثما يحتفظ بواحد — الكلمات في الدقيقة في تمرين الطباعة، مثلاً.",
	"api_int_f_attempts": "رقم هذه التشغيلة: 1 في المرة الأولى، ويزيد واحدًا مع كل إعادة بدء. فقط في الأنواع التي تُنهي التشغيلة مبكرًا وتحسب إعادات المحاولة.",
	"api_int_f_knocked_out": "انتهت التشغيلة عند إجابة خاطئة وهي منتهية دون اكتمال.",
	"api_int_f_alternate": "انتهى النشاط بطريقة لا تصل إلى 100% — اختبار أُجيب عنه بالكامل، أو حقل حل تم حلّه. عامله كإتمام.",
	"api_int_f_missed_keys": "الأحرف التي ظلّ اللاعب يخطئ فيها، الأكثر خطأً أولاً. تمرين الطباعة فقط.",
	"api_int_f_content_version": "إصدار محتوى النشاط الذي جرت اللعبة عليه. يتغيّر عند تعديل المالك للأسئلة، لذا يمكن تمييز نتيجة قديمة عن نتيجة حالية.",
	"api_int_s_control_title": "إعادة ضبط النشاط من صفحتك",
	"api_int_s_control_body": "تسير تعليمة واحدة في الاتجاه المعاكس. عند تفعيل \"قبول المحفّزات من الصفحة الأصل\"، تستطيع الصفحة القائمة بالتضمين مسح إجابات اللاعب وإعادة النشاط إلى البداية — لأجل زر \"أعد المحاولة\" خارج الإطار.",
	"api_int_control_only_title": "إعادة الضبط هي المحفّز الوحيد",
	"api_int_control_only_body": "لا توجد رسالة لإرسال نتيجة، أو فتح رسالة الختام، أو الانتقال إلى سؤال. تُتجاهَل أي رسالة تطلب شيئًا غير إعادة الضبط.",
	"api_int_control_guard_title": "لا تُسمع إلا الصفحة القائمة بالتضمين",
	"api_int_control_guard_body": "يُقبل المحفّز من الصفحة التي تُؤطّر النشاط فقط ومن لا مكان آخر — لا من إطار مجاور، ولا من سكريبت في الصفحة. الإعداد مُعطّل افتراضيًا، لذا فعّله للأنشطة التي تديرها.",
	"api_int_s_identity_title": "إحضار هوية اللاعب من منصتك",
	"api_int_s_identity_body": "إذا كانت منصتك تعرف بالفعل من يلعب، فلا داعي لأن يسأله النشاط عن هويته مجددًا. توجد طريقتا مصافحة، كلتاهما لنشاط داخل صفحتك، وكلتاهما نُفعّلهما نحن بدلاً من المحرِّر — لأنهما تُغيّران الجهة التي تنتمي إليها النتيجة، لذا يتم إعدادهما معك بدلاً من خانة اختيار.",
	"api_int_identity_pm_title": "أرسل إلينا بيانات اللاعب",
	"api_int_identity_pm_body": "يُعلن النشاط عن نفسه برسالة 'app-loaded' وينتظر. تُرسل صفحتك بيانات اللاعب في المقابل، وتُسجَّل النتيجة باسمه دون أن يكتب اللاعب أي شيء أو يرى شاشة تسجيل.",
	"api_int_identity_sso_title": "أرسل إلينا رمزًا",
	"api_int_identity_sso_body": "نفس المصافحة، لكن صفحتك تُرسل رمز JWT الذي أصدره مزوّد الهوية بدلاً من الحقول نفسها. نتحقق منه مقابل الجهات المُصدِرة المُعدَّة لحسابك قبل السماح للاعب بالدخول، فتكون الهوية مؤكَّدة لا مجرد مصرَّح بها — وهذا هو الخيار المناسب عندما يجب أن تكون النتيجة موثوقة.",
	"api_int_identity_cta_title": "اطلب منا تفعيلها",
	"api_int_identity_cta_body": "أخبرنا بأي الطريقتين تريد وأين ستُضمَّن الأنشطة، وسنُعِدّ حسابك ونشرح لك كل خطوة.",
	"api_int_identity_cta_button": "راسلنا عبر البريد بخصوص الهوية",
	"api_int_s_create_title": "إنشاء الأنشطة من نظامك",
	"api_int_s_create_body": "كل ما سبق يتعلق بخروج النتيجة. أما في الاتجاه المعاكس — إنشاء الأنشطة نفسها من محتوى لديك بالفعل — فهذا هو Puzzle API: طلب POST واحد لكل نوع نشاط، وتحصل في المقابل على مفتاح ورابط URL للتضمين.",
	"api_int_create_link": "اطّلع على مرجع API",
	"api_int_s_lms_title": "متى يكون الموصل الجاهز هو الخيار الأفضل",
	"api_int_s_lms_body": "إذا كانت المنصة في الطرف الآخر نظام LMS حقيقيًا، فمن المرجح أنك لا تحتاج إلى أي مما سبق. يمكن أن تعود الدرجات إلى دفتر درجاته تلقائيًا، دون أي شيء عليك استضافته.",
	"api_int_lms_lti_title": "Moodle, Canvas, Brightspace, Schoology, itslearning",
	"api_int_lms_lti_body": "يُشغَّل من داخل نظام LMS، وتُكتب النقاط تلقائيًا في دفتر درجاته.",
	"api_int_lms_gc_title": "Google Classroom",
	"api_int_lms_gc_body": "انشر نشاطًا كواجب، وستعود الدرجات تلقائيًا.",
	"api_int_lms_not_title": "ليست أيًا من هذه؟",
	"api_int_lms_not_body": "منصات الدورات، ومواقع العضويات، والشبكات الداخلية، وأي شيء بنيته بنفسك — هذا بالضبط ما صُممت له القنوات في هذه الصفحة. تضمينٌ مع إشارة الإتمام يغطي معظم الحالات.",
	"api_int_s_limits_title": "ما لا يوجد",
	"api_int_s_limits_body": "حتى لا تبحث عنه:",
	"api_int_limit_no_read": "لا توجد نقطة نهاية لقراءة النتائج مرة أخرى. ينشئ API الأنشطة؛ وتخرج النتائج عبر القنوات في هذه الصفحة، أو عبر التصدير في لوحة التحكم.",
	"api_int_limit_no_signature": "لا يوجد توقيع على الـ webhook. لا يوجد ما يُتحقَّق من الطلب مقابله — ولهذا لا ينبغي أن تكون النتيجة وحدها الضامن لأي شيء مهم.",
	"api_int_limit_per_activity": "لا يوجد webhook على مستوى الحساب بأكمله. الرابط إعداد خاص بالنشاط، فالنشاط الذي تنسخه يحمله معه، والنشاط الجديد يبدأ بدونه.",
	"api_int_limit_no_multiplayer": "لا شيء في لعبة الفرق أو الغرفة المباشرة. قناتا الرسائل والـ webhook مُخصصتان للعب الفردي، وتُعطَّل الإعدادات تلقائيًا عند تفعيل اللعب الجماعي.",
	"api_int_limit_no_retry": "لا توجد قائمة انتظار للتسليم. لا شيء يُخزَّن ويُعاد إرساله — الحفظ التالي هو إعادة المحاولة، وآخر استدعاء في التشغيلة هو ما يهم.",
	"api_nav_integrations": "استخراج النتائج"
}
