كيفية ترجمة لعبة Unity إلى الإنجليزية (النص المُصدَّر خارجيًا)
دليل خطوة بخطوة لترجمة ألعاب Unity إلى الإنجليزية باستخدام RuneTranslate — قراءة TextAssets وحقول MonoBehaviour وStreamingAssets، ولماذا يقتصر الدعم على النص المُصدَّر خارجيًا، وكيف يمنعك حارس المُعرِّفات من إفساد اللعبة.
Unity هو المحرك الذي يقف خلف حصة متنامية من ألعاب الإندي والروايات المرئية اليابانية — وهو أصعب المحركات الشائعة في الترجمة، لأن Unity لا يمتلك تنسيق نص واحدًا. يمكن أن يكون الحوار داخل كتل TextAsset، أو في حقول نصية من نوع MonoBehaviour، أو في نصوص StreamingAssets المنفصلة، أو مُترجَمًا مباشرةً داخل ملف DLL بلغة C#. يرشدك هذا الدليل عبر ترجمة لعبة Unity باستخدام RuneTranslate، والأهم من ذلك، يشرح القاعدة الوحيدة التي تجعل Unity مختلفًا: النص المُصدَّر خارجيًا فقط.
التحذير الكبير أولًا: النص المُصدَّر خارجيًا فقط
يترجم RuneTranslate نص Unity الموجود في البيانات — ملفات الأصول التي يحمّلها المحرك أثناء التشغيل، بما في ذلك الحقول النصية على مكوّنات MonoBehaviour (الحوار والأسماء والتسميات). أما ما لا يترجمه فهو النص الذي رمّزه المطوّر بشكل ثابت داخل شيفرة C# المُصرَّفة — ملف Assembly-CSharp.dll في نسخ Mono، أو ثنائي IL2CPP. تُقرأ حقول MonoBehaviour في نسخ Mono وIL2CPP معًا: يحصل RuneTranslate على مخطط أنواعها من ملفات DLL الخاصة باللعبة (Mono)، أو يعيد بناءه من بيانات IL2CPP الوصفية عند عدم وجود مجلد Managed/. عمليًا: الألعاب التي تُبقي نصوصها البرمجية في الأصول والمكوّنات تُترجَم جيدًا؛ والألعاب التي تخبز كل سطر داخل شيفرة مُصرَّفة تُترجَم جزئيًا فقط — ولن تعرف أيهما لديك إلا بعد فتحها، وهي الخطوة الأولى.
ما تحتاجه
- RuneTranslate لنظام Windows — مجاني، وكل محرك ومزوّد مفتوح.
- مجلد لعبة Unity — الدليل الذي يحتوي على ملف
.exeالخاص باللعبة ومجلد<GameName>_Data/(يتضمن ملفاتglobalgamemanagersوresources.assetsوdata.unity3dوlevel*). - لغة هدف — الإنجليزية والإسبانية والفرنسية والألمانية والبرتغالية والروسية والصينية والإيطالية والتركية والفيتنامية، وأكثر من 20 لغة أخرى.
- مزوّد ترجمة واحد. Google Translate المجاني يعمل مباشرةً؛ ولدى DeepL طبقة مجانية؛ أما OpenAI وAnthropic ونموذج محلي وأي واجهة برمجية متوافقة مع OpenAI فتعمل بمفتاحك الخاص.
الخطوة 1: افتح مجلد اللعبة
شغّل RuneTranslate، وانقر على مشروع جديد، ثم وجّهه إلى دليل لعبة Unity. يبحث كشف المحرك عن مجلد _Data/ ويحدّد المشروع بأنه Unity. يفتح مكوّن Python المرافق UnityPy المضمّن (المشحون داخل المثبِّت) ملفات الأصول ويسرد النصوص القابلة للقراءة في مساحة عمل خاصة بكل مشروع تحت %APPDATA%/RuneTranslate/unity-workspace/<projectId>/. لا يُعدَّل مجلد لعبتك الأصلي أبدًا. Unity محرك يعمل بأفضل جهد ممكن — تحقّق من أن النسخة المُصدَّرة تعمل قبل إعادة توزيعها.
الخطوة 2: كيف تُستخرَج النصوص
يقرأ RuneTranslate النص من كل موضع يُصدِّر Unity فيه النص خارجيًا:
- TextAssets — كتل JSON / CSV / نصوص برمجية مضمّنة في
.assetsوحِزم الأصول (AssetBundles)، يقطّعها مستخرِج مدرك للتنسيق. - حقول MonoBehaviour النصية — نص العرض على المكوّنات (الحوار والأسماء والتسميات)، في نسخ Mono وIL2CPP معًا (تأتي معلومات النوع من ملفات DLL الخاصة باللعبة، أو يُعاد بناؤها من بيانات IL2CPP الوصفية).
- StreamingAssets — ملفات نصوص برمجية منفصلة (
.jsonو.txtو.csvو.ks) تُطاف مباشرةً على القرص.
Unity هو أيضًا المكان الذي تُحدِث فيه الترجمة المفرطة أكبر ضرر، لذا يشحن RuneTranslate حارسًا لذلك. كثير من نصوص MonoBehaviour ليست نص عرض على الإطلاق — بل هي مُعرِّفات تحكّم ومعاملات تدفّق: أسماء مشاهد يحلّها استدعاء LoadScene عبر السلسلة النصية، ومفاتيح توجيه الرسائل، وأسماء مقاطع المُحرِّك الحركي / الصوت، وأسماء أجزاء Live2D، وقيم المقارنة داخل منطق Fungus If / SetVariable (مثل علامة كـ 村落出口). ترجمة هذه يُفسد اللعبة بصمت — والعرض الكلاسيكي هو شاشة „تحميل“ لا نهائية بلا أي خطأ. يصنّف RuneTranslate هذه تلقائيًا على أنها مستبعَدة (تُعرض بالأحمر، وبالاشتراك اليدوي فقط)، فيُبرِز المحرِّر الحوار والتسميات الحقيقية ويترك الآليات وشأنها. أما استبدالات Fungus {$var} وترميز {color=...} / TMP <...> فتُقنَّع خلف عناصر نائبة لتنجو من الترجمة سليمة.
الخطوة 3: ترجم وراجِع
اختر مزوّدًا وشغّل. تُقرأ DeepL أو نموذج LLM على أفضل نحو للحوار؛ ويغطّي Google Translate المجاني القوائم وأسماء العناصر. أنشئ مسردًا لطاقم شخصياتك ومصطلحاتك المتكررة أولًا — انظر المسرد 101. يظهر كل سطر في المحرِّر بجوار مصدره؛ حرِّره مباشرةً (يُحفَظ عند فقدان التركيز أو بـ Ctrl+Enter)، وشغّل مُنقِّح الذكاء الاصطناعي الاختياري لتدقيق ثانٍ. الطبقة المجانية من RuneTranslate مُقيَّدة بسرعة أبطأ بنحو 3–4× من المدفوعة — بجودة إخراج مطابقة.
الخطوة 4: صدِّر نسخة قابلة للعب
انقر على تصدير. ينسخ RuneTranslate اللعبة، ثم يرقّع النصوص المترجمة داخل ملفات الأصول في مكانها. يعمل حارس الاستبعاد نفسه عند إعادة الكتابة، فلا يستطيع مشروع قديم أن يدفع بالخطأ اسم مشهد مترجَمًا أو معامل تدفّق عند إعادة التصدير. الناتج نسخة كاملة قابلة للتشغيل من اللعبة في الموضع الذي تختاره — شغّل ملف .exe وستعمل بلغتك الهدف.
قيود معروفة
- النص المُصدَّر خارجيًا فقط: النصوص المُرمَّزة بشكل ثابت داخل شيفرة C# المُصرَّفة (
Assembly-CSharp.dllفي Mono، أو ثنائي IL2CPP) لا تُترجَم. أما حقول بيانات MonoBehaviour فتُترجَم — في نسخ Mono وIL2CPP معًا. - تتطلب قراءة MonoBehaviour في IL2CPP ملف
global-metadata.datقابلًا للتحليل؛ وقد لا تُعاد بنية البيانات الوصفية المُبهَّمة بشدة (بأفضل جهد ممكن). - بأفضل جهد ممكن: تأكّد من أن اللعبة المُصدَّرة تُطلَق وتُقرأ بشكل صحيح قبل مشاركتها.
- نص الصور (الشعارات وواجهات المستخدم المرسومة يدويًا وتعليقات CG) لا يُترجَم — خارج نطاق الترجمة الآلية.
لماذا هذا أسهل من الطريقة القديمة
كانت ترجمة Unity اليدوية تعني فكّ حزم الأصول باستخدام UABE أو AssetStudio، والبحث عن أي من TextAssets وحقول MonoBehaviour يحمل نصًا حقيقيًا، وتجنّب سلاسل المُعرِّفات التي تُعطِّل اللعبة يدويًا، ثم إعادة الاستيراد دون إفساد جدول الأصول. يطوي RuneTranslate الاستخراج والتصنيف (كي لا تترجم الآليات) والترجمة والترقيع في المكان في بضع نقرات — مع بقاء المحرِّر مفتوحًا لتتحكّم في الصياغة.
اطّلع على صفحة محرك Unity للحصول على قائمة الميزات الكاملة، واقرأ دليل TyranoBuilder لمحرك قائم على HTML، أو نزّل RuneTranslate وجرّبه على لعبة حقيقية.
مستعد لتجربة RuneTranslate؟
تفتح الباقة المجانية كل محرك + كل مزود ترجمة. باقة Supporter ($3/mo) تفتح السرعة الكاملة.
التنزيل لنظام Windows