گیمر، برنامه نویس، ایده پرداز
آموزش فارسی سازی بازی - بخش ۳ - مشکلات غیر منتظره
خوب رسیدیم به جایی که شما خیلی خوشحال بازی رو ترجمه کردین و متن رو هم به بازی تزریق کردین و بعدم بازی رو اجرا کردین تا نتیجه کار رو ببینین و با عکس زیر رو به رو میشین :)
مشکل اولی که ممکنه بهش برخورد کنین پشتیبانی نکردن فونت بازی از زبان فارسی هست. در نتیجه حروف رو مثل مربع خالی نشون میده. این مشکل هم راه حل سر راستی براش نیست ولی به صورت خلاصه اینه که باید رسم الخط فارسی (یا همون عربی) رو به فونت بازی اضافه کنین که کار ساده ای نیست و انواع مختلف فونت ها با فرمت های مختلف مثل fnt , dds , blb ,dpc و ... مواجه میشین که تغییر دادن هر کدومش نیازمند ابزار مناسبه. (امیدوارم به این مشکل نخورین و اگر خوردین بتونین فونت رو اصلاح کنین) اگر اینکار رو انجام دادین ممنون میشم که تجربیاتتون رو برام بذارین تا به آموزشم اضافه کنم. خوب فرض میکنیم که به این مشکل نخوردین.
خوب من اومدم متن های صفحه اصلی بازی Hollow Knight رو ترجمه کردم با عکس زیر رو به رو شدم
همون طور که تو عکس پیداست برعکس بودن کلمات و شکسته بودن حروف کلمات مشکلاتی هست که اول به چشم میاد و بعدش حتی متوجه برعکس بودن جملات هم میشه شد. اولین چیزی که به ذهنتون میاد اینه بریم همه چی رو برعکس کنیم ینی مثلا عبارت «شروع بازی» رو به شکل «یزاب عروش» بنویسیم هم جمله برعکس میشه و هم کلمات ولی همچنان مشکل دیگری هست اونم شکسته بودن حروف من خودم بعد از کلی سرچ (قبلا هم گفتم من تو این زمینه تازه کارم) از روش زیر این مشکل رو حل کردم.
تو کامپیوتر همه متن ها در نهایت به یه سری کد تبدیل میشن که بهش سیستم کدگزاری هم میگن. معروف ترینش ASCII هست ولی زبان فارسی و عربی جز سیستم Unicode حساب میشن. و حالت های مختلف یک کاراکتر مثل «خـ ـخـ ـخ خ» کد های مختلف دارن ولی تو حالت اصلی همیشه از یک کد اصلی استفاده میشه و خود اون برنامه گرافیکی مثل برنامه ورد و ... بر اساس حروف قبل و بعدش خودش تصمیم میگیره از کدوم شکل استفاده کنه، در واقع فونت ها میان کارکتری که توی متن هست رو نمایش میدن ولی چون به طور پیش فرض فکر میکنن همه حروف از هم جدا هستن (مثل زبان انگلیسی) موتور بازی حروف رو بهم نمی چسبونه و همه رو در حالت جدا جدا نمایش میده. من اومدم خودم از کد های مورد نیازم استفاده کردم (ینی از حالت کاراکتری اصلی استفاده نکرده بر فرض کنین عبارت «شروع بازی» رو به شکل «ﺷ ﺮ و ع ﺑ ﺎ ز ی» نوشتم البته فاصله ها رو برای درک بیشتر گذاشتم. این حالت هارو با کد هاشون می تونین از این صفحه و این صفحه پیدا کنین. یک ابزار به نام تدوین پیدا کردم (که محصول برنامه نویسان عرب زبانه و تقریبا خروجی همون چیزی که میخوایم رو میده ینی جمله برعکس کلمه برعکس و استفاده از شکل شکسته کد ها)
با استفاده از اون فایل ترجمه ام رو اصلاح کردم و به نتیجه زیر رسیدم پس با اینکار به شکل زیر رسیدیم.
خوب بریم سراغ مشکل بعدی ممکنه وقتی فایل های یک بازی رو ترجمه میکنین با پاراگراف بندی اشتباه مواجه بشین و متن ترجمه شده اونجوری که میخواین رفتار نکنه برای مثال تو ترجمه زیر به جای اینکه انتهای متن بره خط بعد ابتدای متن رفته خط بعد :) و ممکنه متن های طولانی روی هم دیگه قرار بگیرن یا اینکه پاراگراف از وسط یک کلمه شکسته بشه و یا اینکه بخشی از متن کلا از صفحه بره بیرون و نمایش داده نشه (یعنی اون بازی نمیتونه زیرنویس رو در ۲ خط نمایش بده) و ... این مشکل راه سر راستی نداره و باید خودتون با خلاقیت خودتون باهاش دست و پنجه نرم کنین.
بحث آخر رو هم به این اختصاص میدم که ممکنه اصلا بازی به این سادگی که متن رو بگیرین ترجمه کنین نباشه و بعضی بازیا ممکنه متن هارو به صورت مستقیم توی کد های برنامه نویسی گذاشته باشن (در اصطلاح HardCode) باشن که دیگه ترجمه بازی به این راحتیا نیست. یا ممکنه اصلا زبان بازی به نوعی برنامه سازی شده باشه که خود بازی متن هارو تولید کنه چون زبان انگلیسی خیلی ساده است و مطالعات خیلی خیلی زیادی روش انجام شده خیلی ساده برنامه بازی میتونه در هر زمان جملات مورد نیاز خودشو بر اساس یک فرهنگ لغت تولید کنه که اگر شما برین اون فرهنگ لغت ترجمه کنین بازم به مشکلات نگارشی میخورین ینی جمله بندی که بازی نشون میده بر اساس زبان انگلیسیه (برای مثال فعل به جای آخر جمله همون اول میاد) و در نهایت یک موضوع دیگه هم که هست که باید راجبش صحبت کنیم با عنوان ترجمه نکردن متغیر های رشته ای. فرض کنین توی متن یک بازی به عبارتی مثل، « !nameOfnation$ attacking you$
» می رسین این ینی اون بخش اولش یه جور متغیره و بعدا کد های بازی اون بخش رو با یه چیز دیگه جایگزین میکنن که بهتره اون بخش رو هم یک جای دیگه ترجمه کرده باشین و اگرنه ممکنه به مشکل BiDi بخورین و اگر این متغیر رو تغییر بدین برای بازی ممکنه هر اتفاقی بی افته ممکنه اجرا نشه یا اجرا بشه اون متن رو نیاره و ... البته ممکنه اون متغیر چیز های دیگه مثل نام اسلحه یا مقدار خون و ... هم باشه.
فکر میکنم اکثر مشکلاتی که ممکنه توی فارسی سازی باهاش رو به رو بشین رو گفتم. مثل همیشه اگر نظری،پیشنهادی، انتقادی اگر دارین بهم بگین ممنون از اینکه تا این بخش همراهم بودین تقریبا به صورت خلاصه کل ماجرای فارسی سازی رو گفتم. از این بخش به بعد آموزش هایی که میذارم بیشتر به مسایل فنی مثل همون اصلاح فونت و ... میپردازم و یا آموزش هایی جدا جدا برای موتور های مختلف بازیسازی برای ترجمه میذارم
این ۵ قسمت رو یه جورایی برای تخلیه اطلاعات مغزم نوشتم و برای ادامه این راه خیلی ایده دارم ولی نیاز به انگیزه هم دارم. بیشتر از نظر مالی نیاز به دیده شدن نوشته هام و نظرات شما دارم. حداقل لایک هاتون رو دریغ نکنین ممنون. با حمایت هم که دیگه نگم چقدر شارژ میشه آدم.
پ.ن:در کنار این آموزش ها دارم سعی میکنم یک ابزار ترجمه گروهی برای بازی ها بنویسم. چون ذات ترجمه بازی ها جملات نا پیوسته هست پس میتونه این امکان وجود داشته باشه که چند نفر باهم روی ترجمه کار کنن و به کار هم لطمه نزنن ولی باید یه سری کلمات رو بهم دیگه گزارش بدن که مثلا این اصطلاح رو من اینجوری ترجمه کردم و اگر کسی به همچین اصطلاحی برسه برنامه خودش ترجمه همگروه رو که قبلا نوشته گوشزد کنه. و همچنین از ایده های شما هم استقبال میکنم.
مطلبی دیگر از این انتشارات
آموزش فارسی سازی بازی - مقدمه ۱ - انگیزه من
مطلبی دیگر از این انتشارات
آموزش فارسی سازی بازی - مقدمه ۲ - خلاصه ای درباره فن سابینگ بازی
مطلبی دیگر از این انتشارات
آموزش فارسی سازی بازی - بخش ۱ - فارسی سازی بازی و چالش ها