تستخدم معظم الألعاب تعريبًا قائمًا على المفاتيح ، أي ، هناك حاجة إلى مفتاح لوصف نص معين ، لكنني أقدم خيارًا أفضل ، على الرغم من أن هذا الخيار غير مناسب لأولئك الذين لديهم صوت في الألعاب ، إلا أنه أسهل من خلال مفتاح.
ما هو المفتاح ولماذا هو مطلوب
المفتاح ، أو بالأحرى الكلمة الأساسية ، هي الكلمة التي سيتم بها تحديد النص المطلوب ، ومن ثم يتم البحث عن اللغة المحددة بالفعل. مثال على كلمة رئيسية:
scene_Escape_from_jail_Ethan_dialog_with_Mary_3 ، نعم ، سيبدو المفتاح
هكذا إذا كانت لعبتك تحتوي على العديد من المشاهد ، مؤامرة كبيرة. أقترح على الفور كتابة عبارة بإحدى اللغات ، غالبًا الإنجليزية أو تلك التي يجيدها المبرمج. بالمناسبة ، نظرًا لأن جميع عبارات اللغة الحالية واللغة الرئيسية ستكون في ذاكرة الوصول العشوائي ، ستكون أكثر إنتاجية من الحصول عليها من الملف في كل مرة ، للألعاب الكبيرة ، يمكنك تعديل الملف قليلاً لكل مشهد.
كيف سيتم ترتيب كل شيء
في الإجراءات الموضحة أدناه ، سيتم استخدام فئة Lang الثابتة ، والتي ستتم فيها جميع عمليات البحث عن الكلمات / العبارات. دعنا نعلن فئة عن طريق ربط المكتبات التي نحتاجها:
using UnityEngine; using System.Collections.Generic;
وبالتالي ، لا يمكننا الاستغناء عن مكتبة قياسية ، نظرًا لأننا سنحصل على الملف من الموارد ، يمكننا تنزيله بأي طريقة ملائمة ، لكنه أكثر ملاءمة وعملية. هناك حاجة إلى مكتبات النظام لتوصيل القائمة والقاموس والعمل مع الملفات من المحرر. مكتبة UnityEditor مطلوبة فقط لتحديث الملف أثناء السجل الأول من العبارة ، لأن بعد إعادة التشغيل السريع ، لن يتم دائمًا تحميل جميع العبارات ، ولكن بمساعدة هذه المكتبة يمكننا حل هذه المشكلة. يخزن الفصل حقلين ثابتين ، فليكن اسماء الملف ، وفي حالتنا يكون المسار عبارة عن مجلد به موارد ، ويمكن أن يكون هناك أي اسم للملف.
تحتاج الآن إلى إضافة قوائم لتخزين كل ما تستخدمه اللغة والقاموس.
private static int LangIndex;
سيحتوي حقل LangIndex على فهرس اللغة الحالية بالنسبة للسجل في الملف. في قائمة اللغات - سيتم تسجيل جميع اللغات المستخدمة في الملف. سيقوم القاموس بتخزين جميع العبارات باللغة الرئيسية وباللغة الحالية.
من الضروري إضافة تهيئة للحقول الموصوفة أعلاه للفصل.
قانون public static bool isStarting
سيستخدم على الفور التوجيه المضمن حتى لا يقوم بإجراءات غير ضرورية بعد تجميع التطبيق. يجب أن تذهب الدعوة إلى Lang.Starting (...) إلى شيء من هذا القبيل:
#if !UNITY_EDITOR Lang.Starting(LANGUAGE); #else Lang.Starting(LANGUAGE, SystemLanguage.English, SystemLanguage.Russian, SystemLanguage.Ukrainian); #endif private static int FindIndexLanguage(SystemLanguage _language)
يجب أن تحتوي المكالمة عند التشغيل في المحرر على معلمتين رئيسيتين ، ما هي عبارات اللغة التي يجب ترجمتها الآن ، واللغة التي سيتم استخدامها كلغة رئيسية ، وكل المعلمات الأخرى هي معلمات اللغة التي يجب تضمينها في الملف ، فهذه المعلمات مطلوبة فقط أثناء الإطلاق الأول ، عندما لم يتم إنشاء الملف بعد (وليس من الضروري حذفه لاحقًا) ، وإلا ، إذا كنت بحاجة إلى إضافة بعض اللغات ، فأنت بحاجة إلى نسخ كل شيء من الملف وحذف الملف وإعادة تشغيل الرمز في المحرر أو إضافته إلى الملف بنفسك.
يستخدم الكود أعلاه طريقة
SystemLanguageParse (...) ، التي تقوم ببساطة بترجمة أسماء اللغات من نوع السلسلة إلى SystemLanguage (ستكون هذه الطريقة أقل).
دعنا نتحدث عن طريقة الإضافة:
#if UNITY_EDITOR private static void Add(string AddString)
نظرًا لأنه لن يتم استخدام هذه الطريقة إلا عند البدء من المحرر ، يمكننا استخدام الأداة المساعدة للنظام بأمان للكتابة فوق الملف ، وكذلك تحديث الملفات التي تم تغييرها إلى المحرر باستخدام طريقة Refresh (). بين هذه الإجراءات ، تتم إضافة عبارة ببساطة إلى القاموس ، وذلك لحماية نفسك من إعادة التسجيل في الجلسة نفسها.
بالمناسبة ، نسيت أن أقول أنه سيتم تخزين العبارات في ملف بتنسيق .csv ، مما سيتيح لنا ترجمة العبارات إلى Excele بشكل مريح. نحتاج الآن إلى إضافة طريقة جيدة بالنسبة لنا ، مما سيتيح لنا تغيير اللغة:
public static void ChangeLanguage(SystemLanguage _language)
وهكذا ، توصلنا إلى أهم طريقة ، والتي ستأخذ العبارة باللغة الرئيسية وتصدرها للمستخدم المناسب:
public static string Phrase(string DefaultPhrase)
تأخذ هذه الطريقة ببساطة عبارة باللغة الرئيسية ، ثم تتكرر على كل ما هو موجود في القاموس ، وتجد مثل هذه العبارة بالمفتاح ، فهي تعطينا قيم هذا المفتاح ، وهي عبارة في اللغة التي نحتاجها. يمكنك استخدام هذه الطريقة مع سطر بسيط من الكود:
string str = Lang.Phrase("Hello world");
الآن ، سيتم إدخال العبارة باللغة التي نحتاج إليها في السلسلة str ، وإذا كانت فجأة مفقودة ، فسوف تسقط العبارة المحددة في المعلمات ، أي Hello world ،.
يمكن تحسين هذه الطريقة قليلاً ، بحيث يمكنك استخدام الوسائط لتعبئة:
public static string Phrase(string DefaultPhrase, params string[] args)
الآن يمكن استدعاء هذه الطريقة كما كان من قبل:
string str = Lang.Phrase("Hello world");
ولكن الآن قامت طريقتنا بتنسيق الإخراج ، مع الإشارة إلى المعلمات مفصولة بفواصل:
string str = Lang.Phrase("Hello {0} from {1}", "world", "habr");
ترجمة العبارات
كما كتبت أعلاه ، يستخدم الملف امتدادات .csv التي ستتيح لك القيام بكل شيء في Excel ، ولكن ليس بهذه البساطة ، فإن مشكلة C-sharpe و Excel هي أنهم يفهمون الأبجدية السيريلية في تشفير مختلف ، فهم Excel يفهم فقط ترميز UTF-8-BOM أو تلك التي لا يفهمها برنامجنا YaP ، يجب أن نستخدم UTF-8 فقط فيها ، على الرغم من أن المحرر الأحادي سوف يفهم UTF-8-BOM ، في الكود هناك كلمتان متطابقتان على ترميزات مختلفة (UTF-8 و UTF-8- BOM) لن تكون متساوية ، مما سيؤدي إلى الإضافة المستمرة للكلمات المتطابقة لملفنا.
يمكننا
تشفير الملفات باستخدام برنامج
NotePad ++ المجاني من
خلال تنزيله من وضع إيقاف التشغيل. الموقع. تحرير ملف لن يجلب لك أي مشكلة ، لإضافة كلمة واحدة يمكنك حتى استخدام محرر نصوص أو لوحة الملاحظات نفسها أو حتى بيئة البرمجة الخاصة بنا.
الرمز النهائي using UnityEngine; using System.Collections.Generic;
الشيء الرئيسي الذي يجب تذكره: UTF-8-BOM - للعمل في Excel ، UTF-8 للعمل مع التعليمات البرمجية ، لا تنسَ.