ترجمه قالب وردپرس با Loco Translate: کدام محل ذخیره بعد از آپدیت قالب میماند؟
- سمانه جعفری
- مطالعه در 8 دقیقه
- آبان 10, 1405
- بدون دیدگاه
-
افزونه امنیتی مخفی سازی وردپرس | WP Ghost
۶۵۰,۰۰۰ تومان
-
افزونه سئو وردپرس | WPMU DEV SmartCrawl Pro
۶۲۰,۰۰۰ تومان
-
افزونه بهینهسازی و افزایش سرعت مرغ مگسخوار | WPMU DEV Hummingbird Pro
۵۸۰,۰۰۰ تومان
-
افزونه محافظ امنیتی پیشرفته وردپرس کادنس سکیوریتی | Kadence Security Pro
۵۵۰,۰۰۰ تومان
روز ۹ آبان ۱۴۰۵ روی یک وردپرس ۷٫۱٫۴ فارسی، قالب سالینت نسخه ۱۸٫۴٫۴ را از زیپ فروشگاه نصب کردیم و متنهایی از آن را که بازدیدکننده میبیند با افزونه رایگان Loco Translate (لوکو) نسخه ۲٫۸٫۹ فارسی کردیم. بار اول ترجمه را در محلی ذخیره کردیم که لوکو «نویسنده» مینامد، یعنی پوشه lang خود قالب. بعد همان زیپ را از صفحه «افزودن پوستهها» با دکمه «بارگذاری پوسته» دوباره فرستادیم و «بارگذاری شده را جایگزین فعلی نمایید» را زدیم؛ آپدیت دستی قالب همین مسیر است. سه پرونده فارسی پاک شد و متنهای قالب دوباره انگلیسی شد. همین آزمایش با محلهای «سفارشی» و «سیستم» ترجمه را نگه داشت. پس ترجمه را در «سفارشی» ذخیره کنید و لوکو را فعال نگه دارید؛ «سیستم» برای وقتی است که بخواهید لوکو را بعداً غیرفعال کنید و وردپرس برای قالب بسته فارسی نگیرد، مثل سالینت.
قدمهای ترجمه قالب وردپرس با لوکو در بخش «شش قدمی که روی سالینت جواب داد» آمده است. صفحههایی که سنجیدیم صفحه اصلی وبلاگ، یک نوشته، نتیجه جستجو و صفحه ۴۰۴ بودند؛ دموی سالینت و ووکامرس نصب نبود.
محل «نویسنده» با آپدیت قالب پاک شد و محل «سفارشی» بدون لوکو خوانده نشد
لوکو هنگام ساختن زبان تازه سه محل پیشنهاد میکند و مسیر هر پرونده را کنارش مینویسد:

هر محل را جداگانه آزمودیم: ترجمه را در آن ذخیره کردیم (به «سیستم» با برگه «نقل مکان» لوکو منتقلش کردیم)، زیپ قالب را روی خودش بارگذاری کردیم و یک بار هم لوکو را غیرفعال کردیم. هر بار صفحهها را بدون ورود به حساب کاربری باز کردیم و دیدیم متنهای قالب فارسی است یا نه:
| محل در لوکو | پوشه پرونده | بعد از جایگزینی زیپ قالب | با لوکو غیرفعال |
|---|---|---|---|
| سفارشی | wp-content/languages/loco/themes | ماند | خوانده نشد؛ متنهای قالب انگلیسی شد |
| سیستم | wp-content/languages/themes | ماند | فارسی ماند |
| نویسنده | پوشه lang قالب | پاک شد | خوانده شد، اگر در «سیستم» پروندهای نباشد |
ستون آخر ردیف «نویسنده» را با پروندهای سنجیدیم که دستی در پوشه قالب گذاشتیم، نه با پروندهای که لوکو آنجا ساخته بود. دکمه جایگزینی پوشه قبلی قالب را کامل پاک میکند و نسخه تازه را جایش میگذارد؛ همین را برای افزونهها در آپدیت دستی افزونه با زیپ دیده بودیم. الگوی ترجمه (salient.pot) که لوکو در همان پوشه lang ساخته بود هم با آن رفت.
فرق «سفارشی» و «سیستم» در دو چیز است. پرونده «سفارشی» را خود لوکو به وردپرس معرفی میکند و راهنمای لوکو میگوید افزونه باید فعال باشد تا این محل کار کند؛ در آزمایش قالب وودمارت هم پرونده این پوشه بدون لوکو خوانده نشده بود. پرونده «سیستم» بدون لوکو هم خوانده شد، اما در پوشهای است که وردپرس بستههای ترجمه را در آن مینویسد، و راهنمای دیگری از لوکو میگوید پروندههای پوشه کلی languages با آپدیت زبانهای نصبشده جایگزین میشوند. در همان صفحه جایگزینی، وردپرس برای سه افزونه، از جمله Loco Translate، و سه قالب پیشفرض خودش بسته فارسی گرفت؛ برای سالینت بستهای نیامد. لوکو هم روی پروندههای «سیستم» و «نویسنده» هشدار داد که ممکن است با آپدیت وردپرس عوض یا پاک شوند و روی «سفارشی» این هشدار را نشان نداد.
اگر ترجمه را قبلاً در پوشه قالب ساختهاید، پیش از آپدیت بعدی پرونده را در لوکو باز کنید و از برگه «نقل مکان» به «سفارشی» ببرید. ما همین برگه را برای بردن پرونده از «سفارشی» به «سیستم» به کار بردیم و پروندهها با بکاپشان جابهجا شدند.
لوکو با تنظیم پیشفرض ۹ پرونده بزرگ سالینت را نخواند
صفحه سالینت در لوکو نوشت که هیچ ترجمهای برای آن پیدا نکرده است. در پوشه lang قالب پرونده nectar_salient_strings.pot هست که الگوی ۲٬۳۷۳ رشتهای خود سازنده است، اما لوکو آن را به قالب وصل نکرد و خواست اول «ساخت الگو» را بزنیم. صفحه ساخت الگو نوشت ۹ پرونده را کنار میگذارد:

الگو با ۲۷۲ رشته ساخته شد. علتش تنظیم «صرف نظر کردن از فایلهای منبع بزرگتر از» در تنظیمات لوکو است که مقدار پیشفرضش 100K است. یکی از ۹ پرونده کنارگذاشته options-config.php با حجم ۳۴۹٫۹ کیلوبایت بود که متنهای پنل تنظیمات سالینت در آن است. مقدار را 1M کردیم و در ویرایشگر الگو «همگامسازی» را زدیم: الگو ۱٬۶۹۲ رشته شد و هر ۱٬۴۲۰ رشتهای که اضافه شد در همان پرونده بود.
این رشتههای اضافه همه از پرونده تنظیمات قالباند. در چهار صفحهای که سنجیدیم ۳۱ متن مختلف از سالینت در متن و برچسبهای HTML صفحه بود، از «Skip to main content» تا دکمه «Submit Comment» فرم دیدگاه، و هر ۳۱ متن در همان الگوی ۲۷۲ رشتهای هم بود. پس برای این صفحهها تنظیم پیشفرض کافی بود. الگوی خود سازنده هم هر ۳۱ متن را داشت، ولی ۲۵ رشته از رشتههایی که لوکو در کد نسخه ۱۸٫۴٫۴ پیدا کرد در آن نبود؛ پس با الگوی خود لوکو کار کردیم.
ترجمه قالب وردپرس با لوکو: شش قدمی که روی سالینت جواب داد
- اگر پنل تنظیمات قالب را هم فارسی میخواهید، در «Loco Translate > تنظیمات» مقدار «صرف نظر کردن از فایلهای منبع بزرگتر از» را از
100Kبه1Mببرید و ذخیره کنید. بزرگترین پروندهای که لوکو در سالینت اسکن کرد ۸۲۲٫۵ کیلوبایت بود. - در «Loco Translate > پوستهها» قالب را باز کنید و «ساخت الگو» را بزنید. اگر الگو از قبل هست، آن را باز کنید و «همگامسازی» و «ذخیره» را بزنید.
- اگر ترجمه قبلی در پوشه قالب دارید، بهجای «زبان جدید» آن را در لوکو باز کنید، از برگه «نقل مکان» به «سفارشی» ببرید و به قدم ۵ بروید. وگرنه «زبان جدید» را بزنید و از فهرست «Persian» را انتخاب کنید. گزینه «فارسی (افغانستان)» زبان دیگری است.
- محل «سفارشی» را نگه دارید؛ این گزینه از اول انتخاب شده است و فقط تا وقتی لوکو فعال است خوانده میشود.
- در ویرایشگر، متن انگلیسی را در کادر «فیلتر ترجمهها» پیدا کنید، ترجمه را در کادر پایین بنویسید و «ذخیره» را بزنید.
- نتیجه را در پنجره ناشناس مرورگر ببینید. اگر افزونه کش دارید، اول کش را پاک کنید.
ما ۳۵ رشته را ترجمه کردیم. هر ۲۳ متن سالینت در صفحه نوشته، ۱۷ متن صفحه جستجو و ۱۲ متن صفحه اصلی فارسی شد و در صفحه ۴۰۴ فقط خود عدد ۴۰۴ ترجمه نشد. پنل تنظیمات سالینت انگلیسی ماند، جز رشتههایی از همین ۳۵ تا، مثل «منوی کشویی». بعد از هر آپدیت قالب، الگو دوباره پاک میشود؛ برای همگامسازی بعدی «ساخت الگو» را تکرار کنید.
در آخرین اجرا، با قالب مادر و ترجمه سالینت در «سفارشی»، زیپ قالب را یک بار دیگر روی خودش بارگذاری کردیم. پروندههای «سفارشی» با همان اندازه و ساعت سر جایشان بودند و صفحه نوشته هر ۲۳ متن سالینت را فارسی نشان داد.
دکمههای اشتراکگذاری و عنوان ابزارکها با پرونده قالب فارسی نشدند
در صفحه نوشته چهار عبارت انگلیسی ماند: Share، Share this، Pin و Pin this. اینها از افزونه Salient Social هستند که سالینت همراه خودش میآورد، و هر افزونه با نام خودش ترجمه میشود، نه با نام قالب. در «Loco Translate > افزونهها» برای Salient Social هم «زبان جدید» و «سفارشی» را زدیم؛ الگویش ۴۳ رشته داشت و با ترجمه همان چهار رشته، هر چهار فارسی شد و بعد از آخرین جایگزینی زیپ قالب هم فارسی ماند. برای اینکه بفهمید متنی از قالب است یا از افزونه، آن را در ویرایشگر الگوی سالینت در لوکو جستجو کنید: «Share this» در الگوی سالینت نبود و در الگوی Salient Social بود.
دسته دوم اصلاً رشته ترجمه نیست. عنوان ابزارکهای «Recent Posts» و «Recent Comments» انگلیسی ماند، با اینکه بسته فارسی وردپرس ترجمه هر دو را دارد: وردپرس آزمایشی ما اول انگلیسی نصب شده بود و این عنوانها همان موقع بهصورت متن در دیتابیس ذخیره شده بودند. نام دستهبندی «Uncategorized» هم همینطور. چنین متنی را از خود ابزارک یا دستهبندی عوض کنید.
پرونده ترجمه هست ولی متن عوض نمیشود: سه حالتی که ساختیم
اولین حالت، دو پرونده در دو محل است. وردپرس ۷٫۱٫۴ برای قالب، اول پوشه wp-content/languages/themes را نگاه میکند و فقط وقتی آنجا پروندهای برای همان قالب و زبان نباشد سراغ پوشه خود قالب میرود؛ این ترتیب در کلاس WP_Textdomain_Registry است. با لوکو غیرفعال، یک پرونده با ترجمه متفاوت برای «Back to top» در پوشه قالب گذاشتیم، در حالی که پرونده «سیستم» هم بود، و صفحه ترجمه «سیستم» را نشان داد. پرونده «سیستم» را برداشتیم و ترجمه پوشه قالب ظاهر شد.
حالت دوم را با لوکو فعال ساختیم. وقتی «سفارشی» و «سیستم» هر دو بودند، دو رشتهای که در «سفارشی» ترجمه دیگری داشتند از آنجا آمدند و رشتهای که آنجا خالی بود از «سیستم». با لوکو غیرفعال فقط «سیستم» خوانده شد. پس برای هر قالب فقط یک محل نگه دارید و پروندهای را که در محل دیگری جا مانده پاک کنید.
حالت سوم به نوع پرونده مربوط است. لوکو با هر ذخیره PO، که متن ترجمه است، MO و پروندهای با پسوند l10n.php مینویسد و از PO قبلی بکاپ نگه میدارد. وردپرس از نسخه ۶٫۵ اول پرونده l10n.php را میخواند و اگر بود، سراغ MO نمیرود. در محل «سیستم» یک ترجمه را بیرون از لوکو عوض کردیم، MO تازه ساختیم و جای MO قبلی گذاشتیم، ولی l10n.php قبلی را برنداشتیم. صفحه همان ترجمه قدیمی را نشان داد تا وقتی l10n.php را پاک کردیم. اگر PO و MO را با برنامه دیگری میسازید و با FTP بالا میفرستید، l10n.php کنارشان را پاک کنید.
قالب فرزند rtl.css سالینت را از صفحه حذف کرد
وقتی زبان سایت راستبهچپ است، خود وردپرس پرونده rtl.css قالب را به صفحه اضافه میکند. سالینت rtl.css خودش را دارد و با قالب مادر این پرونده در صفحه بود: در عرض ۳۹۰ پیکسل لوگو سمت راست و دکمههای منو و جستجو سمت چپ. دستور ساخت قالب فرزند در وبلاگ ما فقط style.css قالب مادر را بار میکند و حرفی از rtl.css نمیزند. یک قالب فرزند ساده فعال کردیم که فقط style.css و خط Template: salient داشت. پیوند rtl.css از صفحه رفت، لوگو به سمت چپ رفت و دکمهها به راست:

علت در کد وردپرس است: تابع get_locale_stylesheet_uri پرونده rtl.css را فقط در پوشه قالب فعال میجوید، و با قالب فرزند آن پوشه، پوشه قالب فرزند است. اگر functions.php قالب فرزندتان از قبل rtl.css قالب مادر را بار میکند، این مشکل را ندارید؛ نمونه کدی که سازنده سالینت در یکی از مقالههای پشتیبانیاش برای قالب فرزند گذاشته، این پرونده را با نام salient-rtl بار میکند. وگرنه این کد را در functions.php قالب فرزند بگذارید، همان کاری که ما کردیم:
<?php
add_action( 'wp_enqueue_scripts', function () {
if ( is_rtl() ) {
wp_enqueue_style( 'parent-rtl', get_template_directory_uri() . '/rtl.css', array(), wp_get_theme( get_template() )->get( 'Version' ) );
}
}, 100 );
پرونده rtl.css قالب مادر به صفحه برگشت و لوگو و دکمهها همان جایی نشستند که با قالب مادر بودند. اگر نمیخواهید خودتان functions.php را عوض کنید، این کار را از فرم درخواست پشتیبانی به ما بسپارید. اگر functions.php قالب فرزندتان از قبل کد دارد، فقط بخش add_action را به آن اضافه کنید.
پرسشهای متداول
چرا ترجمه قالب بعد از آپدیت پاک میشود؟
چون ترجمه در پوشه خود قالب ذخیره شده است. در آزمایش ما با قالب سالینت، دکمه «بارگذاری شده را جایگزین فعلی نمایید» پوشه قبلی قالب را پاک کرد و پروندههای فارسی محل «نویسنده» لوکو هم با آن رفتند. پروندههای محل «سفارشی» و «سیستم» ماندند. ترجمهای را که در پوشه قالب دارید، پیش از آپدیت بعدی با برگه «نقل مکان» لوکو به «سفارشی» ببرید.
بعد از ترجمه با لوکو میشود افزونه را غیرفعال کرد؟
اگر ترجمه در محل «سفارشی» است، نه. پروندههای پوشه wp-content/languages/loco را خود لوکو به وردپرس معرفی میکند و با لوکو غیرفعال، متنهای قالب در صفحههای آزمایش ما انگلیسی شد.
ترجمه را عوض کردهام ولی متن قبلی نمایش داده میشود؛ چرا؟
این را با سه حالت ساختیم: پروندهای در wp-content/languages/themes که وردپرس بهجای پوشه خود قالب خواند، پروندهای در محل دیگر که ترجمههای خالی را پر کرد، و پرونده l10n.php قدیمی که وردپرس از نسخه ۶٫۵ پیش از MO میخواند. برای هر قالب یک محل نگه دارید و اگر PO و MO را بیرون از لوکو ساختهاید، l10n.php کنارشان را پاک کنید.
چرا بعضی متنها بعد از ترجمه قالب انگلیسی میماند؟
یا از افزونه دیگری هستند، مثل دکمههای اشتراکگذاری سالینت که از افزونه Salient Social میآیند و جداگانه در «Loco Translate > افزونهها» ترجمه میشوند، یا متنی هستند که در دیتابیس ذخیره شده، مثل عنوان ابزارکها، که از خود ابزارک ویرایش میشوند.
قالب ترجمه شد ولی راستچین نیست؛ چرا؟
اگر قالب فرزند فعال است، وردپرس پرونده rtl.css را فقط در پوشه قالب فرزند میجوید. با یک قالب فرزند ساده برای سالینت، rtl.css قالب مادر از صفحه حذف شد و لوگوی موبایل به چپ رفت. چند خط کد در functions.php قالب فرزند آن را برگرداند.
- سمانه جعفری
- مطالعه در 8 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 8 دقیقه
- 0
- سمانه جعفری
- مطالعه در 10 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 10 دقیقه
- 0
- سمانه جعفری
- مطالعه در 10 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 10 دقیقه
- 0
- سمانه جعفری
- مطالعه در 6 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 6 دقیقه
- 0
- سمانه جعفری
- مطالعه در 10 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 10 دقیقه
- 0
- سمانه جعفری
- مطالعه در 9 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 9 دقیقه
- 0
- سمانه جعفری
- مطالعه در 9 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 9 دقیقه
- 0
- سمانه جعفری
- مطالعه در 9 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 9 دقیقه
- 0
