بررسی و رفع مشکل ترجمه و زبان افزونه ها در وردپرس ۶.۷

بازدید: 80 بازدید
بررسی مشکل ترجمه و زبان افزونه ها در وردپرس ۶.۷

انتشار نسخه 6.7 وردپرس، با تغییرات اساسی در مدیریت فایل‌های ترجمه افزونه‌ها و قالب‌ها، گامی بزرگ به سوی افزایش کارایی هسته وردپرس برداشته است. این به‌روزرسانی جدید، نه تنها سرعت بارگذاری سایت را بهبود می‌بخشد، بلکه به توسعه‌دهندگان امکان می‌دهد تا تجربه کاربری بهتری را برای کاربران چندزبانه فراهم کنند.

وردپرس ۶.۷ و تغییرات در سیستم ترجمه: راهنمای کامل

1- Text domain چیست و چه کاربردی دارد؟

متن‌دامنه (Text Domain) در واقع یک شناسه منحصر به فرد است که به وردپرس می‌گوید فایل‌های ترجمه مربوط به یک افزونه یا قالب خاص کجا قرار دارند. به زبان ساده‌تر، این مثل یک راهنما است که به وردپرس کمک می‌کند تا کلمات و عبارات را به زبان دلخواه شما ترجمه کند.

2- فرآیند ترجمه در وردپرس چگونه انجام می‌شود؟

  1. بارگذاری فایل‌های ترجمه: وردپرس از توابع خاصی مانند load_plugin_textdomain و load_theme_textdomain برای بارگذاری فایل‌های ترجمه استفاده می‌کند. این فایل‌ها حاوی ترجمه‌های تمامی کلمات و عبارات موجود در افزونه یا قالب هستند.
  2. زمان‌بندی مناسب: اما با انتشار نسخه 6.7 وردپرس برای اینکه این توابع به درستی کار کنند، باید در زمان مناسبی از چرخه اجرای وردپرس فراخوانی شوند. به همین دلیل، معمولا از هوک‌های اکشن مانند init استفاده می‌شود. این هوک‌ها اطمینان حاصل می‌کنند که فایل‌های ترجمه قبل از نمایش هرگونه محتوا در وبسایت بارگذاری شوند.

در وردپرس نسخه 6.7 ، به جای استفاده از توابع قدیمی، حالا یک تابع جدید و قدرتمندتر به نام _load_textdomain_just_in_time مسئولیت بارگذاری به موقع این فایل‌ها را بر عهده دارد.

3. تغییرات جدید در وردپرس ۶.۷

در نسخه ۶.۷ وردپرس، روشی که توابع مربوط به بارگذاری فایل‌های ترجمه عمل می‌کنند، دستخوش تغییرات اساسی شده است. به طور مشخص، دو تغییر مهم صورت گرفته است:

  1. تابع جدید خصوصی: وظیفه بارگذاری مستقیم فایل‌های ترجمه از توابع load_plugin_textdomain و load_theme_textdomain به یک تابع خصوصی جدید به نام _load_textdomain_just_in_time منتقل شده است.
  2. حذف فیلترهای قدیمی: فیلترهایی که قبلاً برای سفارشی‌سازی محلی‌سازی استفاده می‌شدند (یعنی theme_locale و plugin_locale) از هسته وردپرس حذف شده‌اند. این به معنای محدود شدن امکانات توسعه‌دهندگان برای اعمال تغییرات در این بخش است.

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

4- مشکل در برخی افزونه‌ها

برخی از افزونه‌ها برای بارگذاری فایل‌های ترجمه خود، از هوک plugins_loaded استفاده می‌کنند. این بدان معناست که آن‌ها منتظر می‌شوند تا همه افزونه‌ها بارگذاری شوند و سپس اقدام به بارگذاری فایل‌های ترجمه خود می‌نمایند.

علت مشکل:

در نسخه‌های قبلی وردپرس، این روش معمولاً بدون مشکل عمل می‌کرد. اما در نسخه ۶.۷، به دلیل بهینه‌سازی‌های انجام شده در سیستم بارگذاری ترجمه‌ها، توابع مربوط به ترجمه در زمان اجرای هوک plugins_loaded هنوز به طور کامل آماده نیستند. در نتیجه، فراخوانی توابع بارگذاری ترجمه در این مرحله منجر به بارگذاری نشدن صحیح فایل‌های ترجمه می‌شود.

دلیل فنی:

علت اصلی این مشکل، تغییر در زمان‌بندی بارگذاری فایل‌های ترجمه است. در نسخه ۶.۷، این فرآیند به صورت “just-in-time” انجام می‌شود، به این معنی که فایل‌های ترجمه تنها در زمانی که به آن‌ها نیاز باشد، بارگذاری می‌شوند. این امر باعث افزایش کارایی سیستم می‌شود، اما در عین حال، سازگاری برخی افزونه‌ها را با نسخه جدید به خطر می‌اندازد.

5- راه‌حل: هوک مناسب برای بارگذاری ترجمه‌ها

برای اینکه افزونه شما بتواند به درستی متن‌های ترجمه شده را نمایش دهد، بهتر است از یک روش استاندارد استفاده کنید. یکی از بهترین روش‌ها این است که فرایند بارگذاری فایل‌های ترجمه را به هوک init وردپرس متصل کنیم. این کار باعث می‌شود که وردپرس قبل از انجام هر کاری، فایل‌های ترجمه را بارگذاری کند و مطمئن شویم که همه چیز آماده است.

به عنوان مثال، برای بارگذاری فایل‌های ترجمه یک افزونه به نام “افزونه من”، می‌توانیم از کد زیر استفاده کنیم:

توضیح بخش های مختلف کد بالا:

  • add_action('init', function() { ... }): این خط کد می‌گوید که یک تابع را به هوک init وردپرس اضافه کن. هر کدی که داخل این تابع قرار بگیرد، قبل از اینکه وردپرس کار اصلی خودش را شروع کند، اجرا می‌شود.
  • load_plugin_textdomain('my-plugin', false, dirname(plugin_basename(__FILE__)) . '/languages/'): این تابع فایل‌های ترجمه افزونه ما را بارگذاری می‌کند. قسمت‌های مختلف این تابع به ترتیب مشخص می‌کنند که:
    • my-plugin: نامی است که برای شناسایی افزونه ما استفاده می‌شود.
    • false: این پارامتر معمولاً به صورت false تنظیم می‌شود.
    • dirname(plugin_basename(__FILE__)) . '/languages/': این قسمت مسیر پوشه‌ای را مشخص می‌کند که فایل‌های ترجمه افزونه در آن قرار دارند.

چرا هوک init؟

  • اطمینان از بارگذاری به موقع: با استفاده از هوک init، مطمئن می‌شویم که فایل‌های ترجمه قبل از هر چیز دیگری بارگذاری می‌شوند و در تمام قسمت‌های افزونه قابل استفاده هستند.
  • استاندارد بودن: این روش یک روش استاندارد و توصیه شده برای بارگذاری فایل‌های ترجمه در وردپرس است.

نکات قابل توجه:

  • مسیر فایل‌های ترجمه: مطمئن شوید که مسیر مشخص شده در تابع load_plugin_textdomain به درستی به پوشه‌ای که فایل‌های ترجمه شما در آن قرار دارند، اشاره می‌کند.
  • نام افزونه: نامی که برای افزونه خود انتخاب می‌کنید باید با نامی که در سایر قسمت‌های کد افزونه استفاده می‌کنید، یکسان باشد.

با استفاده از این روش ساده، می‌توانید به راحتی فایل‌های ترجمه افزونه خود را بارگذاری کنید و اطمینان حاصل کنید که کاربران شما می‌توانند از افزونه شما به زبان دلخواه خود استفاده کنند.

6- مشاهده جزئیات فنی تغییرات

برای علاقمندان به جزئیات فنی، تغییرات اعمال‌شده در کدهای هسته وردپرس به صورت دقیق در این لینک قابل مشاهده است:

https://github.com/WordPress/wordpress-develop/commit/d42d95856e9ae3f9e2ed0aad176c066d7f8e3229

7- بررسی ترتیب اجرای هوک‌ها

اگر می‌خواهید بدانید کدهای شما دقیقا در چه زمانی از وردپرس اجرا می‌شوند، به مستندات رسمی سر بزنید. این مستندات مثل یک نقشه راه کامل برای هوک‌های وردپرس هستند و به شما کمک می‌کنند بهترین جا برای قرار دادن کدتون را پیدا کنید:

ادامه مطلب