چندزبانه کردن سایت ساختهشده با Django — از پایه تا راهاندازی
فرض کنید یک سایت با Django ساختهاید و حالا میخواهید کاربران بتوانند زبان سایت را انتخاب کنند. مثلاً فارسی، انگلیسی، یا حتی زبانهای دیگر. خوشبختانه جنگو سیستم چندزبانهسازی (i18n) داخلی بسیار خوبی دارد که کار را ساده میکند.
1. فعالکردن قابلیت چندزبانهسازی در Django
برای شروع باید مطمئن شوید که در فایل settings.py این گزینهها فعال هستند:
USE_I18N = True # فعالکردن ترجمه داخلی
USE_L10N = True # فعالکردن فرمتهای محلی (مثل تاریخ و اعداد)
سپس زبان پیشفرض سایت و لیست زبانها را مشخص کنید:
LANGUAGE_CODE = 'fa' # زبان پیشفرض (اینجا فارسی)
LANGUAGES = [
('fa', 'Persian'),
('en', 'English'),
]
2. اضافه کردن Middleware تغییر زبان
در فایل settings.py باید LocaleMiddleware را در لیست MIDDLEWARE فعال کنید و مطمئن شوید که بعد از SessionMiddleware و قبل از CommonMiddleware قرار گرفته است:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', # اینجا اضافه کنید
'django.middleware.common.CommonMiddleware',
...
]
3. ترجمه متنها در قالبها (Templates)
جنگو به کمک تگ {% trans %} متنها را قابل ترجمه میکند.
مثلاً:
<h1>{% trans "سلام دنیا!" %}</h1>
برای متنهای طولانیتر میتوانید از {% blocktrans %} استفاده کنید:
{% blocktrans %}این متن طولانیتر است و باید ترجمه شود.{% endblocktrans %}
4. ترجمه متنها در کد پایتون
در فایلهای .py باید این را وارد کنید:
from django.utils.translation import gettext as _
def home(request):
message = _("خوش آمدید")
return render(request, "index.html", {"msg": message})
5. ساخت فایلهای ترجمه
برای تولید فایل ترجمه، دستور زیر را اجرا کنید:
django-admin makemessages -l en
این دستور فایلهایی با پسوند .po در مسیر locale/en/LC_MESSAGES/django.po ایجاد میکند که شامل متنهای قابل ترجمه است.
6. ویرایش فایلهای .po
فایل .po را باز کنید و ترجمهها را وارد کنید:
msgid "سلام دنیا!"
msgstr "Hello World!"
7. کامپایل ترجمهها
بعد از ویرایش، باید ترجمهها را کامپایل کنید:
django-admin compilemessages
8. تغییر زبان در سایت
میتوانید با ارسال درخواست POST به /i18n/setlang/ زبان را تغییر دهید.
مثلاً در قالب HTML:
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<select name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% for lang, name in LANGUAGES %}
<option value="{{ lang }}" {% if lang == LANGUAGE_CODE %}selected{% endif %}>{{ name }}</option>
{% endfor %}
</select>
<button type="submit">تغییر زبان</button>
</form>
9. نکات مهم برای پروژههای چندزبانه
همیشه متنها را با gettext یا {% trans %} مشخص کنید تا بعداً به راحتی قابل ترجمه باشند.
مسیر locale را در .gitignore نگذارید، چون ترجمهها هم بخشی از پروژه هستند.
برای زبانهای راستبهچپ (مثل فارسی و عربی) استایل CSS را هماهنگ کنید.
نتیجهگیری
با همین چند مرحله ساده میتوانید سایت Django خود را به راحتی چندزبانه کنید. مزیت بزرگش این است که همهچیز داخلی و استاندارد است، نیازی به نصب پلاگین اضافه ندارید و فقط کافی است متنها را علامتگذاری و ترجمه کنید.