الميزاتإضافةالتسعيرالموارد
تغيير اللغة
المواردكيف تترجم ملفات XLIFF (دروبال، سيمفوني، أنجولار، iOS)

كيف تترجم ملفات XLIFF (دروبال، سيمفوني، أنجولار، iOS)

SimplePoTranslate Team16 أبريل 2026
كيف تترجم ملفات XLIFF (دروبال، سيمفوني، أنجولار، iOS)

نشر مطور دروبال على Stack Overflow الأسبوع الماضي قصة تتكرر آلاف المرات سنويًا عبر فرق التعريب المؤسسية. قام فريقها بتصدير ملف XLIFF بحجم 40 ميجابايت من موقعهم على دروبال. قامت بفتحه في محرر نصوص، ولصق أجزاء منه في ترجمة جوجل، ثم أعادت تجميع الملف، واستوردته مرة أخرى إلى دروبال - ورفضت نصف الصفحات الظهور لأن السلاسل المترجمة احتوت على XML مشوه، وحروف محذوفة في أماكن خاطئة، وعلامات <g> مكسورة حيث تم تدمير التنسيق المضمن.

XLIFF هو معيار التعريب المؤسسي لسبب وجيه. إنه يعتمد على XML، ومستقل عن الأدوات، ويدعم البيانات الوصفية الغنية التي تحتاجها مشاريع الترجمة الجادة: حالات الترجمة، والترجمات البديلة، والملاحظات بين المترجمين والمطورين، والترميز المضمن المنظم. لكن مرونته الشديدة تجعله عرضة للتلف بسهولة، وغالبًا ما تفشل الأدوات التي تتعامل مع ملفات .po بأمان عند التعامل مع XLIFF.

يرشدك هذا الدليل إلى ما يميز XLIFF، ولماذا تفسده طرق الترجمة العامة، والطريقة الصحيحة لترجمة ملفات XLIFF لـ دروبال، سيمفوني، أنجولار، و iOS - المنصات الأربع الأكثر استخدامًا لـ XLIFF في عام 2026.

ما هو XLIFF (ولماذا تستخدمه الفرق المؤسسية)

XLIFF هو اختصار لـ XML Localization Interchange File Format (تنسيق ملف تبادل التعريب XML). إنه معيار OASIS مصمم خصيصًا لنقل محتوى الترجمة بين الأدوات - أنظمة إدارة المحتوى، وقواعد بيانات ذاكرة الترجمة، وأدوات الترجمة بمساعدة الحاسوب (CAT)، ومنصات التعريب. على عكس ملفات Gettext .po (التي تخزن أزواج مفتاح-قيمة مسطحة) أو ملفات JSON المحلية (التي تتداخل بشكل عشوائي)، فإن XLIFF هو مستند XML منظم ذو مخطط قياسي.

XLIFF 1.2 مقابل XLIFF 2.0

يوجد إصداران قيد الاستخدام، وهما غير متوافقين تمامًا.

XLIFF 1.2 هو الإصدار الأقدم والأكثر انتشارًا. يستخدم عناصر <trans-unit> لتغليف المحتوى القابل للترجمة، مع عناصر فرعية <source> و <target>. يستخدم التنسيق المضمن علامات مقترنة مثل <g> و <x> و <bpt> / <ept>. لا تزال أداة إدارة الترجمة في دروبال والعديد من المنصات الأقدم تصدر الإصدار 1.2.

XLIFF 2.0 هو مراجعة عام 2014، وهو أبسط وأنظف. يستخدم <unit> و <segment> مع <source> و <target>. يستخدم الترميز المضمن <pc> (كود مقترن) و <ph> (عنصر نائب). مكون الترجمة في سيمفوني وإصدارات iOS الحديثة تستخدم 2.0 افتراضيًا.

أداة الترجمة التي تتعامل مع 1.2 لا تتعامل تلقائيًا مع 2.0. تختلف مفردات العلامات (tags)، وتختلف قواعد الإفلات (escaping) قليلاً. تحقق دائمًا من الإصدار الذي تصدره منصتك قبل اختيار مسار للترجمة.

تشريح وحدة XLIFF

وحدة XLIFF 1.2 trans-unit بحدها الأدنى تبدو كالتالي:

<trans-unit id="msg_welcome" datatype="plaintext">
  <source>Welcome, <g id="1">%name%</g>!</source>
  <target state="needs-translation">Welcome, <g id="1">%name%</g>!</target>
  <note>Displayed on the homepage after login</note>
</trans-unit>

يغلف <g id="1"> متغيرًا نائبًا. يخبر السمة state المنصة بأن هذه السلسلة تحتاج إلى ترجمة. تمثل <note> تلميحًا للمطور. المترجم الذي يفهم XLIFF يجب أن ينتج:

<target state="translated">¡Bienvenido, <g id="1">%name%</g>!</target>

المترجم الذي يتعامل مع الملف كنص عادي قد ينتج أيًا من هذه المتغيرات المعطلة:

<target>¡Bienvenido, <g id="1">%nombre%</g>!</target>
<target>¡Bienvenido, &lt;g id="1"&gt;%name%&lt;/g&gt;!</target>
<target>¡Bienvenido, %name%!</target>

كل من هذه الحالات يفسد الاستيراد بطريقة مختلفة. الأول يعيد تسمية المتغير. الثاني يقوم بإفلات XML. الثالث يحذف علامة التنسيق بالكامل.

حلول سيئة (لماذا لا يمكنك فقط ترجمة XML)

تبدأ معظم الفرق بنفس الأساليب الثلاثة وتحرق عدة أيام قبل الاستسلام.

تغذية XLIFF إلى ذكاء اصطناعي عام

انسخ الملف، الصقه في Claude أو ChatGPT، واطلب الترجمة. عادةً ما يقوم النموذج بعمل جيد مع النص ولكنه يتعامل مع علامات XLIFF بشكل غير متسق. أحيانًا يحافظ على علامات <g>، وأحيانًا يترجم السمة id، وأحيانًا يجردها تمامًا. يفشل التحقق. يعرض استيرادك أخطاء تحليل XML.

استخدام أداة CAT بدون دعم XLIFF

أدوات مثل Poedit مصممة لتنسيق .po. قد تفتح XLIFF ولكنها تتعامل معه كحاوية نص عامة. العلامات المضمنة ليست مقفلة. العناصر النائبة ليست محمية. تحصل على ترجمة تبدو جيدة في المحرر ولكنها تفشل في التحقق من صحة المخطط عند الاستيراد.

كتابة نص برمجي مخصص

يقوم فريقك بكتابة نص برمجي (script) بلغة Node أو Python يقوم بتحليل XLIFF باستخدام xml2js، ويستخرج سلاسل المصدر، ويستدعي ترجمة جوجل، ويكتب الأهداف مرة أخرى. يعمل هذا لـ 90% من السلاسل. أما الـ 10% الأخرى - السلاسل ذات التنسيق المتداخل، أو مجموعات الجمع، أو الأحرف الخاصة - فتتعطل بطرق لا تظهر إلا بعد أن تكون قد أرسلتها.

يؤثر وضع الفشل نفسه الذي يحمل عنوان "تنسيق مرن يلتقي بمترجم ساذج" على ملفات i18next JSON وملفات Gettext .po. يغطي دليلنا حول ترجمة ملفات i18next JSON لتطبيقات React و Next.js ومقالتنا حول كيفية ترجمة ملفات .po دون إتلاف متغيرات الكود المشاكل الموازية لهذه التنسيقات.

الطريقة الصحيحة: معالجة XLIFF الواعية بالصياغة

يتبع مسار ترجمة XLIFF الصحيح نفس مبادئ محرك PO الخاص بنا، مع تكييفه لـ XML.

التحليل (Parse)، لا التعبير العادي (Regex)

تعامل مع XLIFF كمستند منظم. قم بتحليله باستخدام محلل XML حقيقي، وقم ببناء شجرة، وتتبع عناصر <trans-unit> (أو <unit> للإصدار 2.0). محاولة مطابقة محتوى المصدر والهدف باستخدام التعبيرات العادية (regex) هو الطريق السريع إلى الملفات التالفة.

قفل العلامات المضمنة قبل الترجمة

يجب الحفاظ على كل من <g>، <x>، <bpt>، <ept>، <ph>، <pc> داخل <source> حسب الموضع والسمة id. استبدلها بعناصر نائبة رقمية قبل إرسال النص إلى نموذج اللغة الكبير (LLM)، ثم أعد إدخال العلامات الأصلية مع سماتها بعد عودة الترجمة.

احترام آلة الحالة (State Machine)

تحتوي وحدات XLIFF على سمات حالة: new (جديد)، needs-translation (يحتاج إلى ترجمة)، translated (مترجم)، reviewed (تمت مراجعته)، final (نهائي)، signed-off (تم التوقيع عليه). يجب أن يترجم المسار الوحدات التي في حالة new أو needs-translation فقط، ويضبط حالة الإخراج إلى translated (وليس final - يجب على المراجع التحقق منها).

الحفاظ على الهيكل خارج وحدات الترجمة

تحتوي ملفات XLIFF على رؤوس، وبيانات وصفية، وسمات على مستوى الملف، وملاحظات، وترجمات بديلة (<alt-trans>). يجب أن تظل هذه دون تغيير خلال رحلة الذهاب والإياب. يؤدي تجريدها أو إعادة ترتيبها إلى كسر توافق الذهاب والإياب مع المنصة المصدر.

التحقق قبل التسليم

قبل إرجاع XLIFF المترجم، قم بالتحقق من صحته مقابل المخطط (schema). لدى XLIFF 1.2 مخطط XSD رسمي. ولدى XLIFF 2.0 مخطط خاص به. الأداة التي لا تستطيع التحقق من صحتها بنفسها هي أداة ستسلم لك ملفات معطلة.

ملاحظات خاصة بالمنصة

كل منصة رئيسية تستخدم XLIFF لها خصوصيات تستحق المعرفة.

دروبال

تقوم أداة إدارة الترجمة (TMGMT) في دروبال بتصدير XLIFF 1.2. تشمل أنواع المحتوى العقد (صفحات، مقالات)، ومصطلحات التصنيف، والتكوينات. تغلف TMGMT كل حقل قابل للترجمة في <trans-unit> منفصل بمعرف خاص بـ دروبال (fieldname:delta:format).

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

سيمفوني

يستخدم مكون الترجمة في سيمفوني XLIFF 2.0 افتراضيًا (منذ سيمفوني 4). توجد السلاسل في translations/messages.xx.xliff. يدعم سيمفوني تنسيق رسائل ICU داخل XLIFF، مما يعني أن الوحدة الواحدة يمكن أن تحتوي على هياكل مثل {count, plural, one {...} other {...}}.

ملاحظة هامة: تحتاج فئات الجمع في ICU داخل XLIFF إلى حماية مزدوجة. تظل علامات XML سليمة، ويجب عدم ترجمة الكلمات المفتاحية لـ ICU (plural، one، other، =0). العديد من أدوات XLIFF تتعامل مع طبقة واحدة ولكن ليس كلتيهما.

أنجولار i18n

يصدر أنجولار XLIFF 1.2 أو 2.0 عبر الأمر ng extract-i18n. تحتوي الملفات على سلاسل قوالب المكونات، مع علامات <x> التي تمثل تعبيرات أنجولار والاستيفاءات مثل {{ count }}.

ملاحظة هامة: يستخدم أنجولار تضارب تجزئة id عبر سلاسل المصدر المتطابقة. يجب أن تحافظ الترجمة على معرفات الوحدات بالضبط وإلا فلن يتمكن أنجولار من مطابقتها عند الاستيراد. إعادة تسمية سمات id أثناء المعالجة يؤدي إلى عطل فوري.

iOS (تصدير Xcode)

يقوم Xcode بتصدير XLIFF 1.2 لتعريب التطبيقات عبر Product > Export Localizations. تأتي السلاسل من Localizable.strings، وإدخالات Info.plist، ولوحات العمل (storyboards)، وملفات XIB. تعيش قواعد الجمع في iOS في ملفات .stringsdict التي يتم تصديرها كوحدات ترجمة إضافية.

ملاحظة هامة: تشير سلاسل لوحة العمل (storyboard) في iOS إلى معرفات عناصر واجهة المستخدم (UI). يجب عدم تغييرها. كما يتطلب Xcode أن تتطابق السمة target-language تمامًا مع تنسيق اللغة المحلية المتوقع (es، وليس es-ES، في بعض السياقات) وإلا فإنه سيتجاهل الاستيراد بصمت.

ترجمة XLIFF باستخدام SimplePoTranslate

تدعم SimplePoTranslate ملفات XLIFF في خطط Pro و Lifetime. سير العمل هو نفسه لملفات .po.

1. تصدير ملف XLIFF الخاص بك

من منصتك المصدر، قم بتصدير ملف أو أكثر من ملفات .xliff. لـ دروبال، استخدم إجراء التصدير في TMGMT. لـ سيمفوني، ابحث عن translations/messages.en.xliff. لـ أنجولار، قم بتشغيل ng extract-i18n --format=xlf2. لـ Xcode، استخدم تصدير التعريب (Localization export).

2. الرفع إلى SimplePoTranslate

اسحب الملف إلى لوحة التحكم. تكتشف المنصة تلقائيًا إصدار XLIFF (1.2 أو 2.0)، وتحلل الهيكل، وتحدد الوحدات القابلة للترجمة. اختر لغتك المستهدفة ونبرة الصوت.

3. الترجمة الواعية بالصياغة

يتم قفل العلامات المضمنة، ومعلمات ICU، والعناصر النائبة، ومعرفات الوحدات قبل الترجمة. يرى محرك الذكاء الاصطناعي الأساسي نصًا نظيفًا فقط مع السياق. يتم إعادة إدخال النص المترجم في الهيكل الأصلي الدقيق، وتحديث الحالات، ويتم التحقق من صحة الملف مقابل مخطط XLIFF قبل التسليم.

4. التنزيل والاستيراد

قم بتنزيل ملف XLIFF المترجم (بالإضافة إلى مكافئاته .po و .json و .php إذا كنت تحتاج إلى دعم عبر الأنظمة الأساسية). قم باستيراده إلى منصتك المصدر. تحقق من صحته عن طريق عرض بضع صفحات أو مشاهد مترجمة قبل النشر.

# Angular example
ng extract-i18n --format=xlf2 --output-path=src/locale
# upload src/locale/messages.xlf to SimplePoTranslate
# download messages.es.xlf
# reference in angular.json i18n configuration
ng build --localize

5. الدمج في CI

بمجرد أن تثق في مسار العمل، قم بأتمتته. قم بتصدير XLIFF في كل إصدار، وأرسله عبر API، وقم بتنزيل الملفات المترجمة، وقم بالتثبيت في المستودع (repo)، ثم النشر. هذا هو نفس النمط الصديق لـ CI الذي تستخدمه العديد من الوكالات لترجمة ملفات .po في WordPress - راجع مقالنا حول الترجمة السحابية دون مواقع معطلة لمعرفة النمط المعماري.

تلخيص الأمر

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

النهج الآمن هو الواعي بالصياغة: قم بتحليل XML، وقفل العناصر الهيكلية، وترجمة أسطح النص فقط مع السياق، والتحقق من صحته مقابل المخطط (schema) قبل التسليم. هذا صحيح سواء كنت تنشر موقع دروبال، أو واجهة برمجة تطبيقات سيمفوني، أو تطبيق ويب أحادي الصفحة (SPA) لـ أنجولار، أو تطبيق iOS. تختلف المنصة، لكن انضباط XLIFF لا يختلف.

هل أنت مستعد لترجمة ملفات XLIFF لـ دروبال، سيمفوني، أنجولار، أو iOS دون علامات مكسورة؟ جرب SimplePoTranslate مجانًا - لا يلزم وجود بطاقة ائتمان. قم بتحميل .xliff، ونزّل ترجمات آمنة، واستوردها إلى منصتك.