المواردكيفية ترجمة ملفات .po دون كسر متغيرات الكود (%s, HTML)

كيفية ترجمة ملفات .po دون كسر متغيرات الكود (%s, HTML)

فريق SimplePoTranslate25 نوفمبر 2025

يبدأ الأمر بمهمة بسيطة: تترجم ثيم WordPress الخاص بك إلى الإسبانية. تقوم برفع ملف .mo، وتحدث موقعك، و...

خطأ فادح: Uncaught ArgumentCountError: Too few arguments to function sprintf()...

أو ربما يتم تحميل موقعك، لكن التخطيط محطم لأن وسم الإغلاق </div> تمت ترجمته إلى </ div>.

هذا هو الخوف الأول لكل مطور يعمل في مجال التوطين. عندما تستخدم أدوات ترجمة عامة (مثل Google Translate أو أغلفة الذكاء الاصطناعي الأساسية) على ملفات .po التقنية، فإنها لا تعامل الكود بشكل مختلف عن النص. إنها تحاول "ترجمة" متغيراتك، وبذلك، تكسر موقع الويب الخاص بك.

في هذا الدليل، سنشرح بالضبط سبب حدوث ذلك وكيفية ضمان سلامة الكود بنسبة 100٪ في ترجماتك الآلية.

تشريح الكارثة: لماذا يكسر %s المواقع

يستخدم WordPress نظام Gettext ووظائف PHP مثل sprintf() للتعامل مع النص الديناميكي.

على سبيل المثال، قد يكون لديك سلسلة مثل هذه: msgid "Search results for %s"

الـ %s هو متغير عنصر نائب حيث سيقوم PHP بإدراج استعلام بحث المستخدم.

كيف يخطئ الذكاء الاصطناعي العام

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

فيما يلي أخطاء بناء الجملة الأكثر شيوعًا التي نراها:

  1. المسافة المضافة:

    • الأصل: Hello %s
    • ترجمة سيئة: مرحبا % s
    • النتيجة: يبحث PHP عن %s، لكنه يرى % s. يفشل تحميل المتغير، مما يتسبب غالبًا في خطأ فادح.
  2. هلوسة HTML:

    • الأصل: انقر <strong>هنا</strong> لتسجيل الدخول.
    • ترجمة سيئة: انقر <strong>هنا</ strong> لتسجيل الدخول.
    • النتيجة: أضاف الذكاء الاصطناعي مسافة داخل وسم الإغلاق </ strong>. ينكسر CSS الخاص بك، ويصبح باقي الصفحة غامقًا.
  3. تبادل الحجج:

    • الأصل: الصفحة %1$s من %2$s
    • ترجمة سيئة: الصفحة %2$s من %1$s
    • النتيجة: قرر الذكاء الاصطناعي أن الجملة تبدو أفضل إذا تم تبادل الأرقام. الآن يقول ترقيم الصفحات الخاص بك "الصفحة 10 من 1".

فخ "الإصلاح اليدوي"

يحاول معظم المطورين حل هذه المشكلة عن طريق مراجعة الملف يدويًا. إذا كان لديك مكون إضافي صغير به 50 سلسلة، فلا بأس بذلك. ولكن إذا كنت تترجم متجر WooCommerce به 5000 سلسلة؟

يعد مسح 5000 سطر من الكود بحثًا عن فاصلة منقوطة واحدة مفقودة أو مسافة إضافية داخل متغير %s أمرًا مستحيلاً. يستغرق الأمر ساعات، وستفوت العين البشرية شيئًا ما حتمًا.

يمكن أن تساعد نصوص Regex (التعبيرات العادية) في التحقق من الوجود، لكنها نادراً ما تكتشف مشكلات إعادة الترتيب الخاصة بالسياق أو فساد سمات HTML الدقيق.

الحل: "قفل بناء الجملة"

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

هذه هي التكنولوجيا الأساسية وراء SimplePoTranslate.

على عكس الأدوات العامة، نحن لا نلقي النص فقط في الذكاء الاصطناعي. نقوم بتحليل هيكل Gettext أولاً. إليك كيفية عمل "الوضع الآمن" الخاص بنا:

  1. التحليل: نقوم بمسح ملف .po الخاص بك وتحديد كل متغير (%s, %d)، وكل وسيط موضعي (%1$s)، وكل وسم HTML (<br/>, <span>).
  2. الاستخراج والقفل: نقوم بإزالة هذه العناصر مؤقتًا من السلسلة ونستبدلها برموز غير قابلة للتغيير.
    • الإدخال: مرحبا <strong>%s</strong>
    • ما يراه الذكاء الاصطناعي: مرحبا [TOKEN_1][TOKEN_2]
  3. الترجمة: يترجم الذكاء الاصطناعي النص "مرحبا" إلى "Hello"، لكن لا يمكنه تغيير [TOKEN_1] أو [TOKEN_2] فعليًا لأنها مقفلة.
  4. إعادة البناء: نقوم بإعادة إدراج الكود الأصلي في السلسلة المترجمة بالضبط حيث ينتمي.

النتيجة: صفر مواقع مكسورة

نظرًا لأن الذكاء الاصطناعي لا يتفاعل أبدًا مع أحرف %s أو HTML الفعلية، فمن المستحيل رياضيًا لمحرك الترجمة إضافة مسافة داخل متغير أو إتلاف وسم.

حتى أننا نتعامل مع قواعد الجمع المعقدة (msgid_plural) للغات مثل الروسية أو البولندية، مما يضمن استخدام المتغير الصحيح للعدد الصحيح.

توقف عن المقامرة بالكود الخاص بك

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

SimplePoTranslate هي الأداة السحابية الأكثر أمانًا وتقدمًا للمطورين الذين يهتمون بسلامة الكود.

  • قائم على السحاب: لا توجد إضافات للتثبيت.
  • مدرك للسياق: يستخدم ذكاء اصطناعي من فئة Gemini/GPT-4 للصياغة الطبيعية.
  • بناء جملة مقفل: حماية مضمونة لمتغيراتك.

هل أنت مستعد للترجمة دون صداع؟ ابدأ مجانًا على SimplePoTranslate.com