تغيّر إعدادات اللغة مظهر اختبار CAPTCHA ونصوصه، لكنها لا تغيّر الرمز الذي يثبت اجتيازه. الموقع نفسه قد يعرض reCAPTCHA بالعربية لزائر من الرياض وبالإنجليزية لزائر من لندن، وقد يبدّل نوع التحدي بالكامل بحسب الموقع الجغرافي — ومع ذلك يبقى مفتاح الموقع وتدفق التحقق ثابتين. الاستثناء الوحيد هو صور CAPTCHA النصية، حيث تتغيّر الأحرف المعروضة فعلاً بتغيّر اللغة. معرفة ما يتحرّك وما يثبت هي ما يجعل أتمتتك مستقرة عبر الأسواق.
كيف تؤثر اللغة على عملية الحل
هذا هو السؤال العملي الذي يهمّ أي مطوّر أتمتة، والإجابة تختلف بين نوعين من التحديات.
الأنواع المعتمدة على الرمز (reCAPTCHA وTurnstile)
تمسّ اللغة الواجهة فقط لا الرمز، وحلّ CaptchaAI مستقل عنها تماماً:
- أرسل مفتاح الموقع وعنوان URL للصفحة
- يعيد CaptchaAI رمزاً صالحاً
- يعمل الرمز مهما كانت اللغة التي تعرضها القطعة
لا حاجة لأي معلمة لغة عند استدعاء CaptchaAI لهذه الأنواع. ولاحظ أن hCaptcha يُترجَم مثلها، لكن CaptchaAI لا يحلّ hCaptcha حالياً.
صور CAPTCHA النصية
هنا تؤثر اللغة مباشرةً في أحرف الصورة، فاضبط معلمة language لتطابق مجموعة الأحرف:
| لغة الموقع | ما يظهر في الصورة | معلمة language في CaptchaAI |
|---|---|---|
| الإنجليزية | نص لاتيني مثل "XKCD42" | 0 (افتراضي/لاتيني) |
| الروسية | أحرف سيريلية | 1 (سيريلي) أو 2 |
| الصينية | رموز صينية | 2 (غير لاتيني) |
| العربية | نص عربي | 2 (غير لاتيني) |
| اليابانية | حروف يابانية (هيراغانا/كانجي) | 2 (غير لاتيني) |
اختبارات CAPTCHA الصوتية
تُنطق تحديات reCAPTCHA الصوتية بلغة hl أو رأس Accept-Language، ويعالجها CaptchaAI عبر تدفق حل reCAPTCHA القياسي بصرف النظر عن لغة الصوت.
ماذا يتغيّر عند اختلاف اللغة؟
اللغة تلمس عادةً الطبقة المرئية من التحدي لا آليته:
| مزوّد CAPTCHA | ما الذي يُترجَم بحسب اللغة | ما الذي يبقى ثابتاً |
|---|---|---|
| reCAPTCHA | نص الواجهة، تسميات الصور، لغة الصوت | مفتاح الموقع، تدفق التحقق، تنسيق الرمز |
| Turnstile | نص القطعة ورسائل الخطأ | مفتاح الموقع، تنسيق الرمز، آلية الحل |
| hCaptcha | تعليمات التحدي وتسميات الفئات | مفتاح الموقع، تنسيق الرمز |
| Image/OCR | مجموعة الأحرف ولغة النص | تنسيق الصورة، تدفق الإرسال والاستطلاع |
كيف يكتشف مزوّد CAPTCHA لغة الزائر
يستدل المزوّدون على اللغة من عدة إشارات:
1. رأس Accept-Language
Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7
يخبر هذا الرأس الخادم بالأولوية: اليابانية أولاً، ثم الإنجليزية (الولايات المتحدة)، ثم الإنجليزية العامة. يعتمد عليه reCAPTCHA وTurnstile في اختيار لغة الواجهة.
2. معلمة hl في HTML
يقبل reCAPTCHA معلمة لغة صريحة عند تحميل السكربت:
<!-- Force English reCAPTCHA -->
<script src="https://www.google.com/recaptcha/api.js?hl=en"></script>
<!-- Force Japanese -->
<script src="https://www.google.com/recaptcha/api.js?hl=ja"></script>
تتجاوز معلمة hl رأس Accept-Language، ولا يعنيك مطابقتها عند الحل — يعيد CaptchaAI رمزاً صالحاً مهما كانت لغة الواجهة.
3. تحديد الموقع الجغرافي عبر IP
بعض التكوينات تختلف بحسب المنطقة التي يأتي منها عنوان IP:
- عنوان IP من الصين — قد يظهر GeeTest بدل reCAPTCHA (reCAPTCHA محجوب في الصين).
- عنوان IP من الاتحاد الأوروبي — قد تظهر موافقة GDPR قبل اختبار CAPTCHA.
- عنوان IP من منطقة عالية المخاطر — قد تكون التحديات أكثر صرامة.
4. لغة المتصفح navigator.language
تقرأ اختبارات CAPTCHA المبنية على JavaScript لغة المتصفح مباشرة:
navigator.language // "en-US"
navigator.languages // ["en-US", "en", "ja"]
في المتصفحات بدون واجهة تعود هذه القيم إلى لغة النظام؛ اضبطها صراحةً لتطابق هدفك:
// Playwright
const context = await browser.newContext({
locale: 'ja-JP',
});
// Puppeteer
const page = await browser.newPage();
await page.setExtraHTTPHeaders({
'Accept-Language': 'ja-JP,ja;q=0.9',
});
سيناريو عملي: فحص متجر عربي لتدفق الدفع
تختبر إتمام الشراء في متجر يخدم السوق الخليجي، فيكتشف الموقع عنوان IP خليجياً ويعرض reCAPTCHA بالعربية وصورة CAPTCHA بأحرف عربية. تكفي القيم الافتراضية للأنواع المعتمدة على الرمز، بينما تضبط language=2 لصورة CAPTCHA العربية، وتبقي Accept-Language عربياً لينسجم مع الواجهة.
مشكلات التوطين الشائعة
عدم تطابق اللغة بين أداة الأتمتة والموقع
إذا أرسلت أداتك Accept-Language: en-US إلى موقع عربي، فقد يظهر التحدي بالإنجليزية. هذا لا يضرّ الأنواع المعتمدة على الرمز، لكنه قد يسبب مشكلة إذا كان الموقع يتحقق من تناسق اللغة بين الرؤوس وبقية الإشارات.
اختلاف مزوّد CAPTCHA بحسب المنطقة
تعتمد بعض البلدان على مزوّدين مختلفين، فتوقّع نوعاً مغايراً بحسب منطقة الهدف:
- الأسواق الغربية — reCAPTCHA وTurnstile وhCaptcha.
- الصين — GeeTest وTencent CAPTCHA وصور مخصّصة.
- روسيا ودول CIS — صور CAPTCHA مخصّصة وreCAPTCHA.
- كوريا الجنوبية — أشرطة تمرير مخصّصة وصور CAPTCHA.
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
| ظهور reCAPTCHA بلغة غير متوقّعة | تعارض بين hl في وسم السكربت ورأس Accept-Language |
لا يؤثر ذلك على الحل — الرمز مستقل عن اللغة |
| التعرّف على أحرف خاطئة في صورة CAPTCHA | معلمة language لا تطابق نص الصورة |
اضبط language=2 للنصوص غير اللاتينية |
| ظهور نوع CAPTCHA مختلف حسب المنطقة | اختيار المزوّد بناءً على الموقع الجغرافي | استخدم خادماً وسيطاً يطابق منطقة الهدف |
| لغة خاطئة في متصفح بدون واجهة | استُخدمت لغة النظام الافتراضية | اضبط locale صراحةً في سياق المتصفح |
| اختبار صوتي بلغة غير متوقّعة | معلمة hl تتجاوز الرأس |
لا يؤثر على حل CaptchaAI المعتمد على الرمز |
أسئلة شائعة
كيف أُجبر reCAPTCHA على الظهور بالعربية أو الإنجليزية؟
أضف معلمة hl إلى وسم السكربت: ?hl=ar للعربية أو ?hl=en للإنجليزية؛ فهي تتجاوز رأس Accept-Language وتثبّت لغة الواجهة.
هل تؤثر واجهة RTL العربية على قدرة CaptchaAI على قراءة صورة CAPTCHA؟
لا؛ اتجاه الصفحة لا يغيّر شيئاً، والمهم مجموعة الأحرف داخل الصورة. للنص العربي اضبط language=2 (غير لاتيني).
ما الفرق بين رأس Accept-Language ومعلمة navigator.language؟
الأول يُرسَل مع طلب HTTP ويقرأه الخادم، والثاني يُقرأ من المتصفح عبر JavaScript. اضبط الاثنين معاً في الأتمتة لتفادي التعارض.
هل يؤثر الموقع الجغرافي على نوع CAPTCHA الذي أستقبله؟
نعم؛ قد يختار الموقع مزوّداً مختلفاً أو تحدياً أصعب بحسب منطقة IP. استخدم خادماً وسيطاً يطابق منطقة هدفك.
الخطوات التالية
- البدء السريع مع CaptchaAI: حلّ أول كابتشا في 5 دقائق
- كيفية حلّ reCAPTCHA v2 عبر الـ API: دليل خطوة بخطوة
- كيفية حل Cloudflare Turnstile باستخدام واجهة API
- كيفية حل GeeTest v3 باستخدام API