WidgetCoreمستندات WidgetCore

زبان و ترجمه

چگونگی کارکرد ترجمه در افزونه‌ی WidgetCore؛ فایل‌های po و mo همراه بسته، اولویت مسیر سراسری، ساخت ترجمه‌ی زبان جدید و پشتیبانی راست‌به‌چپ.

افزونه با دامنه‌ی متنی widgetcore ساخته شده و ترجمه‌های فارسی و انگلیسی همراه بسته عرضه می‌شوند. هیچ متن رابط کاربری به‌صورت سخت‌کد به زبان دیگر چاپ نمی‌شود.

فایل‌های زبان

فایلزبانمسیر در بسته
widgetcore-fa_IR.po / .moفارسیlanguages/
widgetcore-en_US.po / .moانگلیسیlanguages/
widgetcore.potالگو (بدون ترجمه)languages/

الگوی .pot همه‌ی رشته‌های افزونه را با یادداشت مترجم (مانند %s: عبارت جستجو) دارد؛ برای ساخت ترجمه‌ی یک زبان جدید از همین فایل شروع کنید.

ترتیب بارگذاری

ترجمه‌ها در هوک init با اولویت 1 بارگذاری می‌شوند:

php
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 );
}
اولویتمسیرنکته
1wp-content/languages/plugins/widgetcore-<locale>.moفقط اگر فایل خوانا باشد
2widgetcore/languages/widgetcore-<locale>.moهمیشه

چون load_textdomain دوم با همان دامنه اجرا می‌شود، ترجمه‌ی داخل بسته بر فایل سراسری اولویت دارد. اگر می‌خواهید ترجمه‌ی شخصی‌سازی‌شده‌ی شما برنده شود، آن را با دامنه و الگوی وردپرس در مسیر سراسری بگذارید و سپس فایل داخل بسته را با همان نام جایگزین کنید — یا ساده‌تر، افزونه را از طریق هوک فیلتر کنید:

php
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 به اسکریپت داده می‌شوند؛ یعنی در زمان اجرا در سمت سرور ترجمه شده‌اند و نیازی به فایل زبان جداگانه در مرورگر نیست.

ساخت ترجمه‌ی زبان جدید

  1. فایل الگو را کپی کنید

    widgetcore.pot را به widgetcore-<locale>.po تغییر نام دهید (مثلاً widgetcore-ar_AR.po).

  2. ترجمه کنید

    با Poedit یا هر ابزار gettext دیگر، رشته‌ها را ترجمه و فایل .mo را بسازید.

  3. در مسیر سراسری بگذارید

    هر دو فایل را در wp-content/languages/plugins/ قرار دهید.

  4. زبان سایت را تنظیم کنید

    در «تنظیمات → عمومی»، زبان سایت را انتخاب کنید.

  5. بررسی کنید

    برچسب کنترل‌ها در ویرایشگر المنتور باید به زبان جدید باشند.

راست‌به‌چپ و چپ‌به‌راست

  • استایل ویجت‌ها با خواص منطقی نوشته شده است (inset-inline-start، padding-inline، margin-inline)؛ پس با تغییر dir صفحه، چیدمان به‌درستی برعکس می‌شود.
  • جهت متن نتایج از زبان نوشته پیروی می‌کند؛ برای محتوای ترکیبی (فارسی و انگلیسی) نیازی به تنظیم دستی نیست.
  • در حالت «صفحه»، شبکه‌ی ستون‌ها از جهت سند پیروی می‌کند؛ پس اولین ستون در RTL سمت راست است.

ترجمه‌ی محتوای خودتان

افزونه فقط متن‌های رابط را ترجمه می‌کند. محتوای نتایج (عنوان، خلاصه، تاریخ) از خود نوشته‌ها می‌آید:

موردمنبع
عنوان و خلاصهنوشته‌ی پیدا‌شده در همان زبان
تاریخقالب تاریخ تنظیم‌شده در وردپرس
متن «نمایش همه»کنترل ویجت (ترجمه‌شده) یا مقدار دلخواه شما
متن راهنمای فیلدکنترل ویجت یا مقدار پیش‌فرض ترجمه‌شده

برای سایت‌های چندزبانه، در هر زبان یک ویجت جدا با «منبع» مناسب آن زبان بگذارید.