با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
با جلسه ای دیگر از سری جلسات دوره جامع آموزش ساخت قالب وردپرس در خدمت شما هستیم.
در این جلسه قصد داریم به آموزش دو زبانه یا چند زبانه کردن قالب وردپرس (Internationalization) بپردازیم.
ممکن است شما بخواهید قالبی طراحی کنید که مخاطبان یا بازدید کنندگان آن از ملیت ها و قومیت های مختلفی تشکیل شده باشند.
بنابراین پشتیبانی از زبان های مورد نظر در قالب در این موارد ضروری به نظر میرسد.
برای اینکه متون (text) به کار رفته در قالب بتوانند به زبان های مختلف ترجمه شوند، باید از آن ها به صورت آرگومان یا پارامتر از طریق توابع localization استفاده کرد.
اگر این متون یا رشته ها (string) به صورت hardcode استفاده شوند، چندزبانه کردن قالب ممکن نیست.
به رشته هایی hardcode گفته میشوند که از آن ها به شکل مستقیم یا بین ” ” استفاده شود.
برای مثال کد زیر که حاوی رشته hardcode است، نمیتواند ترجمه شود.
1 | <h1>Settings Page</h1> |
اما با ارسال همین رشته به عنوان آرگومان یک تابع localization، میتوان آن را ترجمه کرد.
1 | <h1><?php _e( 'Settings Page' ); ?></h1> |
در زبان php از کتابخانه های gettext برای ترجمه و چند زبانه کردن استفاده میشود.
اما در وردپرس باید از توابع localization به جای توابع بومی php استفاده کنیم.
دامنه متن (Text Domain) دومین پارامتری است که به توابع localization ارسال میشوند.
دامنه متن یک شناسه منحصر به فرد است که وردپرس از طریق آن بین تمام ترجمه های بارگذاری شده، تمایز قائل میشود.
دامنه متن تنها نیاز است تا برای قالب ها و پلاگین ها تعریف شود.
دامنه های متن تنها مجاز به استفاده از – و حروف کوچک انگلیسی هستند.
به عنوان مثال اگر نام قالب My Theme که در فایل style.css قرار دارد یا در یک پوشه به نام my-theme فراخوانی شده است، دامنه متن باید به شکل my-theme باشد.
دامنه متن میتواند در سه جای مختلف مورد استفاده قرار گیرد:
در این کاربرد، دامنه متن در هدر فایل style.css استفاده میشود.
این کار باعث میشود تا داده های متا (metadata) مانند توضیحات قالب و … حتی در زمانی که قالب فعال نیست، ترجمه شوند.
1 2 3 4 5 | /* * Theme Name: My Theme * Author: Theme Author * Text Domain: my-theme */ |
اگر ترجمه ها در دایرکتوری دیگری غیر از دایرکتوری languages قرار داشته باشند، باید از گزینه ای به نام Domain Path استفاده کنیم.
در این حالت وردپرس از Domain Path برای پیدا کردن فایل های ترجمه استفاده میکند.
1 2 3 4 5 6 | /* * Theme Name: My Theme * Author: Theme Author * Text Domain: my-theme * Domain Path: /languages */ |
برای اینکه ترجمه ها به درستی کار کنند، باید دامنه متن را به عنوان آرگومان به توابع localization اضافه کنیم.
مثال ۱ :
1 | __( 'Post' ) |
تابع فوق باید تبدیل شود به تابع پایین:
1 | __( 'Post', 'my-theme' ) |
مثال ۲ :
1 | _n( 'One post', '%s posts', $count ) |
تابع فوق باید تبدیل به تابع پایین شود:
1 | _n( 'One post', '%s posts', $count, 'my-theme' ) |
توجه داشته باشید که دامنه متن را حتما باید به صورت hardcode و نه متغیر استفاده کرد.
در وردپرس، فایل های ترجمه با پسوند های po. و mo. استفاده میشوند.
این فایل ها با استفاده از توابع ()load_theme_textdoamin و یا ()load_child_theme_textdomain بارگذاری میشوند.
اگر فایل MO خود را در پوشه language قالب وردپرس قرار میدهید، نام دامنه متن را به همراه یک – بعد از آن، قبل از نام اصلی فایل بیاورید.
مثال:
1 2 3 4 | function my_theme_load_theme_textdomain() { load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' ); } add_action( 'after_setup_theme', 'my_theme_load_theme_textdomain' ); |
جلسه آموزش چند زبانه کردن قالب وردپرس نیز به پایان رسید.
در جلسه بعد به آموزش بومی سازی در وردپرس (Localization) خواهیم پرداخت.