FreeToGenerate.com

حلِّل الترويسة وشغِّل خوارزميتَي المطابقة المعياريتين. لا يُرفع شيء.

الطلب وما لديك

افصل بينها بفواصل أو مسافات. هذه ملفاتك أو ترجماتك أنت، أي الوسوم التي سترد بها فعلًا.

ماذا تجيب كل خوارزمية

‏Lookup: وسم واحد

en

‏Basic Filtering: مجموعة

fr

الخوارزميتان تختلفان على هذا المدخل.

هذا ليس خللًا في أي منهما. تعرّف RFC 4647 كلتيهما، وهما تبحثان في اتجاهين متعاكسين، فالتي يستعملها إطار عملك هي التي تقرر ما يراه هذا الزائر.

ما جربته Lookup

en-us → en

تقتطع Lookup النطاق المطلوب من اليمين حتى تجد تطابقًا. لاحظ أن وسمًا فرعيًا من حرف واحد في النهاية يُحذف مع الذي قبله، فخطوة مثل zh-Hant-CN-x لا تُجرَّب أبدًا، وهذه القاعدة مأخوذة من المثال المحلول الذي تطبعه المواصفة نفسها.

الترويسة بعد تحليلها

النطاقq
en-us1
fr0.8

قيمة الجودة صفر رفض، لا تفضيل ضعيف. الترويسة التي تذكر لغة بـ q=0 تطلب منك ألا تقدمها إطلاقًا، لذا يُستبعَد هنا من الإجابتين أي وسم لا يطابقه سوى نطاق مرفوض. والنطاقات التي لا q لها قيمتها 1، وعند تساوي القيم يُحفظ ترتيب الترويسة، لأن المواصفة لا تعطي أي فاصل ترجيح آخر.

كم مرة تختلف الخوارزميتان

تركيبة مقيسة
119
حالة اختلاف
14
تطابقت Lookup وحدها
8
تطابقت Filtering وحدها
6

قِيس ذلك على 7 مجموعات واقعية من الوسوم المتاحة في مقابل 17 نطاقًا واقعيًا: اختلفتا في 14 من 119 تركيبة. الشكل هنا أهم من النسبة. في 8 منها وجدت Lookup وحدها شيئًا، لأنها تقتطع الطلب، فيصل en-US إلى وسم en المجرد لديك. وفي 6 وجدت Filtering وحدها، لأنها توسّع الطلب، فيصل en إلى en-GB لديك. ولم تتطابق كلتاهما في أي حالة ثم تختارا شيئين مختلفين. النظامان يغطيان اتجاهين متعاكسين لعدم التطابق، ولا يغطي أحدهما الاتجاهين معًا.

الخوارزميتان من RFC 4647، وقواعد قيم الجودة من RFC 9110. لا يُرفع شيء، فالمطابقة تجري داخل هذا التبويب.

متوفر أيضًا بلغات أخرى: 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. ألصق الترويسة. انسخ قيمتها من سجلات خادمك، أو من أدوات المطوّر في المتصفح، أو من الطلب الذي تصحّحه. تظهر النطاقات في جدول مرتّب حسب قيمة الجودة، مع ملء القيمة الافتراضية 1 حيث تُغفلها الترويسة.
  2. عدّد اللغات التي يمكنك تقديمها. اكتب الوسوم التي تملك لها ملفات أو ترجمات فعلية، مفصولة بفواصل أو مسافات: en, fr, de. هذه هي الوسوم التي سترد بها، لا التي طلبها الزائر.
  3. اقرأ الإجابتين. تعطيك 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، لكن في مقابل اللغات المتاحة لبيئة التشغيل نفسها لا في مقابل مجموعة تمرّرها أنت، أي أنها تجيب عن سؤال آخر. لذا يقوم المثال المحلول المطبوع في المواصفة مقام متجه الاختبار.

لماذا هي مجانية؟

كل شيء يعمل داخل متصفحك. تحليل ترويسة ومقارنة نصوص لا يكلّفان شيئًا ما دام جهازك هو من يقوم بهما، فلا خادم يُدفع ثمنه ولا سبب يدعو لأن نطلب منك شيئًا.

لا يُرفع شيء مما تكتبه ولا يُخزَّن ولا يُسجَّل، فالترويسات المأخوذة من سجلات الإنتاج قد تدل على شخص بعينه، والطريقة الآمنة للتعامل معها ألا نستقبلها أصلًا. لا حساب ولا تسجيل ولا حدّ لعدد ما تفحصه.