انتقل إلى المحتوى

للمترجمين

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

لا شيء هنا يقتضي منك قراءة Python. وكل ما هنا يدور حول أمر واحد: أجزاء الرسالة الموضوعة بين أقواس معقوفة.

ما العنصر النائب

قد تحتوي رسالة في الكتالوج على أسماء بين أقواس معقوفة:

msgid "Hello {name}"
msgstr ""

فـ{name} عنصر نائب. وحين يعرض البرنامج هذه الرسالة يستبدل بـ{name} قيمةً يوفرها هو — اسم شخص، أو اسم ملف، أو عدداً. والعنصر النائب ليس كلمة تُترجم؛ إنه خانة.

وترجمتك تذهب إلى msgstr، ويجب أن تحافظ على تلك الخانة:

msgid "Hello {name}"
msgstr "こんにちは {name}"

ما يجوز لك تغييره وما لا يجوز

يجوز لك:

  • نقل العنصر النائب إلى حيث تريده قواعد اللغة الهدف، بما في ذلك أول الرسالة.
  • تكرار العنصر النائب إن كانت اللغة تحتاج إلى القيمة مرتين.
  • إعادة كتابة كل كلمة أخرى، بما في ذلك علامات الترقيم والمسافات وترتيب الجملة.

ولا يجوز لك:

  • ترجمة الاسم الذي داخل الأقواس. يبقى {name} كما هو {name}، حتى في لغة لا تكتب شيئاً آخر بالحروف اللاتينية.
  • حذف الأقواس، أو كتابة الاسم من دونها.
  • استبدال الأقواس اللاتينية { و} بأقواس كاملة العرض و. كثير من طرق الإدخال ينتج الشكل كامل العرض؛ وهو يشبهه شبهاً يكاد يكون تاماً ولا يعمل.
  • إضافة تنسيق، مثل {name!r} أو {amount:.2f}. فطريقة عرض القيمة تُقرر في البرنامج، لا في الكتالوج.
  • اختراع عنصر نائب غير موجود في msgid.

وإن كانت رسالة تحتاج إلى قيمة لا يوفرها الأصل، فتلك رسالة على المطور أن يغيرها. قل ذلك بدل الالتفاف عليه.

صيغ الجمع

تصلك الرسالة المعدودة بخانة msgstr واحدة لكل صيغة جمع في لغتك، ولغتك هي التي تقرر كم عددها — واحدة لليابانية، واثنتان للألمانية، وثلاث للروسية، وست للعربية. املأ كل خانة يمنحك إياها الكتالوج.

وقاعدتان توقعان الناس كثيراً:

  • الخانات ليست «مفرداً، وجمعاً، وجمعاً أكثر». فكل رقم يعني ما تقوله قاعدة الجمع في لغتك. فالصيغة الثالثة في اللاتفية للصفر وحده؛ والثانية في السلوفينية للاثنين بالضبط؛ وتضع الويلزية الحالة العامة في الموضع 0 والمفرد في الموضع 1.
  • قد تحمل خانتان النص نفسه عن حق. ففي التركية والمجرية والفارسية والبنغالية يبقى الاسم مفرداً بعد العدد، فتكون صيغتا الرسالة المعدودة السلسلة نفسها. وهذا صحيح، لا زلة نسخ ولصق.

وتنطبق قواعد العناصر النائبة أعلاه على كل صيغة على حدة.

الإدخالات الـfuzzy

الإدخال الموسوم بـfuzzy تخمينُ آلة: غيّر المطور الرسالة الأصلية، فقرنت الأدواتُ النصَّ الجديد بترجمتك القديمة كي يكون لك منطلق.

#, fuzzy
msgid "Welcome back, {name}"
msgstr "こんにちは {name}"

والإدخال الـfuzzy لا يستخدمه البرنامج — بل يعرض الأصل غير المترجم بدلاً منه — إلى أن يراجع أحدهم النص ويزيل علامة fuzzy. ولمعظم محررات PO زرٌّ لذلك بالضبط.

قراءة رسالة الإخفاق

تفحص الأدوات العناصر النائبة عند تجميع الكتالوج، والرسالة مكتوبة لك أنت لا للمبرمج. فالاكتفاء بالإبلاغ بأن {name} مفقود طريقٌ مسدود وأنت ترى تلك الحروف أمامك، ولذا حيث يبدو العنصر النائب حاضراً وهو ليس كذلك، تقول الرسالة السبب. وفي مقابل الأصل Hello {name}، يُبلَّغ عن كل مما يلي تحت translation does not match the source placeholders:

ترجمتك تقول السبب الذي تعطيه
こんにちは {name} {name} مفقود (الأقواس حوله ليست { و} اللاتينيتين)
こんにちは {{name}} {name} مفقود (مكتوب {{name}}، وهي طريقة الإفلات من قوس حرفي)
こんにちは name {name} مفقود (الاسم يظهر، لكن لا داخل أقواس)
こんにちは {名前} {name} مفقود؛ و{名前} ليس في رسالة المصدر

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

placeholder {<U+00A0>name} has a space inside the braces; write {name}

أما الاسم الذي تختلط في حروفه أنظمة الكتابة — حالة الأشكال المتشابهة، حيث لا تُميَّز الـа السيريلية عن اللاتينية — فيُعرض مرتين، مرة مقروءة ومرة مُفلَتة، وهي الصورة الوحيدة التي تفرّق بينهما:

translation does not match the source placeholders: {name} is missing;
{nаme} (n\u0430me) is not in the source message

وينطبق التمييز نفسه حين يتعارض اسم يوناني أو سيريلي مكتوب بأكمله بنظام كتابة واحد مع اسم مصدر لاتيني، بما في ذلك حالة الحرف الواحد: a اللاتينية مقابل а السيريلية.

وإن صادفت واحدة من هذه ولم يكن الإصلاح بيّناً، فالتصرف الآمن أن تحذف العنصر النائب الذي كتبته وتنسخ العنصر الذي في msgid.

ما لا تستطيعه الفحوص

تتحقق الأدوات من سلامة عناصرك النائبة. لكنها لا تستطيع أن تعرف هل الترجمة دقيقة أم طبيعية أم مناسبة للسياق — وذلك يبقى عندك أنت وحدك.

وأمران يفيدان أكثر من أي فحص:

  • اقرأ تعليق المترجم. السطر الذي يبدأ بـ#. فوق الرسالة هو المطور يخبرك أين تظهر وما معناها.
  • اسأل عن msgctxt. فحين تظهر الكلمة نفسها مرتين بسياقين مختلفين، فذلك لأن الاثنتين تحتاجان إلى ترجمتين مختلفتين — "Open" الزر و"Open" الحالة مثلاً.