ایجاد یک کامپوننت چندزبانه در جوملا ۵ با پشتیبانی کامل از فارسی و انگلیسی (حتی در پنل مدیریت)

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

در این مقاله، گام‌به‌گام نحوه‌ی ساخت یک کامپوننت چندزبانه‌ی کامل را آموزش می‌دهم که:

  • محتوا را به‌صورت جداگانه برای هر زبان ذخیره می‌کند
  • رابط کاربری عمومی و پنل مدیریت را به‌صورت خودکار ترجمه می‌کند
  • سوییچ زبان هوشمند با حفظ URL و ساختار سئو دارد
  • با چالش‌های RTL/LTR به‌خوبی کنار می‌آید

گام ۱: فعال‌سازی چندزبانه در جوملا

قبل از هر چیز، باید سیستم چندزبانه‌ی جوملا را فعال کنید:

  1. از Extensions > Language(s) > Install Languages، زبان‌های fa-IR و en-GB را نصب کنید.
  2. در System > Manage > Plugins، پلاگین System – Language Filter را فعال کنید.
  3. در تنظیمات همان پلاگین، گزینه‌ی Remove URL Language Code را NO قرار دهید (برای حفظ ساختار سئویی).
  4. در Multilingual Associations، گزینه‌ی Enable Associations را فعال کنید.

گام ۲: ساختار جدول پایگاه‌داده برای محتوای چندزبانه

دو رویکرد وجود دارد. من پیشنهاد می‌کنم از رویکرد ستون‌محور استفاده کنید (ساده‌تر و سریع‌تر برای جستجو):

CREATE TABLE `#__mycomp_articles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title_fa` varchar(255) NOT NULL,
  `title_en` varchar(255) NOT NULL,
  `introtext_fa` text,
  `introtext_en` text,
  `fulltext_fa` mediumtext,
  `fulltext_en` mediumtext,
  `published` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

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

گام ۳: سیستم زبان داخلی جوملا (Language Strings)

تمام متون رابط کاربری (نه محتوا!) باید با سیستم زبان جوملا مدیریت شوند. برای این کار:

در پوشه‌ی کامپوننت خود، فایل‌های زیر را ایجاد کنید:

com_mycomp/
├── language/
│   ├── fa-IR/
│   │   └── fa-IR.com_mycomp.ini
│   └── en-GB/
│       └── en-GB.com_mycomp.ini

محتوای fa-IR.com_mycomp.ini:

COM_MYCOMP="کامپوننت من"
COM_MYCOMP_ARTICLES="مقالات"
COM_MYCOMP_TITLE="عنوان مقاله"
COM_MYCOMP_PUBLISHED="منتشر شده"

و در en-GB.com_mycomp.ini:

COM_MYCOMP="My Component"
COM_MYCOMP_ARTICLES="Articles"
COM_MYCOMP_TITLE="Article Title"
COM_MYCOMP_PUBLISHED="Published"

سپس در کد PHP، همیشه از این توابع استفاده کنید:

<?php echo JText::_('COM_MYCOMP_ARTICLES'); ?>

گام ۴: تشخیص زبان فعلی و بارگذاری محتوای مربوطه

در مدل کامپوننت، زبان فعلی را تشخیص دهید و محتوای مناسب را بارگذاری کنید:

<?php
namespace MycompModel;

use JoomlaCMSFactory;
use JoomlaCMSMVCModelListModel;

class ArticlesModel extends ListModel
{
    public function getListQuery()
    {
        $lang = Factory::getLanguage()->getTag(); // مثلاً 'fa-IR' یا 'en-GB'
        $langPrefix = substr($lang, 0, 2); // 'fa' یا 'en'

        $db = $this->getDbo();
        $query = $db->getQuery(true)
            ->select($db->quoteName("title_{$langPrefix}", 'title'))
            ->select($db->quoteName("introtext_{$langPrefix}", 'introtext'))
            ->from($db->quoteName('#__mycomp_articles'))
            ->where($db->quoteName('published') . ' = 1');

        return $query;
    }
}

گام ۵: سوییچ زبان هوشمند در فرانت‌اند

یک ماژول ساده برای سوییچ زبان بسازید یا از ماژول داخلی Language Switcher استفاده کنید. اما برای کامپوننت‌های سفارشی، لینک‌ها را به‌صورت دستی ایجاد کنید:

<?php
$activeLang = Factory::getLanguage()->getTag();
$otherLang = ($activeLang === 'fa-IR') ? 'en-GB' : 'fa-IR';
$otherLangCode = substr($otherLang, 0, 2);
$url = JUri::current() . '?lang=' . $otherLangCode;
?>
<a href="<?php echo $url; ?>" class="lang-switch">
  <?php echo ($activeLang === 'fa-IR') ? 'EN' : 'فارسی'; ?>
</a>

⚠️ نکته: برای حفظ سئو، همیشه از تگ‌های <link rel="alternate" hreflang="..." /> در <head> استفاده کنید.

گام ۶: مدیریت چالش‌های RTL/LTR

وقتی کاربر از فارسی به انگلیسی سوییچ می‌کند، جهت صفحه باید از RTL به LTR تغییر کند. این کار به‌صورت خودکار توسط جوملا انجام می‌شود، اما در کامپوننت‌های سفارشی:

  • در فایل‌های ویو، از کلاس direction برای تعیین جهت استفاده نکنید؛ بلکه از کلاس‌های خنثی مثل text-start در Bootstrap یا justify-content: flex-start در CSS استفاده کنید.
  • در CSS، به‌جای left/right از inline-start/inline-end استفاده کنید (در صورت پشتیبانی مرورگر).
  • برای فرم‌ها، مطمئن شوید لیبل‌ها نسبت به زبان جابه‌جا می‌شوند.

گام ۷: پشتیبانی از ترجمه در پنل مدیریت

فرم ویرایش مقاله در پنل ادمین باید هر دو زبان را در یک صفحه نمایش دهد:

<!-- در فایل admin/models/forms/article.xml -->
<fieldset name="fa_fields" label="فارسی">
  <field name="title_fa" type="text" label="COM_MYCOMP_TITLE" />
  <field name="introtext_fa" type="editor" />
</fieldset>

<fieldset name="en_fields" label="English">
  <field name="title_en" type="text" label="COM_MYCOMP_TITLE" />
  <field name="introtext_en" type="editor" />
</fieldset>

این روش، به مدیر سایت اجازه می‌دهد هر دو نسخه را همزمان ویرایش کند — بدون نیاز به سوییچ زبان در پنل مدیریت.

تجربه‌ی شخصی: سایت فرهنگی دو‌زبانه برای معرفی خط ثلث

در یکی از پروژه‌های شخصی، سایتی برای معرفی خط ثلث ایرانی به مخاطبان جهانی ساختم. با استفاده از همین روش، تمام آموزش‌ها و نمونه‌کارها هم به فارسی و هم به انگلیسی در دسترس بودند. حتی دکمه‌های «ادامه مطلب» و «بازگشت» در هر زبان، با فونت و جهت مناسب نمایش داده می‌شدند. این سایت امروز یکی از منابع معتبر برای علاقه‌مندان جهانی به خوشنویسی اسلامی است.

جمع‌بندی

چندزبانه‌سازی در جوملا فقط افزودن زبان نیست؛ یک فرآیند فرهنگی-فنی است که نیازمند توجه به جزئیات زیادی است — از تشخیص زبان گرفته تا مدیریت جهت‌نمایی و ساختار URL. اما با رعایت اصولی که در این مقاله گفته شد، می‌توانید سایتی بسازید که هم برای مخاطب ایرانی گرامی دارد و هم برای جهانیان در دسترس است.

چرا که هنر و دانش ایرانی، مرز نمی‌شناسد — و نباید وب‌سایت‌های ما هم مرز ببندند.

نوشته‌شده توسط روح‌الله بلوردی — خوشنویس، طراح وب و توسعه‌دهنده‌ی جوملا
وب‌سایت شخصی: balvardi.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *