كيفية ترجمة لعبة Unity إلى الإنجليزية
ترجم ألعاب Unity باستخدام RuneTranslate — بقراءة TextAssets وحقول MonoBehaviour (على Mono وIL2CPP) وStreamingAssets، ولماذا تقتصر على النص المُخرَج، وكيف يحميك حارس المعرّفات من إفساد اللعبة.
Unity هو المحرك وراء شريحة متنامية من الألعاب اليابانية المستقلة والروايات المرئية — وأصعب المحركات الشائعة للترجمة، لأن Unity ليس له صيغة نص واحدة. قد يعيش الحوار في كتل TextAsset، أو في حقول نصوص MonoBehaviour، أو في سكربتات StreamingAssets الحرة، أو مُصرَّفاً مباشرةً في ملف DLL بـ C#. يشرح هذا الدليل ترجمة لعبة Unity باستخدام RuneTranslate، والأهم، يوضّح القاعدة الواحدة التي تجعل Unity مختلفاً: النص المُخرَج فقط.
التحذير الكبير أولاً: النص المُخرَج فقط
يترجم RuneTranslate نص Unity الذي يعيش في بيانات — ملفات أصول يحمّلها المحرك أثناء التشغيل، بما فيها حقول النصوص على مكوّنات MonoBehaviour (الحوار، الأسماء، الملصقات). يقرأ تلك الحقول على كلٍّ من Mono وIL2CPP: يأتي تخطيط النوع من ملفات DLL الخاصة باللعبة على Mono، أو يُعاد بناؤه من بيانات IL2CPP الوصفية حين لا يوجد مجلد Managed/. أما ما لا يستطيع الوصول إليه فهو النص المُصلَّب في شيفرة C# المُصرَّفة نفسها (Assembly-CSharp.dll). عملياً، الألعاب التي تُبقي سكربتها في الأصول والمكوّنات تُترجم جيداً — وفتح المشروع، الخطوة الأولى، يخبرك بما لديك.
ما تحتاجه
- RuneTranslate لنظام Windows — مجاني، كل محرك ومزوّد مفتوح.
- مجلد لعبة Unity — الدليل الذي يحتوي على
.exeالخاص باللعبة ومجلد<GameName>_Data/(يحتوي علىglobalgamemanagersوresources.assetsوdata.unity3dوملفاتlevel*). - لغة هدف — الإنجليزية، الإسبانية، الفرنسية، الألمانية، البرتغالية، الروسية، الصينية، الإيطالية، التركية، الفيتنامية، وأكثر من 20 أخرى.
- مزوّد ترجمة واحد. تعمل Google Translate المجانية مباشرةً؛ ولدى DeepL فئة مجانية؛ وأما OpenAI وAnthropic ونموذج محلي وأي واجهة متوافقة مع OpenAI فبمفتاحك الخاص.
الخطوة 1: افتح مجلد اللعبة
أطلق RuneTranslate، وانقر New project، ووجّهه إلى مجلد لعبة Unity. يبحث اكتشاف المحرك عن مجلد _Data/ ويعرّف المشروع كـ Unity. يفتح مكوّن UnityPy المرافق المضمّن بـ Python (المشحون داخل المثبّت) ملفات الأصول ويسرد النصوص المقروءة في مساحة عمل لكل مشروع تحت %APPDATA%/RuneTranslate/unity-workspace/<projectId>/. لا يُعدَّل مجلد لعبتك الأصلي أبداً. Unity محرك أفضل جهد ممكن — تحقّق من تشغيل النسخة المصدَّرة قبل إعادة التوزيع.
الخطوة 2: كيف تُستخرَج النصوص
يقرأ RuneTranslate النص من كل مكان يُخرجه Unity فيه:
- TextAssets — كتل JSON / CSV / سكربت مضمّنة في
.assetsوAssetBundles، مقطّعة بمستخرِج واعٍ بالتنسيق. - حقول نصوص MonoBehaviour — نص العرض على المكوّنات (الحوار، الأسماء، الملصقات)، على كلٍّ من Mono وIL2CPP (تأتي معلومات النوع من ملفات DLL الخاصة باللعبة، أو يُعاد بناؤها من بيانات IL2CPP الوصفية).
- StreamingAssets — ملفات سكربت حرة مطروقة مباشرةً على القرص (
.jsonو.txtو.csvو.tsvو.xmlو.yamlو.ksوغيرها). - حزم Addressable المشفّرة — الألعاب التي تشفّر حزم أصول Addressable بـ AES تُفكّ تلقائياً (المفتاح مشتق من اسم ملف الحزمة نفسه)، فيُستخرَج نصها كأي حزمة أخرى.
Unity أيضاً حيث تُحدِث الترجمة الزائدة أكبر ضرر، فيشحن RuneTranslate حارساً لها. كثير من نصوص MonoBehaviour ليست نص عرض أصلاً — بل معرّفات تحكم ومعاملات تدفّق: أسماء مشاهد يحلّها نداء LoadScene بالنص، ومفاتيح توجيه رسائل، وأسماء مقاطع animator / صوت، وأسماء أجزاء Live2D، وقيم المقارنة داخل منطق Fungus If / SetVariable (مثل علم كـ 村落出口). ترجمها وتنكسر اللعبة بصمت — العرَض الكلاسيكي شاشة "loading" لا نهائية دون خطأ. يصنّف RuneTranslate هذه تلقائياً كـمستبعدة (معروضة بالأحمر، اختيارية فقط)، فيُبرز المحرّر الحوار والملصقات الحقيقية ويترك الآلية وشأنها. تُخفى استيفاءات Fungus {$var} وعلامات {color=...} / TMP <...> خلف عناصر نائبة بحيث تنجو من الترجمة سليمة.
الخطوة 3: الترجمة والمراجعة
اختر مزوّداً وشغّل. يقرأ DeepL أو نموذج لغوي أفضل للحوار؛ وتغطّي Google Translate المجانية القوائم وأسماء العناصر. أدرِج طاقمك ومصطلحاتك المتكررة في المسرد أولاً — انظر أساسيات المسرد. ينزل كل سطر في المحرّر بجانب مصدره؛ حرّر مباشرةً (يُحفَظ عند فقد التركيز أو بـ Ctrl+Enter)، وشغّل مُنقّح الذكاء الاصطناعي الاختياري لمرور تدقيق ثانٍ. تعمل الفئة المجانية بمحدّد بسيط (نحو مرتين أبطأ على مزوّدي الذكاء الاصطناعي، وأقل على أدوات الكشط) — المحركات نفسها، وجودة الإخراج نفسها؛ والمدفوع يعمل بالسرعة الكاملة فقط.
الخطوة 4: صدّر نسخة قابلة للعب
انقر Export. ينسخ RuneTranslate اللعبة، ثم يرقّع النصوص المترجمة عائدةً في ملفات الأصول في مكانها. يعمل حارس الاستبعاد نفسه عند إعادة الكتابة، فلا يستطيع مشروع أقدم دفع اسم مشهد أو معامل تدفّق مترجم عرَضاً عند إعادة التصدير. الإخراج نسخة كاملة قابلة للتشغيل من اللعبة في الموقع الذي تختاره — أطلق .exe وستعمل بلغتك الهدف.
تترجم إلى لغة غير لاتينية (الصينية، اليابانية، الكورية، التايلاندية، العربية) لا يستطيع خط اللعبة المدمج عرض محارفها؟ يحقن RuneTranslate خطاً احتياطياً في كومة خطوط TextMeshPro عند التصدير، بحيث يظهر النص المترجم بدل مربّعات الحروف الناقصة.
قيود معروفة
- النص المُخرَج فقط: النصوص المُصلَّبة في شيفرة 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
