زبان و ترجمه
چگونگی کارکرد ترجمه در افزونهی WidgetCore؛ فایلهای po و mo همراه بسته، اولویت مسیر سراسری، ساخت ترجمهی زبان جدید و پشتیبانی راستبهچپ.
افزونه با دامنهی متنی widgetcore ساخته شده و ترجمههای فارسی و انگلیسی همراه بسته عرضه میشوند. هیچ متن رابط کاربری بهصورت سختکد به زبان دیگر چاپ نمیشود.
فایلهای زبان
| فایل | زبان | مسیر در بسته |
|---|---|---|
widgetcore-fa_IR.po / .mo | فارسی | languages/ |
widgetcore-en_US.po / .mo | انگلیسی | languages/ |
widgetcore.pot | الگو (بدون ترجمه) | languages/ |
الگوی .pot همهی رشتههای افزونه را با یادداشت مترجم (مانند %s: عبارت جستجو) دارد؛ برای ساخت ترجمهی یک زبان جدید از همین فایل شروع کنید.
ترتیب بارگذاری
ترجمهها در هوک init با اولویت 1 بارگذاری میشوند:
function wgcr_load_translations() {
$domain = 'widgetcore';
$locale = determine_locale();
$global = WP_LANG_DIR . '/plugins/' . $domain . '-' . $locale . '.mo';
if ( is_readable( $global ) ) {
load_textdomain( $domain, $global, $locale );
}
load_textdomain( $domain, WGCR_DIR . 'languages/' . $domain . '-' . $locale . '.mo', $locale );
}
| اولویت | مسیر | نکته |
|---|---|---|
| 1 | wp-content/languages/plugins/widgetcore-<locale>.mo | فقط اگر فایل خوانا باشد |
| 2 | widgetcore/languages/widgetcore-<locale>.mo | همیشه |
چون load_textdomain دوم با همان دامنه اجرا میشود، ترجمهی داخل بسته بر فایل سراسری اولویت دارد. اگر میخواهید ترجمهی شخصیسازیشدهی شما برنده شود، آن را با دامنه و الگوی وردپرس در مسیر سراسری بگذارید و سپس فایل داخل بسته را با همان نام جایگزین کنید — یا سادهتر، افزونه را از طریق هوک فیلتر کنید:
add_filter( 'load_textdomain_mofile', function ( $mofile, $domain ) {
if ( 'widgetcore' === $domain ) {
$custom = WP_LANG_DIR . '/plugins/widgetcore-custom-' . determine_locale() . '.mo';
if ( is_readable( $custom ) ) {
return $custom;
}
}
return $mofile;
}, 10, 2 );
متنهایی که ترجمه میشوند
| دسته | نمونه |
|---|---|
| عنوان و واژههای کلیدی ویجتها | «سوالات متداول - FAQ»، «جستجوی زنده» |
| برچسب کنترلها | «حالت نمایش نتایج»، «آیتم در هر برگه» |
| مقدارهای انتخابی | «حالت لیست»، «حالت نمایش در صفحه» |
| توضیح کنترلها | راهنمای کوتاه زیر هر فیلد |
| متنهای پیشفرض خروجی | «جستجو در مقالات…»، «نمایش همه نتایج»، «مشاهده مقالات بیشتر»، «نوشتهی بیشتری موجود نیست.» |
| پیامهای جاوااسکریپت | «تعداد نتایج: %d»، «خطا در دریافت نتایج. دوباره تلاش کنید.»، «صفحه %1$d از %2$d» |
| پیامهای پیشخوان | نتیجهی «بررسی بهروزرسانی» |
متنهای جاوااسکریپت از طریق آبجکت window.WGCRSearch.i18n به اسکریپت داده میشوند؛ یعنی در زمان اجرا در سمت سرور ترجمه شدهاند و نیازی به فایل زبان جداگانه در مرورگر نیست.
ساخت ترجمهی زبان جدید
فایل الگو را کپی کنید
widgetcore.potرا بهwidgetcore-<locale>.poتغییر نام دهید (مثلاًwidgetcore-ar_AR.po).ترجمه کنید
با Poedit یا هر ابزار gettext دیگر، رشتهها را ترجمه و فایل
.moرا بسازید.در مسیر سراسری بگذارید
هر دو فایل را در
wp-content/languages/plugins/قرار دهید.زبان سایت را تنظیم کنید
در «تنظیمات → عمومی»، زبان سایت را انتخاب کنید.
بررسی کنید
برچسب کنترلها در ویرایشگر المنتور باید به زبان جدید باشند.
راستبهچپ و چپبهراست
- استایل ویجتها با خواص منطقی نوشته شده است (
inset-inline-start،padding-inline،margin-inline)؛ پس با تغییرdirصفحه، چیدمان بهدرستی برعکس میشود. - جهت متن نتایج از زبان نوشته پیروی میکند؛ برای محتوای ترکیبی (فارسی و انگلیسی) نیازی به تنظیم دستی نیست.
- در حالت «صفحه»، شبکهی ستونها از جهت سند پیروی میکند؛ پس اولین ستون در RTL سمت راست است.
ترجمهی محتوای خودتان
افزونه فقط متنهای رابط را ترجمه میکند. محتوای نتایج (عنوان، خلاصه، تاریخ) از خود نوشتهها میآید:
| مورد | منبع |
|---|---|
| عنوان و خلاصه | نوشتهی پیداشده در همان زبان |
| تاریخ | قالب تاریخ تنظیمشده در وردپرس |
| متن «نمایش همه» | کنترل ویجت (ترجمهشده) یا مقدار دلخواه شما |
| متن راهنمای فیلد | کنترل ویجت یا مقدار پیشفرض ترجمهشده |
برای سایتهای چندزبانه، در هر زبان یک ویجت جدا با «منبع» مناسب آن زبان بگذارید.