৮: আন্তর্জাতিকীকরণ (Internationalization - i18n)
আপনার প্লাগিনটি এখন দ্রুত, সিকিউর এবং ফিচার সমৃদ্ধ। এটি হয়তো আপনার দেশের ব্যবহারকারীদের জন্য দারুণ কাজ করছে। কিন্তু ইন্টারনেটের শক্তি তার বিশ্বব্যাপী বিস্তৃতিতে। আপনার প্লাগিনটি যদি বিশ্বের বিভিন্ন দেশের মানুষ তাদের নিজেদের ভাষায় ব্যবহার করতে পারে, তাহলে এর গ্রহণযোগ্যতা এবং ব্যবহারকারীর সংখ্যা বহুগুণে বেড়ে যাবে।
এই প্রক্রিয়াটিকে বলা হয় আন্তর্জাতিকীকরণ (Internationalization বা i18n)। এটি হলো আপনার প্লাগিনের কোডকে এমনভাবে প্রস্তুত করা যাতে এটিকে সহজেই যেকোনো ভাষায় অনুবাদ করা যায়, মূল কোডে কোনো পরিবর্তন না করেই। এরপর সেই অনুবাদের কাজটি হলো স্থানীয়করণ (Localization বা l10n)।
একজন ডেভেলপার হিসেবে আপনার কাজ হলো i18n, আর অনুবাদকদের কাজ হলো l10n। এই অধ্যায়ে আমরা শিখব কীভাবে আপনার প্লাগিনের প্রতিটি টেক্সটকে অনুবাদযোগ্য করে তুলতে হয়। 🌍
৮.১ Text Domain এবং ফাইল লোডিং
আন্তর্জাতিকীকরণের প্রথম ধাপ হলো আপনার প্লাগিনের জন্য একটি অনন্য Text Domain নির্ধারণ করা। এটি মূলত একটি ইউনিক শনাক্তকারী (unique identifier) যা ওয়ার্ডপ্রেসকে বলে দেয় যে একটি নির্দিষ্ট টেক্সট অনুবাদের জন্য কোন ফাইলটি দেখতে হবে।
সেরা অনুশীলন: আপনার প্লাগিনের স্লাগ (slug) কেই Text Domain হিসেবে ব্যবহার করুন। যেমন, আমাদের awesome-events-manager প্লাগিনের জন্য Text Domain হবে awesome-events-manager।
এরপর, আপনাকে ওয়ার্ডপ্রেসকে বলতে হবে কোথায় আপনার অনুবাদের ফাইলগুলো খুঁজে পাওয়া যাবে। এই কাজটি load_plugin_textdomain() ফাংশন দিয়ে করা হয় এবং এটিকে plugins_loaded অ্যাকশন হুকের সাথে যুক্ত করতে হয়।
উদাহরণ:
আপনার মূল প্লাগিন ফাইলে নিচের কোডটি যোগ করুন।
add_action('plugins_loaded', 'aem_load_textdomain');
function aem_load_textdomain() {
load_plugin_textdomain(
'awesome-events-manager', // আপনার ইউনিক Text Domain
false, // deprecated parameter
dirname(plugin_basename(__FILE__)) . '/languages' // অনুবাদের ফাইলগুলো যেখানে থাকবে (languages ফোল্ডার)
);
}
এই কোডটি ওয়ার্ডপ্রেসকে বলে দিচ্ছে যে awesome-events-manager Text Domain-এর জন্য wp-content/plugins/your-plugin-folder/languages ফোল্ডারের ভেতর অনুবাদের ফাইলগুলো খুঁজতে হবে।
৮.২ টেক্সটকে অনুবাদযোগ্য করা (GetText Functions)
আপনার প্লাগিনের হার্ডকোডেড স্ট্রিংগুলোকে (hardcoded strings) সরাসরি echo বা রিটার্ন না করে ওয়ার্ডপ্রেসের বিশেষ GetText ফাংশনগুলোর মাধ্যমে পাস করতে হবে।
সবচেয়ে বেশি ব্যবহৃত ফাংশন:
- __(): একটি টেক্সটকে অনুবাদ করে রিটার্ন করে। যখন আপনাকে টেক্সটটি কোনো ভ্যারিয়েবলে রাখতে হবে বা অন্য কোনো ফাংশনের প্যারামিটার হিসেবে পাস করতে হবে, তখন এটি ব্যবহার করুন।
$page_title = __(‘Awesome Events Settings’, ‘awesome-events-manager’);
- _e(): একটি টেক্সটকে অনুবাদ করে সরাসরি প্রিন্ট বা ইকো করে।
_x(): যখন একটি শব্দের একাধিক অর্থ থাকতে পারে, তখন কনটেক্সট (context) দেওয়ার জন্য এটি ব্যবহৃত হয়। যেমন, “Post” শব্দটি বিশেষ্য (a blog post) বা ক্রিয়া (to post a comment) উভয়ই হতে পারে।
$button_text = _x('Book', 'verb, as in "Book a ticket"', 'awesome-events-manager');
$post_type_label = _x('Book', 'noun, as in a reading book', 'awesome-events-manager');
_n(): সংখ্যাবাচক শব্দের একবচন (singular) ও বহুবচন (plural) রূপের জন্য ব্যবহৃত হয়।
printf(
_n(
'%s Event Found', // একবচনের জন্য
'%s Events Found', // বহুবচনের জন্য
$event_count, // সংখ্যা
'awesome-events-manager'
),
number_format_i18n($event_count)
);
গুরুত্বপূর্ণ: sprintf/printf ব্যবহার করুন
কখনোই ভ্যারিয়েবলকে ট্রান্সলেশন ফাংশনের স্ট্রিংয়ের সাথে জোড়া (concatenate) দেবেন না। এতে অনুবাদকরা বাক্যের গঠন পরিবর্তন করতে পারেন না।
ভুল পদ্ধতি:
echo \_\_('Event created by', 'awesome-events-manager') . $author\_name;
সঠিক পদ্ধতি:
printf(
/* translators: %s is the author name */
esc_html__('Event created by %s', 'awesome-events-manager'),
esc_html($author_name)
);
এখানে /* translators: … */ কমেন্টটি অনুবাদকদের জন্য একটি নোট, যা তাদের বুঝতে সাহায্য করে যে %s দিয়ে কী বোঝানো হচ্ছে।
৮.৩ .pot ফাইল তৈরি করা
এখন আপনার প্লাগিনের সমস্ত স্ট্রিং অনুবাদযোগ্য। এবার আপনাকে একটি .pot (Portable Object Template) ফাইল তৈরি করতে হবে। এই ফাইলটি আপনার প্লাগিনের সমস্ত অনুবাদযোগ্য স্ট্রিংয়ের একটি তালিকা। অনুবাদকরা এই .pot ফাইলটি ব্যবহার করে নির্দিষ্ট ভাষার জন্য .po (Portable Object) ফাইল তৈরি করেন।
.pot ফাইল তৈরির সেরা টুল হলো WP-CLI। আপনার প্লাগিন ফোল্ডারে টার্মিনাল খুলে নিচের কমান্ডটি চালান:
wp i18n make-pot . languages/awesome-events-manager.pot
এই কমান্ডটি আপনার প্লাগিনের সমস্ত কোড স্ক্যান করে languages ফোল্ডারের ভেতর awesome-events-manager.pot নামে একটি ফাইল তৈরি করবে।
অনুবাদের প্রক্রিয়া:
-
ডেভেলপার: .pot ফাইল তৈরি করে।
-
অনুবাদক: .pot ফাইলটি Poedit-এর মতো কোনো সফটওয়্যার দিয়ে খুলে নিজের ভাষায় অনুবাদ করে একটি .po ফাইল হিসেবে সেভ করে (যেমন: bn_BD.po বাংলা ভাষার জন্য)।
-
সফটওয়্যার: .po ফাইল সেভ করার সময় স্বয়ংক্রিয়ভাবে একটি .mo (Machine Object) ফাইল তৈরি হয়। এটি একটি বাইনারি ফাইল যা ওয়ার্ডপ্রেস দ্রুত পড়ার জন্য ব্যবহার করে।
-
.po এবং .mo ফাইল দুটি আপনার প্লাগিনের languages ফোল্ডারে রাখতে হবে।
সারসংক্ষেপ
এই অধ্যায়ে আমরা আমাদের প্লাগিনকে বিশ্বব্যাপী ব্যবহারকারীদের জন্য প্রস্তুত করেছি। আন্তর্জাতিকীকরণ একটি পেশাদার প্লাগিনের অপরিহার্য অংশ, যা আপনার ব্যবহারকারীর ভিত্তি ব্যাপকভাবে বৃদ্ধি করতে পারে। আমরা শিখেছি:
-
Text Domain কী এবং load_plugin_textdomain দিয়ে কীভাবে অনুবাদের ফাইল লোড করতে হয়।
-
__(), _e(), _x(), এবং _n() এর মতো GetText ফাংশন ব্যবহার করে স্ট্রিংগুলোকে অনুবাদযোগ্য করার নিয়ম।
-
.pot ফাইল কীভাবে তৈরি করতে হয়, যা অনুবাদকদের জন্য মূল টেমপ্লেট হিসেবে কাজ করে।
-
.po এবং .mo ফাইল কীভাবে অনুবাদের প্রক্রিয়া সম্পন্ন করে।
এই জ্ঞান প্রয়োগ করে, আপনি এমন প্লাগিন তৈরি করতে পারবেন যা ভাষার সীমাবদ্ধতা ছাড়িয়ে বিশ্বের যেকোনো প্রান্তে পৌঁছে যেতে পারে।
পরবর্তী অধ্যায়ে…
আমাদের প্লাগিনটি এখন একটি পূর্ণাঙ্গ, সিকিউর, দ্রুত এবং আন্তর্জাতিক মানের অ্যাপ্লিকেশন। এবার আমরা একজন পেশাদার ডেভেলপারের মতো আমাদের কাজের প্রক্রিয়াকে আরও উন্নত করব। পরবর্তী অধ্যায়ে আমরা আধুনিক ডেভেলপমেন্ট ওয়ার্কফ্লো নিয়ে আলোচনা করব, যার মধ্যে থাকবে WP-CLI, Git দিয়ে ভার্সন কন্ট্রোল এবং WordPress.org-এ প্লাগিন পাবলিশ করার প্রক্রিয়া।