
مرجع راهنمای مشکلات ترجمه افزونه و قالب در وردپرس؛ راه حل رایجترین مشکلات
من یک افزونه فارسی از مارکت خریدهام. اما افزونه به صورت انگلیسی نمایش داده میشود.
من قالب وردپرس را ترجمه کردهام. اما برخی عبارات همچنان به انگلیسی نمایش داده میشود.
عجیب است که افزونه در بخش مدیریت به انگلیسی نمایش داده میشود اما در فرانت اند فارسی است.
ترجمه قالب ناگهان از بین رفته. در صورتی که من قالب را آپدیت نکرم. فقط وردپرس را آپدیت کردم.
برخلاف مورد بالا من افزونه را آپدیت کردم و حالا ترجمه آن از بین رفته.
چه کنم؟
اینها برخی مشکلاتی است که برای ترجمه قالب و افزونه وردپرس، گریبان وبمستران و طراحان سایت را میگیرد. مخصوصا با آپدیت جدید وردپرس، سوالات زیادی از این دست از من میپرسند و تصمیم گرفتم یک راهنمای جامع در این باره بنویسم تا پاسخ تمام سوالات و راهکار مشکلات مربوط به ترجمه در وردپرس را یکجا داشته باشید.
بگذارید ابتدا با مشکلات شایع و علتهای متداول در این باره آشنا شویم:
چرا ترجمههای من درست نمایش داده نمیشود؟
اگر طراح سایت هستید و میخواهید به عنوان مترجم افزونه و قالب وردپرس فعالیت و کسب درآمد کنید میتوانید از آموزشهای قبلی من استفاده کنید. برای ترجمه در ویندوز بهتر است از نرمافزار Poedit (مک – ویندوز – لینوکس) به رایگان استفاده کنید که البته پیشنهادات ترجمه آن برای نسخه رایگان دارای محدودیت است.
برای ترجمه در داخل وردپرس هم از افزونه loco Translate استفاده کنید که به کمک آن میتوانید مستقیما نتایج ترجمه را در سایت مشاهده و تست کنید. این افزونه هم رایگان است اما اگر میخواهید از قابلیت ترجمه خودکار که یک قابلیت بسیار کاربردی برای مترجمان وردپرس است استفاده کنید میبایست نسخه پرو افزونه را تهیه کنید که از مترجم گوگل و هوش مصنوعی برای ترجمه خودکار و کامل افزونه و قالب وردپرس استفاده میکند.
در این مطلب هم توضیحات مختصری درباره ترجمه در وردپرس آمده است.
حالا برویم سراغ بحث اصلی و علل اصلی عدم نمایش درست ترجمههای افزونه و قالب در وردپرس را بررسی کنیم. ابتدا موارد را به صورت تیتروار ذکر میکنیم و سپس به سراغ راه حلهای آنها میرویم.
فایل های ترجمه سفارشی بارگیری نمیشوند
مقصود از فایلهای ترجمه سفارشی، همان فایلهای زبان است که شما ترجمه کردهاید. مثلا اگر افزونه woocommerce را به فارسی ترجمه کردهاید فایلهای سفارشی ترجمه شما دو فایل woocommerce-fa_IR.po و woocommerce-fa_IR.mo هستند. حال ما تصور میکنیم شما به کمک افزونه loco translate آن را ترجمه کردهاید.
رایجترین دلیل عدم نمایش ترجمههای سفارشی زمانی است که ترجمهها قبل از اجرای Loco Translate درخواست میشوند. برای مشاهده راهکار این مشکل، به بخش درخواست زودهنگام ترجمهها در پایینتر مراجعه کنید.
اگر بیشتر ترجمههای شما نمایش داده میشوند، اما فقط با چند کلمه مشکل دارید، به بخش مشکل در چند عبارت خاص در زیر مراجعه کنید. در غیر این صورت، سایر دلایل احتمالی را در اینجا برایتان لیست میکنم:
سایر دلایل احتمالی عدم ترجمه
- فایلهای شما حذف شدهاند
اگر فایلهای سفارشی خود را در مکانهای «نویسنده» یا «سیستم» ذخیره کردهاید، ممکن است وردپرس آنها را در طول بهروزرسانی حذف یا تغییر داده باشد. به بخش ناپدید شدن فایلهای ترجمه مراجعه کنید
دو مکان رایج برای ذخیره فایلهای ترجمه وجود دارد. یکی از آنها را مکان نویسنده میگوییم یعنی در پوشه اصلی خود افزونه. مثلا برای افزونه ووکامرس در این مسیر قرار میگیرد: wp-content/plugins/woocommerce/languages. مکان دوم هم در سیستم وردپرس است که آدرس آن مثلا برای افزونهها wp-content/languages/plugins هست.
- فایلها اشتباه نامگذاری شدهاند
ممکن است بستهها اطلاعات نادرستی را اعلام کنند که باعث میشود فایلهای شما با نامهای اشتباه ذخیره شوند. بررسی کنید که بسته همان دامنه متنی را (text domain) که واقعاً از آن استفاده میکند، اعلام کند و در صورت لزوم Loco Translate را پیکربندی کنید . اگر خودتان نمیتوانید این را بررسی کنید، از نویسنده بسته یا همان سازنده افزونه/قالب بخواهید تا نام فایلهای شما را تأیید کند.
اگر بخواهم مثال بزنم گاهی پیش میآید در افزونههایی که نامشان چندبخشی است یک اشتباه تایپی در نوشتن دامنه متنی پیش میآید. مثلا دامنه متنی به صورت upsell-funnel است اما نام فایل زبان به شکل upsell_funnel.pot نوشته میشود و همین باعث مشکل میشود.
- چیزی در حال ذخیره کردن رشته ها است
برخی از افزونه ها و قالب ها به شما امکان میدهند متن را از طریق صفحههای مدیریت شخصیسازی کنید. این میتواند منجر به ذخیره رشته های اصلی (ترجمه نشده) در پایگاه داده شود و بعداً به جای متنهای ترجمه شده مورد انتظار شما ارائه شود. این یادداشت در مورد تنظیمات را ببینید. برای این مورد هم بخش بررسی تنظیمات افزونه/قالب را در ادامه مطلب مطالعه کنید. - رشتهها در واقع قابل ترجمه نیستند
بسته نرم افزاری رشتههایی را که برای ترجمه در دسترس هستند تعریف میکند. گاهی اوقات یک رشته یا عبارت در میان کدها جا میافتد و برای ترجمه تنظیم نمیشود و بنابراین در فایل قالب زبان نمایش داده نمیشود. گاهی هم برعکس، سازندگان افزونه، فایل زبان خود را به روز نکردهاند و بنابراین عبارتهای اضافه شده در آپدیت جدید، وارد فایل زبان برای ترجمه نشدهاند. برای رفع این مشکل هم بخش همگام سازی ترجمه در loco translate را مشاهده کنید. - زبان شما به درستی تنظیم نشده است
برای اینکه ترجمه ها در سایت شما نمایش داده شوند، زبان مقصد باید در زمان بارگیری فایلهای ترجمه تنظیم شود. اگر این کار به درستی انجام نشود، تغییر زبان پویا میتواند در اینجا مشکلاتی ایجاد کند. برای این مشکل هم توضیحاتی در ادامه مطلب دادهایم. - ترجمهها برای جاوا اسکریپت هستند
Loco Translate از فایلهای ترجمه JSON برای استفاده پشتیبانی میکند، (wp_set_script_translations) اما این سیستم دارای برخی مشکلات مهم است که در ادامه به آن پرداخته ایم.
راههای دیگری نیز وجود دارد که نویسندگان میتوانند جاوا اسکریپت را بومیسازی کنند، بنابراین با فروشنده چک کنید که چگونه با این مساله برخورد میکنند و آیا از روشهای استاندارد وردپرس استفاده میکنند یا خیر.
مشکل در چند عبارت خاص
ممکن است متوجه شوید که فقط تعداد انگشت شماری از عبارات در سایت شما به زبان انگلیسی باقی میمانند، و اغلب آنها با ترجمه فارسیشان نمایش داده میشوند.
اگر هیچ یک از ترجمههای یک فایل کامل نمایش داده نمی شود، احتمالاا مشکل کاملاا متفاوتی دارید.
دلایل احتمالی زیادی برای ماندن رشتهها به زبان انگلیسی وجود دارد، حتی زمانی که به نظر میرسد فایلهای ترجمه شما بارگذاری شدهاند. برای رفع این مشکل راهکارهای زیر را امتحان کنید
مرحله ۱ – منبع رشته/عبارت را تعیین کنید
اولین کاری که باید انجام دهید این است که مشخص کنید رشتهها به کدام دسته (Term Bundle) تعلق دارند. آنها یا در هسته وردپرس، قالب یا یکی از افزونههای شما حضور دارند. اما عجولانه نتیجهگیری نکنید.
اگر مطمئن هستید که بسته صحیح حاوی رشتههای ترجمه نشده را شناسایی کردهاید، به مرحله ۲ بروید، اما ابتدا بررسی کنید که آیا هر یک از رشتهها در چندین مکان هستند یا خیر. ممکن است مجبور شوید بفهمید کدام نسخه مورد استفاده قرار میگیرد.
اگر رشته ها را در هیچ فایل ترجمهای پیدا نکردید، با نویسنده/فروشنده تماس بگیرید و از آنها بپرسید که آیا آنها قابل ترجمه هستند یا خیر. ممکن است اشتباه باشد، یا ممکن است راه دیگری وجود داشته باشد که شما قرار است آنها را ترجمه کنید.
اگر هنوز نمی دانید کلمات اسرارآمیز انگلیسی از کجا آمدهاند، دیگر نمی توانیم به شما کمک کنیم. در نهایت برای این که از شرشان خلاص شوید میتوانید از افزونههای جستجو و جایگزینی عبارات در سایت Find and Replace استفاده کنید.
مرحله ۲ – مشخص کنید آیا رشته ترجمه شده است
در این مرحله وقتی دانستید که کدام باندل مسئول رشتهها است و میدانید که یک فایل ترجمه برای آن وجود دارد. به سراغ فایل ترجمه بروید و آن را در Loco Translate پیدا کنید و نمای ویرایشگر زبان خود را باز کنید. اکنون مشخص کنید که آیا متن رشته به انگلیسی موجود است یا خیر. اگر چنین است، به مرحله ۳ بروید.
اگر رشته موجود نیست
اگر متن انگلیسی را در ویرایشگر نمیبینید، چندین دلیل ممکن است وجود داشته باشد:
- فایل ترجمه به روز نیست.
- رشته از کد استخراج نشده است.
- رشته اصلا قابل ترجمه نیست.
اقدام بعدی شما استفاده از دکمه همگامسازی Loco Translate است که در بالای ویرایشگر موجود است. موفقیت این عملیات بستگی به این دارد که آیا نویسنده یک الگو یا قالب ترجمه معتبر ارائه کرده باشد یا در غیر این صورت آیا Loco بتواند رشته ها را مستقیماً از کد منبع استخراج کند یا خیر.
اگر همگام سازی کار نکرد
اگر همگامسازی، رشته گمشده را به ویرایشگر اضافه نکرد، در آن صورت مجبورید دستتان را به کار آلوده کنید و کمی کار فنی انجام دهید. البته اگر قرار است به عنوان طراح سایت کار ترجمه انجام دهید بنابراین میبایست این اطلاعات را داشته باشید. اما اگر حتی کارتان هم این نیست نگران نباشید. انجامش چندان پیچیده نیست و نیاز به دانش فنی خاصی ندارد.
در این حالت، احتمالا فایل قالب ترجمه با پسوند pot به روز نیست. بنابراین شما مجبورید بشخصه، عبارتها را از داخل کدهای افزونه/قالب استخراج کرده و وارد فایل زبان کنید. برای این کار فایل زبان را با poedit باز کنید. به عنوان مثال این فایل woocommerce-fa_IR.po.
حالا از منوی poedit به قسمت Translation -> Properties بروید. در تب Source paths بروید و زیر قسمت paths بر روی دکمه + کلیک کنید تا مسیر افزونه را وارد کنید. سپس روی Add folder کلیک کنید و پوشه اصلی افزونه/قالب مورد نظرتان را انتخاب و اوکی کنید.
حالا به تب Source keywords بروید. در اینجا هم شما باید تگهای ترجمه php را وارد کنید یعنی برچسبهایی که قبل از هر رشته در کدها قرار میگیرند تا آن را به یک رشته قابل ترجمه تبدیل کنند. حالا با استفاده از دکمه + این تگها را اضافه میکنید
__
_e
_x
_n
esc_html__
esc_html_e
esc_html_x
esc_html_n
esc_attr__
esc_attr_e
esc_attr_x
esc_attr_n
سپس روی دکمه OK کلیک میکنید و فایل را ذخیره میکنید. پس از انجام این کار مجدد از منو روی Translation کلیک کنید و روی گزینه Update from source code کلیک کنید تا نرمافزار کلیه رشتههای قابل ترجمه را به فایل زبان اضافه کند. حالا میبایست رشتههای مورد نظرتان به فایل اضافه شده باشند. با ترجمه آنها مشکل حل میشود.
اگر با این کار هم رشتههای مورد نظر پیدا نشد، یعنی این رشتهها اصلا قابل ترجمه نیستند و نویسنده برنامه آنها را جا انداخته است. رفع این مشکل دیگر کار توسعهدهنده است. یا باید به نویسنده افزونه بگویید این مورد را اضافه کند یا از یک کدنویس بخواهید این رشتهها را در داخل کدها قابل ترجمه کند.
مرحله ۳ – رشته موجود و ترجمه شده است
در این مرحله میدانید که رشته در فایل ترجمه است، آن را ترجمه و ذخیره کردهاید، و همچنین میدانید که فایل ترجمه در حال بارگیری است چرا که ترجمههای دیگر از همان فایل نمایش داده میشوند. پس چرا این کلمات خاص هنوز به صورت انگلیسی نمایش داده میشوند؟
بررسی کنید متن یکسان است
بررسی کنید متن انگلیسی در ویرایشگر دقیقاً مشابه متن سایت شما باشد. اگر متن روی سایت شما "Welcome"
باشد ترجمه رشته "welcome"
نمایش داده نمیشود. فاصله و تفاوت های HTML را نیز بررسی کنید: سایت شما ممکن است "Next »"
روی صفحه نمایش داده شود، اما رشته واقعی می تواند "Next » "
باشد.
به خاطر داشته باشید که برخی از قالب ها از CSS برای تبدیل متن به روش های سبکی استفاده میکنند. ممکن است “NEXT” را روی صفحه ببینید، اما رشته ممکن است در واقع “Next” باشد. تنها راه برای اطمینان این است که به کد PHP قالب نگاه کنید.
اگر رشتهای که ترجمه کردهاید دقیقاً با متن منبع مطابقت ندارد، همان روشی را دنبال کنید که گویی رشته وجود ندارد .
تغییرات زمینه را بررسی کنید
فایل های PO به یک رشته اضافی اجازه می دهد تا متون انگلیسی یکسان را ابهام کند. این به شما امکان می دهد یک ورودی مانند "Help" [nav button]
و دیگری مانند "Help" [page title]
داشته باشید. بنابراین چندین نسخه از یک رشته را بررسی کنید و مطمئن شوید که همه آنها را ترجمه کرده اید.
خطاهای کد منبع را بررسی کنید
اگرچه رشته وجود دارد، اما همچنان ممکن است خطایی در کد وجود داشته باشد. ما نمیتوانیم برای مشکلات کدنویسی کمکی ارائه کنیم، اما اگر تصمیم دارید خودتان این مشکل را بررسی کنید، چند نکته در اینجا وجود دارد:
- یک رشته خاص می تواند خیلی زود ترجمه شود (قبل از بارگیری ترجمه ها).
- تابع translate آرگومان های درستی ندارد (اشتباهات تایپی حوزه متن رایج است).
- رشته دقیق ممکن است کمی تغییر کرده باشد، به این معنی که فایل ترجمه قدیمی است.
- متن میتواند توسط جاوا اسکریپت ارائه شود و نویسنده اسکریپتهای خود را بومی سازی نکرده است.
- ممکن است متن در برخی جاها ترجمه شود، اما شاید در همه جاها نه.
بررسی کنید که رشته در پایگاه داده ذخیره نشده باشد
برخی از افزونه ها و قالب ها به شما امکان میدهند رشتههای سفارشی را از طریق صفحات مدیریت یا رابط های سفارشی ساز پیکربندی کنید. در چنین مواردی رشته به عنوان گزینه سایت وردپرس در پایگاه داده شما ذخیره می شود . از آن به بعد از پایگاه داده خارج می شود و فایل ترجمه شما دیگر مورد مراجعه قرار نخواهد گرفت. تغییر زبان احتمالاً هیچ تفاوتی در نمایش این متن نخواهد داشت و Loco Translate نمی تواند کاری در مورد آن انجام دهد. برای توضیحات بیشتر به بخش ترجمه پایگاه داده مراجعه کنید.
از نویسنده محصول بپرسید که آیا رشته خاص شما از یک گزینه سایت یا طبقهبندی یا مقدار دیگری از پایگاه داده استخراج شده است.
بررسی کنید که آیا رشته از یک فایل JSON بارگیری شده است یا خیر
علاوه بر فایلهای PO/MO، وردپرس دارای یک سیستم ترجمه برای جاوا اسکریپت است که ترجمههای خود را از فایلهای JSON بارگیری میکند. (برای توضیحات تخصصی به wp_set_script_translations مراجعه کنید). Loco Translate بسته های زبان JSON را از نسخه 2.5 به بعد تولید میکند، اما بسیاری از چیزها ممکن است با این مشکل پیش بروند.
از نویسنده برنامه بپرسید که آیا رشته خاص شما از یک فایل JSON اخذ شده یا توسط جاوا اسکریپت بارگذاری شده است، و اینکه آیا Loco Translate فایل را با نام صحیح تولید کرده یا خیر.
فایلهای ترجمه ناپدید شدهاند
محتملترین دلیل ناپدید شدن فایلهای ترجمه این است که در پوشهای ذخیره شدهاند که توسط بهروزرسانیهای خودکار وردپرس قابل نوشتن است. همین امر در مورد فایل هایی که به طور مرموزی اصلاح میشوند یا به حالت قبلی باز می گردند نیز صدق میکند.
مکان های ناامن
- هنگامی که وردپرس یک قالب را به روز می کند ، هر فایل ترجمه زیر پوشه آن جایگزین میشود.
هرگز فایلهای ترجمه سفارشی خود را در این مکان ذخیره نکنید! - وقتی وردپرس یک افزونه را بهروزرسانی میکند ، هر فایل ترجمه زیر پوشه افزونه جایگزین میشود.
هرگز فایلهای ترجمه سفارشی خود را در این مکان ذخیره نکنید! - هنگامی که وردپرس زبانهای نصب شده شما را به روز میکند ، هر فایل ذخیره شده در فهرست سراسری “زبان ها” جایگزین میشود.
فایلهای ترجمه سفارشی خود را در این مکان ذخیره نکنید مگر اینکه به روزرسانی خودکار ترجمه را غیرفعال کرده باشید!
مکان های امن
Loco Translate یک دایرکتوری “ایمن” در مکان سفارشی ارائه می دهد "wp-content/languages/loco"
. فایل های ذخیره شده در اینجا در طول به روزرسانی وردپرس حذف یا اصلاح نمیشوند. اگر بسته شما می تواند فایل ها را از پوشه سفارشی loco بارگیری کند، این بهترین مکان برای ذخیره کردن آنها است.
برخی از قالب ها و افزونه ها مکانهای امن خود را نیز ارائه میدهند. اگر یک مکان امن ارائه شده است، احتمالاً باید بسته خود را با یک «مسیر دامنه» اضافی پیکربندی کنید. یکی از نمونه ها برای این کار افزونه ووکامرس است .
غیرفعال کردن به روز رسانی خودکار
اگر بهروزرسانیهای خودکار را فعال کردهاید، میتوانید بهروزرسانیهای ترجمه را با استفاده از فیلتر auto_update_translation
غیرفعال کنید .
با استفاده از این تکه کد ساده هم میتوانید بروزرسانیهای خودکار ترجمه را غیرفعال کنید تا دیگر کاری با مکان سیستم برای فایلهای ترجمه نداشته باشند و این مکان به مکانی امن برای فایلهای ترجمه شما تبدیل شود. توجه کنید این تکه کد به صورت افزونه نوشته شده و فایل زیپ آن را میتوانید دانلود و به شکل افزونه نصب کنید. اما تکه کد داخل آن را نیز میتوانید هم داخل فایل functions.php در قالب قرار دهید و هم از طریق افزونهای مثل wp code آن را به طور امن مورد استفاده قرار دهید.
مجوزهای فایل
هر بخشی از سیستم فایل که وردپرس بتواند بدون نظارت آن را تغییر دهد، به طور بالقوه مکان بدی برای ذخیره ترجمه های سفارشی است. اگر Loco Translate میتواند روی یک فایل بنویسد، وردپرس نیز میتواند و هر یک از افزونههای دیگری که نصب کردهاید نیز میتواند.
پس مطمئن شوید که به طور مرتب از پوشههایی که حاوی فایلهای ترجمه سفارشی هستند نسخه پشتیبان تهیه میکنید و از ذخیره فایلها در مکانهایی که مشخص است با فرآیندهای خودکار تغییر میکنند، خودداری کنید.
ادامه دارد…