انواع ترجمه زبان در اسکریپت ها و وردپرس

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-05-15 18:52:46

ترجمه ها در اکثر اسکریپت های امروزی وجود داره و به کمک اونها می تونیم اسکریپت رو در زبان های مختلفی داشته باشیم. طراح ها معمولا با این قابلیت به کاربرانشون این اجازه رو میدن تا بتونند سایت هایی رو برای زبان های مختلفی با اسکریپتشون آماده کنند. اما روش های مختلفی برای ترجمه ها وجود داره.

به طور کلی ترجمه ها به این صورت در اسکریپت ها تعریف میشن و برای تعریف اونها باید موقع کدنویسی اقدام کرد و بعد از کدنویسی تقریبا کار دشواری هست که بخواهیم حالت ترجمه رو تغییر بدیم:

  1. از طریق فایل PHP (که در این حالت خطوط ترجمه در قالب یک یا چند فایل PHP داخل پوشه مخصوصی از اسکریپت قرار داده میشه و در بقیه جاهای اسکریپت از دستورات خاصی برای فراخوانی ترجمه استفاده می کنند)
  2. از طریق فایل XML (این نوع حالت ترجمه تقریبا قدیمی شده و بیشتر در اسکریپت های قدیمی تر مشاهده می کنید. دقیقا مثل نوع PHP هست فقط با این تفاوت که دستورات فراخوانی ترجمه ها تفاوت داره و کمی باعث کندی اجرای سایت میشه به همین خاطر هم این روش از رده خارج شده)
  3. از طریق فایل جاوا اسکریپت (توی این روش، خطوط ترجمه با کدنویسی های خاصی در قالب یک فایل JS داخل اسکریپت ذخیره میشه و بیشتر برای سایت هایی که از آجاکس استفاده می کنند کاربرد داره. این روش هم خیلی کم استفاده میشه)
  4. از طریق دیتابیس (در این حالت که روش سریع تری هست اما خیلی کمتر از مابقی استفاده میشه، موقع نصب اسکریپت، زبان ها و ترجمه ها در فایل های نصب قرار داده میشه که وارد دیتابیس سایت بشن. بعد از نصب، داخل پنل مدیریت معمولا یک صفحه ای طراحی میشه که می تونید ترجمه ها رو از صفحه ای که خود طراح اسکریپت براتون در نظر گرفته، ترجمه ها رو مدیریت کنید. این نوع ترجمه ها توی اکثر اسکریپت های حرفه ای مشاهده میشه و خیلی کاربردی هست. این حالت به کاربر اجازه میده بتونه زبان ها رو حذف و اضافه و یا ویرایش کنه و فراخوانی این نوع ترجمه ها خیلی سریع تر از باقی روش ها انجام میشه اما اگه کدنویسی درستی نداشته باشه باعث بروز مشکلات امنیتی داخل سایت میشه)
  5. از طریق فایل MO (این نوع ترجمه ها از طریق فایل هایی با فرمت mo در اسکریپت تعریف میشن. این روش خیلی مرسوم هست و در وردپرس هم از این نوع استفاده میشه. و با نرم افزار poEdit هم میشه به راحتی این نوع فایل ها رو در ویندوز و سایر سیستم عامل ها باز کرد و ترجمه ها رو تغییر داد. سه نوع فرمت در این روش تعریف شده. یکی فرمت .pot هست که در واقع یک نوع قالب بندی برای ترجمه ها هست. کاربرد خاصی نداره فقط زمانی که بخواهید یک زبان جدید به غیر از زبان هایی که قبلا توسط کدنویس اضافه شده، به سایتتون اضافه کنید، می تونید این فایل رو باز کنید و بخش ترجمه ها خالی هست و می تونید خودتون ترجمه کنید. فرمت بعدی فرمت .po هست که زمانی که یک زبان جدید اضافه کنید، این فرمت هم ذخیره میشه که بعدا اگه خواستید ترجمه رو تغییر بدید به راحتی این فایل رو باز کنید و زبان رو مدیریت کنید. یک فرمت هم فرمت .mo هست که این فرمت در واقع فایل کامپایل شده و کدگذاری شده ترجمه هست. ترجمه سایت هم فقط و فقط از این فرمت دریافت میشه و اگه این فرمت رو داخل پوشه مربوط به ترجمه قرار ندید، در واقع اصلا زبان شما به سایت معرفی نمیشه! این فایل هر زمان که تغییری داخل فرمت .po بدید، بروزرسانی میشه و اگه فرمت .po این فایل در دسترس نباشه، امکان تغییر داخل ترجمه ها هم وجود نداره!

 

ترجمه ها در وردپرس

در وردپرس همونطور بالاتر گفتم، بر پایه فرمت .po و .mo هست اما کدنویس میتونه از حالت PHP و یا JS هم استففاده کرده باشه اما حالت مرسوم برای وردپرس همین فایل MO هست.

اکثر افزونه ها و قالب های مدرن، پوشه ای به نام lang یا language داخل خودشون دارند که فایل های زبان مربوط به خودشون رو داخلش نگهداری می کنند. البته اسم این پوشه ممکنه توی افزونه ها و قالب ها متفاوت باشه چون به راحتی میتونیم داخل فایل اصلی توابع، نام پوشه مخصوص زبان ها رو تغییر بدیم اما اکثرا از این دوتا اسم که گفتم استفاده می کنند. ترجمه های مربوط به افزونه یا قالب در دو جا می تونن ذخیره بشن:

  1. پوشه خود افزونه یا قالب. که داخل این پوشه یک پوشه دیگه با نام lang یا language تعریف میشه و فایل هایی مثل fa_IR.mo یا en_EN.mo داخل اون قرار میگیره
  2. یا اینکه در مسیر wp-content/languages فایل های زبان ذخیره میشه.

اما اگه احساس می کنید که افزونه یا قالب شما از زبان ها پشتیبانی نمی کنه یا فایل po و mo وجود نداره از دو طریق می تونید اضافه کنید:

  1. افزونه Loco Translate رو روی وردپرس نصب کنید. بعد از نصب وارد صفحه این افزونه بشید و توی اونجا لیستی از قالب و افزونه هاتون رو مشاهده می کنید. روی هر کدوم که کلیک کنید، وارد صفحه مربوط به ترجمه ها میشید. توی این صفحه هر ترجمه ای که برای این افزونه یا قالب تعریف شده باشه داخل سایتتون رو لیست میکنه. اگه هیچ ترجمه ای نباشه، بهتون یک لینک پیشنهاد میده که یک زبان جدید بسازید. می تونید یک فایل POT بسازید و ترجمه افزونه رو شروع کنید.
  2. اگه کلا پشتیبانی نکنه باید کدنویسی رو انجام بدید! در ادامه براتون توی این تاپیک از تاکینا روش افزودن زبان به قالب یا افزونه رو توضیح میدم:

 

روش اضافه کردن قابلیت ترجمه به افزونه یا قالب وردپرس

برای اضافه کردن قابلیت ترجمه ها و خوندن ترجمه ها از فایل MO باید پشتیبانی از زبان رو به افزونه یا قالب اضافه کنید. برای شروع باید دستور مربوط به پوشه ترجمه رو داخل اون افزونه یا قالب بدید. برای قالب باید این کد رو در فایل functions.php قرار بدید و برای افزونه داخل فایل اصلی افزونه که با فرمت php هست و در روت افزونه قرار داره.

add_action('after_setup_theme', 'talkina_theme_setup');
function talkina_theme_setup(){
    load_theme_textdomain('talkina_theme', get_template_directory() . '/languages');
}

کد بالا دو قسمت خیلی مهم داره. یکی نام پوشه ترجمه هاست و یکی هم textdomain. بر اساس کد بالا، داخل پوشه افزونه یا قالب باید یک پوشه به نام languages ایجاد کنید تا فایل ترجمه از اونجا دریافت و خونده بشن.

و بخش بعدی textdomain خطوط ترجمه ما talkina_theme در نظر گرفته شده که با این شناسه، ترجمه های مربوط به قالب ها و افزونه ها از هم جداسازی میشن. در صورتی که این شناسه توی چندین افزونه تکراری باشه باعث تداخل میشه و فقط یکی از اون ترجمه ها نمایش داده میشه.

خب مرحله بعدی اینه که متن های داخل قالب یا افزونه رو به صورت کدنویسی شده وارد کنیم تا بتونیم به راحتی یک فایل pot براشون بسازیم و ترجمه رو انجام بدیم. برای اینکار اگه مثلا متن This is Test رو می خواهید داخل قالب یا افزونه بنویسید، باید به این صورت بنویسید:

<?php _e('This is Test','talkina_theme'); ?>

همونطور که می بینید، توی کدبالا ما یک قاعده برای ترجمه استفاده کردیم که اونم _e هست. البته می تونید از __ یا __e هم استفاده کنید. این به این دلیل استفاده میشه که به نرم افزارهای شناسایی زبان مثل افزونه Loco Translate یا poEdit متن هایی که باید داخل قالب بندی ترجمه اضافه کنند رو معرفی می کنیم تا راحت تر پیدا بشن و با سایر کدهای PHP اشتباه گرفته نشن! 

قسمت بعدیش متن اصلی ماست و در نهایت talkina_theme که همون textdomain ماست که توی کد اول تعریف کردیم. خب مابقی متن های افزونه یا قالب رو به همین صورت تغییر بدید و بعد از اتمام کار، با نرم افزار poEdit یا Loco Translate می تونید یک قالب بندی ترجمه با فرمت .pot تهیه کنید و ترجمه برای زبان های دیگه رو شروع کنید.