متوفر أيضًا بلغات أخرى: English · Español · Português · Français
محلِّل ترويسة Accept-Language
اعرف أيّ لغاتك تختارها ترويسة Accept-Language القادمة من المتصفح، ولماذا قد تختار الخوارزميتان المعياريتان لغتين مختلفتين.
ما ترويسة Accept-Language؟
Accept-Language هو الحقل الذي يرسله المتصفح مع كل طلب ليقول باللغات التي يفضّل صاحبه القراءة بها. يحمل قائمة من نطاقات اللغات، لكل نطاق قيمة جودة اختيارية بين 0 و1، مرتّبة من الأفضل إلى الأقل تفضيلًا. ترويسة نموذجية تبدو هكذا: en-US,fr;q=0.8، أي أن هذا القارئ يريد الإنجليزية الأمريكية ويقبل الفرنسية بتفضيل أدنى.
الترويسة طلب لا أمر. تخبرك بما يودّه الزائر، لكنها لا تعرف ما لديك أنت. تحويلها إلى استجابة حقيقية يعني مطابقة تلك النطاقات مع مجموعة اللغات التي تستطيع تقديمها فعلًا، وهنا يكمن الجزء المثير، لأن هناك أكثر من طريقة معيارية للمطابقة وهي لا تتفق دائمًا.
تؤدي هذه الأداة النصفين معًا. تحلّل الترويسة وفق قواعد قيم الجودة في RFC 9110، ثم تشغّل نظامَي المطابقة اللذين يعرّفهما RFC 4647 — وهما Lookup وBasic Filtering — على الوسوم التي تعلن أنك تملكها، وتعرض الإجابتين جنبًا إلى جنب.
كيفية الاستخدام
- ألصق الترويسة. انسخ قيمتها من سجلات خادمك، أو من أدوات المطوّر في المتصفح، أو من الطلب الذي تصحّحه. تظهر النطاقات في جدول مرتّب حسب قيمة الجودة، مع ملء القيمة الافتراضية 1 حيث تُغفلها الترويسة.
- عدّد اللغات التي يمكنك تقديمها. اكتب الوسوم التي تملك لها ملفات أو ترجمات فعلية، مفصولة بفواصل أو مسافات: en, fr, de. هذه هي الوسوم التي سترد بها، لا التي طلبها الزائر.
- اقرأ الإجابتين. تعطيك Lookup وسمًا واحدًا، وتعطيك Basic Filtering مجموعة. وحين تختلفان تقول الصفحة ذلك، وتعرض سلسلة الارتداد أسفلها كل خطوة جرّبتها Lookup في طريقها إلى الإجابة.
الخوارزميتان تخفقان في اتجاهين متعاكسين
يعرّف RFC 4647 النظامين على الترويسة نفسها، والفرق بينهما ليس مسألة تشدّد. تقتطع Lookup الطلب من اليمين حتى تجد تطابقًا، فمن يطلب en-US يُقدَّم له وسم en المجرد لديك. أما Basic Filtering فتسير في الاتجاه المعاكس: يطابق النطاق أي وسم يكون بادئةً له عند حدّ وسم فرعي، فمن يطلب en يُقدَّم له en-GB لديك.
وبالقياس على 7 مجموعات واقعية من الوسوم المتاحة في مقابل 17 نطاقًا واقعيًا، أي 119 تركيبة، تختلف الخوارزميتان في 14 منها، أي 11.8%. والنسبة أقل أهمية من الشكل. ففي 8 من تلك الـ14 وجدت Lookup وحدها شيئًا، وفي 6 وجدت Filtering وحدها. ولم تقع ولا حالة واحدة تطابقت فيها الاثنتان ثم اختارتا وسمين مختلفين.
النظامان إذن لا يتنافسان على الإجابات نفسها. كل منهما يغطي اتجاهًا من عدم التطابق لا يراه الآخر، ولا يغطي أيّهما الاتجاهين معًا. فإن كان إطار عملك يستعمل Lookup فستُخفق بصمت مع الزوار الذين يأتي طلبهم أقل تحديدًا من ملفاتك، وإن كان يستعمل Filtering فستُخفق مع من يأتي طلبهم أكثر تحديدًا. ومعرفة أيّهما يعمل عندك هي بيت القصيد، وأكثر المنظومات لا تخبرك بذلك.
ولقاعدة الاقتطاع فخّ أيضًا، تطبعه المواصفة بنفسها. فاختصار zh-Hant-CN-x-private1-private2 يعطي zh-Hant-CN-x-private1 ثم ينتقل مباشرة إلى zh-Hant-CN، ولا يمرّ أبدًا بـ zh-Hant-CN-x، لأن الوسم الفرعي المؤلَّف من حرف واحد في النهاية يُحذف مع الذي قبله. وسلسلة هذه الصفحة تعيد إنتاج ذلك المثال المحلول خطوةً بخطوة.
ما لا تستطيع الترويسة أن تخبرك به
قيمة الجودة صفر رفض، لا تفضيل ضعيف. فالترويسة التي تذكر لغة بـ q=0 تطلب منك ألا تقدّمها إطلاقًا، وهذا قول مختلف عن مجرد إغفالها. تستبعد هذه الأداة من الإجابتين أي وسم لا يطابقه إلا نطاق مرفوض، بينما المطابِق الذي يعامل q=0 كأدنى درجة سيقدّم بارتياح اللغة الوحيدة التي رفضها الزائر صراحةً.
قيم الجودة المتساوية لا فاصل ترجيح لها في المواصفة، فيبقى ترتيب الترويسة نفسها الإشارة الوحيدة، وهو ما تعتمده هذه الصفحة. وينبغي أن تعلم أن هذا عُرف لا قاعدة، وأن تنفيذًا آخر قد يرتّبها على نحو مختلف عن وجه حق.
وعلى نطاق أوسع، تصف الترويسة تفضيلًا لا واقعًا. فهي غالبًا قائمة لغات نظام التشغيل لا اختيارًا مقصودًا، ولا تقول شيئًا عن لغة المحتوى الذي جاء الزائر يبحث عنه، وتزويرها سهل تمامًا. إنها قيمة افتراضية جيدة وقيمة راجحة رديئة: فإن ضغط أحدهم مبدّل اللغة، فتلك الضغطة هي التي ينبغي أن تسود، وأن تُحفظ في مكان أرسخ من تخمين عن متصفحه.
ومما لا تفعله هذه الصفحة أنها لا تقارن نفسها بتنفيذ مرجعي، والسبب جدير بالذكر. فواجهة Intl تنفّذ Lookup حين يُضبط localeMatcher على lookup، لكن في مقابل اللغات المتاحة لبيئة التشغيل نفسها لا في مقابل مجموعة تمرّرها أنت، أي أنها تجيب عن سؤال آخر. لذا يقوم المثال المحلول المطبوع في المواصفة مقام متجه الاختبار.
لماذا هي مجانية؟
كل شيء يعمل داخل متصفحك. تحليل ترويسة ومقارنة نصوص لا يكلّفان شيئًا ما دام جهازك هو من يقوم بهما، فلا خادم يُدفع ثمنه ولا سبب يدعو لأن نطلب منك شيئًا.
لا يُرفع شيء مما تكتبه ولا يُخزَّن ولا يُسجَّل، فالترويسات المأخوذة من سجلات الإنتاج قد تدل على شخص بعينه، والطريقة الآمنة للتعامل معها ألا نستقبلها أصلًا. لا حساب ولا تسجيل ولا حدّ لعدد ما تفحصه.