جنگو چیست؟ و دلیل محبوبیتش چیه
جنگو (Django) یک فریمورک وب سطحبالا بر پایهٔ پایتون است که بسیاری از قابلیتهای حیاتی توسعهٔ وب مثل احراز هویت، ORM، مدیریت سشن، امنیت، قالبها و حتی پنل مدیریت آماده را بهصورت پیشفرض فراهم میکند.
محبوبیت جنگو فقط بهخاطر سرعت شروع کار نیست؛ بلکه ترکیب ابزارهای یکپارچه، جامعهٔ فعال و مستندات کامل باعث شده انتخابی مطمئن برای پروژههای کوچک تا بزرگ و سازمانی باشد.
معماری داشبورد آن مبتنی بر الگوی MTV است و تمرکزش بر توسعهٔ سریع، نگهداری آسان و امنیت بالاست.
چرا محبوبیت جنگو سالها پایدار مانده است ؟
- امنیت پیشفرض قوی؛ محافظت در برابر حملات رایج مانند CSRF، XSS و SQL Injection بهصورت درونساخت فراهم است.
- اکوسیستم غنی جنگو؛ انعطاف بالای جنگو در اتصال به سرویسها و فناوریهای مختلف، پشتیبانی از پروتکلهای گوناگون، و همخوانی با معماریهای مدرن باعث شده انتخابی ایدهآل برای پروژههای کوچک تا سامانههای بزرگ سازمانی باشد.
- توسعهٔ سریع؛ وجود ORM، سیستم سیستم احراز هویت جنگو، فرمها و پنل ادمین باعث میشود با کمترین کدنویسی به خروجی قابل عرضه برسید.
- مستندات و جامعهٔ قوی؛ مستندات رسمی جنگو یکی از بهترین نمونهها در بین فریمورکهاست و همین باعث جذب هزاران توسعه دهنده تازهکار و حرفهای شده.
- انعطاف در پایگاهداده؛ پشتیبانی از PostgreSQL، MySQL، SQLite و Oracle بدون دردسرهایی مانند زبان sql و کوئری زدن به پایگاه داده.
- پنل مدیریت آماده؛ Django Admin یک محیط قدرتمند و آمادهبهکار برای انجام عملیات CRUD و مدیریت دادههاست که بهصورت پیشفرض تجربهای ساده، سریع و کاربرپسند را فراهم میکند.
نتیجه این مزیتها آن است که میتوانید محصولی امن و قابلاعتماد را در زمان کوتاهتری به دست مشتری برسانید. در ادامهٔ مقاله، از همین قابلیتهای داخلی برای فارسیسازی داشبورد بهره میبریم تا تجربهٔ کاربری بهتری برای مخاطبان فارسیزبان ایجاد کنیم.
چرا فارسیسازی داشبورد جنگو مهم است؟
کاربران نهایی که قرار است از این داشبورد استفاده کنند (مانند نویسندگان محتوا، مدیران محصول، پشتیبانها و...) لزوماً تسلط کاملی به زبان انگلیسی ندارند.
از دیدگاه دیگر پنل ادمین، حیاتیترین قسمت هر پروژه است. کوچکترین اشتباه در آن میتواند منجر به حذف دادهها یا تغییرات ناخواسته شود. برای جلوگیری از این خطاهای پرهزینه، کاربر ادمین باید به طور کامل بر محیط کار تسلط داشته باشد و هیچ ابهامی در معنی منوها، دکمهها و پیغامها وجود نداشته باشد.
استفاده از رابط کاربری به زبان فارسی مزایای زیادی دارد. این مزایا شامل افزایش رضایت کاربران، بهبود تجربه کاربری و کاهش اشتباه است.
📌 از دید کلی ارائه یک پنل مدیریت به زبانی غیر از فارسی، میتواند این تصور ناخواسته را ایجاد کند که توسعهدهنده به نیازهای بومی کاربران بیتوجه بوده یا تجربه کافی در طراحی ندارد.
آموزش فارسی کردن پنل ادمین جنگو(Django)
خبر خوب این است که برای فارسیسازی پنل ادمین جنگو، اصلاً نیاز به اختراع دوباره چرخ نیست! فریمورک قدرتمند جنگو به صورت داخلی از قابلیت بینالمللیسازی پشتیبانی میکند.
جنگو دست شما را کاملاً باز گذاشته است؛ شما میتوانید در جنگو همه بخشهای پنل ادمین را به طور کامل فارسی کنید یا اینکه فقط چند بخش خاص را که برای کاربرانتان حیاتی است، ترجمه نمایید.
ما برای درک بهتر این فرآیند، فارسیسازی را به ۳ قسمت اصلی تقسیمبندی کردهایم که در ادامه هر یک را به طور کامل مورد بررسی قرار میدهیم :
فارسیسازی متنهای ثابت و داخلی جنگو
در فایل "settings.py"، مقدار "LANGUAGE_CODE" را از "en-us" به "fa" تغییر دهید.
همچنین مطمئن شوید که مقدار "USE_I18N" روی "True" قرار دارد.
#settings.pyLANGUAGE_CODE = 'fa'USE_I18N = True
📌 حتما django.middleware.locale.LocaleMiddleware در لیست MIDDLEWARE ها در تنظیمات قرار داشته باشد.
فارسیسازی نام ستون های مدل تعریف شده
این بخش به فارسی کردن نمایش ستونهای جدول دادهها در پنل ادمین مربوط میشود.
برای ترجمه نام فیلدها و نمایش آن در پنل ادمین، باید از ماژول gettext_lazy استفاده کنید.
سپس نام های ترجمه شده رو به عنوان verbose_name به مدل میدهیم.
#models.pyfrom django.db import modelsfrom django.utils.translation import gettext_lazy as _from django.core.validators import RegexValidatorphone_regex = RegexValidator(regex=r'^09d{9}$',message="شماره موبایل باید با 09 شروع شود و 11 رقم باشد.")class Customers(models.Model):phoneNumber = models.CharField(_("شماره موبایل"), max_length=11, validators=[phone_regex])name = models.CharField(_("نام مشتری"), max_length=155)status = models.CharField(_("وضعیت"), max_length=55)
📌 اگرچه میتوانید به جای استفاده از gettext_lazy، مستقیماً مقادیر فارسی را در فیلدها قرار دهید، اما این روش پایدار و مقیاسپذیر نیست. مشکل اصلی زمانی آشکار میشود که بخواهید در آینده از چندزبانه بودن پروژه پشتیبانی کنید یا پنل را به زبانی مثل انگلیسی برگردانید.
فارسی کردن نام مدل
اگرچه تاکنون بخشهای اصلی پنل مدیریت ترجمه شدهاند، اما ممکن است نام مدلها همچنان به زبان انگلیسی باقی مانده باشند. برای فارسی کردن نمایش نام مدل و نام تکی آن، باید ویژگیهای verbose_name و verbose_name_plural را در کلاس Meta مدل خود تعریف کنید.
#models.pyfrom django.db import modelsfrom django.utils.translation import gettext_lazy as _from django.core.validators import RegexValidatorphone_regex = RegexValidator(regex=r'^09d{9}$',message="شماره موبایل باید با 09 شروع شود و 11 رقم باشد.")class Customers(models.Model):phoneNumber = models.CharField(_("شماره موبایل"), max_length=11, validators=[phone_regex])name = models.CharField(_("نام مشتری"), max_length=155)status = models.CharField(_("وضعیت"), max_length=55)class Meta:verbose_name = _("مشتری")verbose_name_plural = _("مشتریها")
در صورتی که تمام مراحل قبل را به درستی انجام داده باشید، در نهایت یک پنل مدیریت کاملاً فارسیشده مشابه تصویر زیر خواهید داشت.

اضافه کردن فایل های static سفارشی
گاهی نیاز دارید چیزی فراتر از پیشفرضها بسازید: یک تم اختصاصی برای رابط کاربری، اسکریپتی برای یک رفتار تعاملی خاص، یا ست تصاویر و فونتها برای هویت برند.
جنگو دست شما را باز گذاشته تا هرطور بخواهید ظاهر و رفتار پروژهتان را تغییر دهید. در ادامه، قدمبهقدم یاد میدهیم چطور فایلهای استاتیک سفارشی خود را اضافه و مدیریت کنید تا پروژهتان دقیقاً همان شکلی شود که میخواهید.
📌 لطفاً متنهای این بخش را با دقت بخوانید و به آدرسها و مسیرها دقیق توجه کنید؛ یک خطای کوچک در نامگذاری یا مسیر میتواند باعث شود فایلهای استاتیک بارگذاری نشوند و کدتان کار نکند.
آمادهسازی اسکلت پروژه
در پروژه ما فولدر templates, static داخل اپ posts قرار دارد. اگر مسیر یا محل قرارگیری پوشه در پروژه شما متفاوت است، لطفاً همان آدرس جدید را جایگزین کنید
🔹 در فایل settings.py
TEMPLATES = [{"BACKEND": "django.template.backends.django.DjangoTemplates","DIRS": [BASE_DIR / "posts/templates"], # <--- آدرس فولدر Templates در پروژه شما"APP_DIRS": True,"OPTIONS": {"context_processors": ["django.template.context_processors.debug","django.template.context_processors.request","django.contrib.auth.context_processors.auth","django.contrib.messages.context_processors.messages",],},},]
STATIC_URL = '/static/'STATICFILES_DIRS = [BASE_DIR / "posts/static"]
🔹 در فایل urls.py
from django.conf import settingsfrom django.conf.urls.static import staticurlpatterns = [# ... بقیهی url ها ...]if settings.DEBUG:urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
🔹 نحوه قرارگیری فایل ها در پروژه
posts/templates/admin/base_site.htmlstatic/css/style.cssjs/myscript.js
پیادهسازی برای کل ادمین
در پوشه templates یک فولدر با نام دقیق admin بسازید و داخل آن یک فایل HTML با نام دقیق base_site.html قرار دهید. به حروف کوچک/بزرگ و املای نامها دقت کنید.
{% extends "admin/base.html" %}{% load static %}{% block title %}تایتل جدید پنل ادمین جنگو{% endblock %}{# --- اضافه کردن فایل css --- #}{% block extrastyle %}{{ block.super }}<link rel="stylesheet" href="{% static 'css/style.css' %}">{% endblock %}{# --- اضافه کردن فایل js در صورت نیاز --- #}{% block extrahead %}{{ block.super }}<script src="{% static 'js/myscript.js' %}"></script>{% endblock %}
جمعبندی فارسی کردن داشبورد جنگو
یک برنامهنویس حرفهای باید توانایی بومیسازی و تغییر زبان را در انواع فریمورکهای مورد استفاده خود را داشته باشد
در این مقاله، به طور کامل و از تمام جنبههای ممکن، فرآیند فارسیسازی پنل ادمین جنگو را با هم مرور کردیم. از مقدمات گرفته تا اجرای گامبهگام دستورات.
حالا نوبت شماست، الان شما این توانایی را دارید که با صرف کمی زمان، حرفهایترین و کاربرپسندترین پنل مدیریت ممکن را در اختیار کاربران خود قرار دهید.
در این آموزش سعی کردیم از تمام جهات موضوع فارسیسازی جنگو رو پوشش بدیم، اگر بخشی از آموزش برایتان مبهم بود، پرسش خود را به صورت تیکت باما در میان بگذارید.
سوالات متداول فارسیسازی جنگو
بخش سوالات متداول برای این طراحی شده تا به رایجترین پرسشها درباره فارسیسازی پنل ادمین جنگو پاسخ بدهد. مطالعه این قسمت میتواند جلوی بسیاری از خطاها را بگیرد و روند کارتان را سریعتر و مطمئنتر کند، پس با دقت ادامه دهید.
آیا میتوان فونت فارسی هم روی پنل اعمال کرد؟
بله. کافی است در قالب سفارشی خود، فونت دلخواه را از طریق CSS تعریف کنید.
آیا نیاز به نصب بسته یا ماژول جداگانه برای فارسی کردن دارم؟
خیر، خود جنگو از زبان فارسی پشتیبانی میکند. اما در صورت نیاز میتوانید از بستههای جانبی برای بهبود ظاهر و تکمیل ترجمهها استفاده کنید.
چرا بعضی قسمتها بعد از فارسی کردن هنوز انگلیسی میمونه؟
این بخشها معمولاً متنهایی هستن که از مدلها یا متدهای خودت میاد. باید برای فیلدها و مدلها از verbose_name و verbose_name_plural همراه با gettext_lazy استفاده کنی.
چطور اسم خود مدلهام رو فارسی کنم؟
در کلاس Meta داخل مدل از verbose_name و verbose_name_plural استفاده کن. اینطوری اسم مدل هم توی پنل ادمین فارسی میشه.
اگر ترجمه پیشفرض جنگو برای بعضی واژهها مناسب نبود، باید چی کار کنم؟
میتونی فایل ترجمهی فارسی (.po) رو که با دستور makemessages ساخته میشه ویرایش کنی و ترجمههای دلخواهت رو بنویسی، بعدش دوباره compilemessages بزنی.
آیا تغییرات روی پنل ادمین روی زبان دیتابیس هم اثر میذاره؟
نه، تغییر زبان فقط روی رابط کاربری پنل ادمین هست و هیچ تغییری در دادهها یا زبان ذخیرهسازی دیتابیس ایجاد نمیکنه.