از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چگونه برنامه جنگو خود را بومی سازی کنیم
سرفصلهای مطلب
آیا تا به حال به این فکر کرده اید که چگونه وب سایت ها می توانند محتوای خود را به زبان های مختلف و کاملاً متناسب با فرهنگ ها و مناطق مختلف ارائه دهند؟
خوب، این جادو، محلیسازی نامیده میشود، و یک تغییر دهنده بازی برای توسعه وب است – به خصوص زمانی که از جنگو، یک چارچوب فوقالعاده همه کاره پایتون استفاده میکنید.
این فقط در مورد ترجمه متن نیست – بلکه در مورد تنظیم برنامه شما برای تناسب با فرهنگ های مختلف، با آداب و رسوم و ترجیحات منحصر به فرد آنها است.
بنابراین، امروز میخواهم شما را در بومیسازی یک برنامه جنگو راهنمایی کنم. بیایید شیرجه بزنیم!
پیش نیازمنتس
اول از همه، مطمئن شوید که دارید پایتون بر روی دستگاه شما نصب شده است. برای این آموزش، من فرض میکنم که شما از قبل دارای پایه هستید دانش جنگو – ما به سرعت در برخی از قسمت ها حرکت خواهیم کرد.
اگر هنوز با اصول جنگو آشنا نیستید، ممکن است بخواهید ابتدا این موضوع را بررسی کنید. نگران نباشید، Hyperskill، جایی که من به عنوان یک متخصص در آن کار می کنم، با برخی از آهنگ های یادگیری عالی به شما کمک کرده است.
در اینجا چیزی است که ما پوشش خواهیم داد:
- نحوه نصب جنگو
- چگونه یک پروژه و برنامه جنگو جدید ایجاد کنیم
- نحوه ایجاد یک سوئیچر محلی
- چگونه اپلیکیشن خود را بومی سازی کنیم
- نحوه علامت گذاری رشته ها در قالب ها با استفاده از
{% trans %}
- کثرت سازی
- نتیجه
نحوه نصب جنگو
مرحله 1: یک محیط مجازی ایجاد کنید
معمولا ما برای پروژه های جنگو یک محیط مجازی ایجاد می کنیم. این کمک می کند تا پروژه را از سایر پروژه های پایتون در دستگاه خود جدا کنید و وابستگی های پروژه را منحصر به فرد نگه دارید. را اجرا کنید python -m venv myenv
دستور ایجاد یک محیط مجازی
مرحله 2: محیط مجازی را فعال کنید
اجرا کن source myenv/bin/activate
در Unix/macOS یا myenv\\Scripts\\activate
در ویندوز برای فعال کردن محیط مجازی.
مرحله 3: جنگو را نصب کنید
با فعال بودن محیط مجازی، جنگو را با استفاده از پیپ مدیریت بسته پایتون با اجرا نصب کنید pip install django
فرمان
مرحله 4: نصب جنگو را تست کنید
پس از نصب، با اجرا بررسی کنید که جنگو به درستی نصب شده است django-admin --version
. باید شماره نسخه را بدون هیچ خطایی خروجی بدهد.
django-admin اسکریپت خط فرمانی است که با جنگو ارائه می شود. وظایف اداری مانند شروع یک پروژه جدید و مدیریت انتقال پایگاه داده را انجام می دهد.
چگونه یک پروژه و برنامه جنگو جدید ایجاد کنیم
مرحله 1: یک پروژه جنگو ایجاد کنید
بیایید یک پروژه جدید به نام localization_project با استفاده از django-admin startproject localization_project
فرمان
این دستور یک دایرکتوری جدید به نام ایجاد می کند localization_project
، که شامل تمام فایل های لازم برای پروژه جنگو ما است، همانطور که در زیر نشان داده شده است.
برای شروع کار بر روی این پروژه جدید، با اجرای دستور به پوشه ایجاد شده جدید بروید cd localization_project
.
مرحله 2: یک برنامه جنگو ایجاد کنید
برای نشان دادن نحوه ترجمه محتوا به یک برنامه با مقداری محتوا نیاز دارید. من استفاده خواهم کرد python manage.py startapp homepage
دستور ایجاد یک برنامه ساده
باز هم، manager.py دیگری است ابزار خط فرمان که به عنوان یک لفاف نازک در اطراف django-admin عمل می کند و به شما امکان می دهد به طرق مختلف با پروژه جنگو خود تعامل داشته باشید.
پس از اجرای آن، باید پوشه دیگری به نام صفحه اصلی با بسیاری از فایل های پایتون دریافت کنید.
مرحله 3: نمای برنامه خود را تعریف کنید
باز کن views.py
را در فهرست برنامه های صفحه اصلی قرار دهید و یک نمای برای صفحه اصلی تعریف کنید. برای فروش سادگی، صفحه اصلی ما یک تبریک، یک عدد به هزاران و تاریخ فعلی را نمایش می دهد.
from django.shortcuts import render
from django.utils import timezone
def home_view(request):
context = {
'greeting': "Welcome to our Localization Project!",
'large_number': 12345.67,
'current_date': timezone.now()
}
return render(request, 'home.html', context)
مرحله 4: URL ها را پیکربندی کنید
اول، در localization_project
دایرکتوری را ویرایش کنید urls.py
تا نشانیهای اینترنتی برنامه صفحه اصلی را درج کند.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('homepage.urls')),
]
سپس، یک را ایجاد کنید urls.py
فایل در فهرست برنامه های صفحه اصلی و URL را برای مشاهده خود تنظیم کنید.
from django.urls import path
from .views import home_view
urlpatterns = [
path('', home_view, name="home"),
]
مرحله 5: قالب صفحه اصلی را ایجاد کنید
در فهرست برنامه های صفحه اصلی، پوشه ای با نام templates ایجاد کنید. در داخل آن، یک فایل به نام ایجاد کنید home.html
. اینجا جایی است که شما صفحه اصلی خود را طراحی می کنید. کد HTML زیر را اضافه کنید:
<!DOCTYPE html>
<html>
<head>
<title>Localization Project</title>
</head>
<body>
<h1>{{ greeting }}</h1>
<p>Number: {{ large_number }}</p>
<p>Date: {{ current_date }}</p>
</body>
</html>
صفحه اصلی را به INSTALLED_APPS لیست در شما settings.py
فایل در localization_project
فهرست راهنما.
INSTALLED_APPS = [
# 'other apps',
'homepage',
]
باید فینال شما باشد localization_project
فهرست راهنما:
مرحله 6 – سرور توسعه را اجرا کنید
در نهایت، می توانید سرور توسعه خود را اجرا کنید تا صفحه اصلی را با استفاده از python manage.py runserver
فرمان
اکنون، وقتی از http://127.0.0.1:8000/ در مرورگر وب خود بازدید می کنید، باید صفحه اصلی ساده خود را مشاهده کنید که پیام خوش آمدگویی، عددی به هزاران و تاریخ فعلی را نمایش می دهد.
نحوه ایجاد یک سوئیچر محلی
به طور معمول، اکثر وب سایت ها زمانی که برای اولین بار از آنها بازدید می کنید، محتوا را به زبان انگلیسی نمایش می دهند.
اگر از وبسایتی بازدید کردهاید که از بومیسازی پشتیبانی میکند، ممکن است متوجه منوی کشویی شده باشید که به کاربران اجازه میدهد زبانهایی را که وبسایت پشتیبانی میکند انتخاب کنند. هنگامی که کاربر زبان مورد نظر خود را انتخاب کرد، وب سایت به طور خودکار آن را به عنوان زبان پیش فرض تنظیم می کند و محتوا را بر اساس آن به روز می کند.
به این منوی کشویی، تغییر دهنده محلی گفته می شود که در ادامه آن را ایجاد خواهید کرد. با استفاده از آن، گزینه ای خواهید داشت که به کاربران اجازه می دهد زبان را تغییر دهند و عملکرد محلی سازی را در عمل مشاهده کنند، که پس از آن انجام خواهید داد.
مرحله 1: فرم انتخاب زبان را اضافه کنید
ابتدا خود را اصلاح کنید home.html
الگویی برای گنجاندن فرمی برای انتخاب زبان. این فرم شامل یک منوی کشویی با انگلیسی، اسپانیایی، و فرانسوی گزینه ها. فرم به داخلی جنگو ارسال خواهد شد set_language view
، که تغییر زبان را مدیریت می کند.
<!DOCTYPE html>
<html>
<head>
<title>Localization Project</title>
</head>
<body>
<h1>{{ greeting }}</h1>
<p>Number: {{ large_number }}</p>
<p>Date: {{ current_date }}</p>
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
<option value="en">English</option>
<option value="es">Español</option>
<option value="fr">Français</option>
</select>
<input type="submit" value="Change Language">
</form>
</body>
</html>
مرحله 2: نمای خود را به روز کنید
در شما home_view
عملکرد در views.py
، مسیر فعلی را در متن قرار دهید تا فرم پس از تغییر زبان بداند به کجا تغییر مسیر دهد.
from django.utils.translation import gettext as _
def home_view(request):
context = {
'greeting': _("Welcome to our Localization Project!"),
'large_number': 12345.67,
'current_date': timezone.now(),
'redirect_to': request.path
}
return render(request, 'home.html', context)
مرحله 3: URL را برای تغییر زبان پیکربندی کنید
اطمینان حاصل کنید که شما urls.py
در localization_project
دایرکتوری برای مدیریت تغییر زبان تنظیم شده است. جنگو برای این کار یک نمای ارائه می دهد، اما شما باید آن را در پیکربندی URL خود متصل کنید.
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('homepage.urls')),
path('i18n/', include('django.conf.urls.i18n')),
]
الگوی URL i18n شامل set_language
نمایش تغییر مسیر
مرحله 4: میان افزار را برای محلی فعال کنید
مطمئن شوید که LocaleMiddleware
در شما فعال است settings.py
. این میان افزار به جنگو اجازه می دهد تا ترجیحات زبان کاربر را از روی درخواست به طور خودکار تشخیص دهد.
MIDDLEWARE = [
# 'other middleware',
'django.middleware.locale.LocaleMiddleware',
]
مرحله 5: سرور توسعه را اجرا کنید و تغییر دهنده زبان را آزمایش کنید
سرور توسعه خود را اجرا کنید و از صفحه اصلی خود بازدید کنید. اکنون باید چیزی شبیه به تصویر زیر مشاهده کنید، که شامل کشویی انتخاب زبان با سه زبانی است که ما انتخاب کرده ایم.
چگونه اپلیکیشن خود را بومی سازی کنیم
این بخش به شما نشان می دهد که چگونه متن صفحه اصلی ما را مطابق با انتخاب کاربر محلی ترجمه کنید.
مرحله 1: بین المللی سازی را در تنظیمات جنگو فعال کنید
قبل از شروع، مطمئن شوید که پروژه جنگو شما برای بین المللی شدن تنظیم شده است. در شما settings.py
فایل، باید تنظیمات زیر را بررسی و به روز کنید.
چهار تنظیمات اول در کد زیر احتمالاً به صورت پیش فرض هستند. بنابراین، شما باید زبان هایی را که می خواهید در برنامه خود پشتیبانی کنید، مشخص کنید – در این مورد، انگلیسی، اسپانیایی و فرانسوی.
سپس مسیر دایرکتوری محلی خود را مشخص کنید. اینجا جایی است که جنگو فایل های ترجمه را ذخیره کرده و به دنبال آن می گردد. شما باید این دایرکتوری را به صورت دستی در پروژه خود ایجاد کنید (در همان دایرکتوری manage.py
فایل). همچنین، به یاد داشته باشید که ماژول سیستم عامل را در بالای فایل وارد کنید.
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
LANGUAGES = [
('en', 'English'),
('es', 'Spanish'),
('fr', 'French'),
]
LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]
مرحله 2: علامت گذاری متن برای ترجمه
هنگام توسعه یک برنامه وب با استفاده از جنگو، مهم است که به یاد داشته باشید که متن، اعداد و تاریخ ها بسته به زبان و فرهنگ متفاوت هستند. این به این دلیل است که محتوا و زمینه آنها می تواند بسیار متفاوت باشد.
به عنوان مثال، رشته های متنی باید به طور ذاتی از معنی و زمینه خود در هنگام استفاده در یک برنامه آگاه باشند. بنابراین برای اینکه برنامه خود را برای کاربرانی از فرهنگ های مختلف در دسترس قرار دهید، باید هر رشته ای را که باید به طور صریح ترجمه شود علامت گذاری کنید.
از سوی دیگر، اعداد و تاریخ ها انواع داده هایی هستند که جنگو می تواند به طور خودکار با توجه به منطقه، قالب بندی کند. لازم نیست آنها را علامت گذاری کنید.
اگر برنامه ما را بررسی کنید، متوجه خواهید شد که ما سه مقدار را از خود عبور داده ایم views.py
فایل در قالب HTML: یک رشته، یک عدد و یک تاریخ. در حالی که نیازی به علامت گذاری شماره و تاریخ برای محلی سازی نیست، باید رشته را علامت گذاری کنید تا محلی سازی آن فعال شود. برای این منظور، جنگو فراهم می کند gettext
تابع.
وقتی برنامه خود را بومی سازی می کنید، رشته ای را که از نما به قالب HTML که می خواهید بومی سازی کنید ارسال می کنید علامت بزنید. در مورد ما، متن تبریک را با _() علامت گذاری می کنیم.
from django.utils.translation import gettext as _
from django.shortcuts import render
from django.utils import timezone
def home_view(request):
context = {
'greeting': _("Welcome to our Localization Project!"),
#other data
}
return render(request, 'home.html', context)
مرحله 3: فایل های پیام ایجاد کنید
استفاده کنید makemessages
دستور ایجاد فایل های زبان برای هر زبان. فایل های پروژه جنگو شما را برای رشته های ترجمه علامت گذاری شده برای بومی سازی اسکن می کند و تولید می کند .po
فایل هایی که ترجمه ها را ذخیره می کنند. این دستورات را در ابزار خط فرمان یا ابزار ترمینال خود اجرا کنید.
- برای اسپانیایی:
django-admin makemessages -l es
- برای فرانسوی:
django-admin makemessages -l fr
این ایجاد خواهد کرد .po
فایل ها در locale/es/LC_MESSAGES
و locale/fr/LC_MESSAGES
دایرکتوری ها
مرحله 4: فایل های پیام را ترجمه کنید
هر کدام را باز کنید .po
فایل کنید و ترجمه هر رشته را در زیر متن متناظر آن اضافه کنید msgstr
. به عنوان مثال، در locale/es/LC_MESSAGES/django.po
، موارد زیر را اضافه می کنید:
msgid "Welcome to our Localization Project!"
msgstr "¡Bienvenido a nuestro Proyecto de Localización!"
و متن زیر را به آن اضافه کنید locale/fr/LC_MESSAGES/django.po
:
msgid "Welcome to our Localization Project!"
msgstr "Bienvenue dans notre Projet de Localisation!"
مرحله 5: فایل های پیام را کامپایل کنید
پس از ترجمه، این فایل ها را در آن کامپایل کنید .mo
فایلها، فایلهای قابل خواندن ماشینی که جنگو میتواند از آنها استفاده کند. را اجرا کنید django-admin compilemessages
دستور پردازش همه شما .po
فایل های داخل پروژه و تولید مربوطه .mo
فایل ها.
مرحله 6: سرور را اجرا کنید و ترجمه ها را تست کنید
اکنون، ترجمه های خود را با استفاده از تغییر زبان در وب سایت خود آزمایش کنید. صفحه اصلی خود را بازخوانی کنید، و باید پیام تبریک را به زبان انتخاب شده ببینید:
همانطور که می بینید، عنوان پروژه، به پروژه بومی سازی ما خوش آمدید، با توجه به زبانی که انتخاب می کنیم ترجمه می شود. همچنین متوجه خواهید شد که شماره و تاریخ به طور خودکار به زبان تغییر یافته ترجمه می شوند.
اما شما می توانید ببینید که کلمات عدد و تاریخ ترجمه نمی شوند. در مراحل قبلی آنها را برای ترجمه علامت گذاری نکردیم.
هر بار که برنامه وب خود را با محتوای اضافی به روز می کنید و نیاز به بومی سازی این محتوای جدید دارید، به سادگی مراحل ذکر شده در بالا را دنبال کنید.
ابتدا رشته هایی را که نیاز به محلی سازی دارند علامت گذاری کنید. سپس، اجرا کنید makemessages
دستور به روز رسانی خود را .po
فایل هایی با این رشته های جدید در مرحله بعد، متون ترجمه شده مربوطه را در قسمت ارائه کنید .po
فایل های این رشته های جدید در نهایت، تولید کنید .mo
فایل ها با استفاده از compilemessages
فرمان
نحوه علامت گذاری رشته ها در قالب ها با استفاده از {% trans %}
همانطور که می دانید، کلمات شماره و تاریخ در مراحل قبلی ما بومی سازی نشده بودند. جالب است که شما نمی توانید آنها را با استفاده از علامت گذاری کنید gettext
روش به عنوان آنها از عبور داده نمی شود views.py
فایل. اینها کلمات ایستا در قالب HTML هستند.
برای بومی سازی متن در قالب های جنگو، از {% trans %}
تگ قالب ارائه شده توسط جنگو. این تگ به جنگو دستور می دهد تا متن مشخص شده را بر اساس ترجیح زبان کاربر فعلی به زبان مناسب ترجمه کند.
بیایید بومی سازی کنیم عدد و تاریخ متن با استفاده از {% trans %}
تگ قالب
مرحله 1: قالب خود را به روز کنید {% trans %}
برچسب ها
خودت را باز کن home.html
قالب و اصلاح کنید تا شامل شود {% trans %}
برچسب های اطراف متنی که می خواهید ترجمه کنید. در اینجا یک مثال است – به یاد داشته باشید که اضافه کنید {% load i18n %}
در بالای فایل HTML:
{% load i18n %}
<!DOCTYPE html>
<html>
<head>
<title>{% trans "Localization Project" %}</title>
</head>
<body>
<h1>{{ greeting }}</h1>
<p>{% trans "Number" %}: {{ large_number }}</p>
<p>{% trans "Date" %}: {{ current_date }}</p>
<!-- Language Switcher Form -->
<!-- ... -->
</body>
</html>
در این مثال، کلمات پروژه بومی سازی، عدد، و تاریخ در قالب برای ترجمه مشخص شده اند.
مرحله 2: فایل های پیام زبان را ایجاد/به روز کنید
را اجرا کنید makemessages
دستور به روز رسانی .po
فایل ها برای هر زبان
- برای اسپانیایی:
django-admin makemessages -l es
- برای فرانسوی:
django-admin makemessages -l fr
مرحله 3: رشته های جدید را در قسمت ترجمه کنید .po
فایل ها
در هرکدام .po
در فایل، رشته های تازه اضافه شده را پیدا خواهید کرد. ترجمه های آنها را در زیر اضافه کنید msgstr
برای هر زبان به عنوان مثال، در اینجا محتوای مرتبط برای فایل .po اسپانیایی آمده است:
#: .\homepage\templates\home.html:10
msgid "Number"
msgstr "Número"
#: .\homepage\templates\home.html:11
msgid "Date"
msgstr "Fecha"
بعد، اجرا کنید django-admin compilemessages
دستور کامپایل فایل های پیام و اجرای سرور توسعه برای آزمایش برنامه وب به روز شده. اکنون می توانید خروجی زیر را مشاهده کنید:
کثرت سازی
کثرتسازی در چارچوب جنگو راهی برای مدیریت ترجمههای مختلف بر اساس یک مقدار عددی است. ضروری است زیرا در بسیاری از زبان ها شکل یک کلمه بسته به عددی که آن را توصیف می کند تغییر می کند.
جنگو راهی برای مدیریت این موضوع با استفاده از {% blocktrans %}
تگ قالب با فرم جمع.
بیایید این را با استفاده از برنامه جنگو نشان دهیم. فرض کنید می خواهید پیامی در مورد تعداد بازدیدکنندگان سایت خود نمایش دهید که به صورت پویا تغییر می کند.
مرحله 1: نمای خود را برای عبور از تعداد بازدیدکنندگان به روز کنید
ابتدا خود را اصلاح کنید home_view
که در views.py
شامل متغیری که تعداد بازدیدکنندگان را نشان می دهد. برای اهداف نمایشی، این می تواند یک عدد ثابت باشد.
from django.shortcuts import render
from django.utils import timezone
from django.utils.translation import gettext as _
def home_view(request):
num_visitors = 5
context = {
'greeting': _("Welcome to our Localization Project!"),
'num_visitors': num_visitors,
}
return render(request, 'home.html', context)
مرحله 2: قالب را با چندتایی به روز کنید
در شما home.html
، استفاده کنید {% blocktrans %}
تگ با یک فرم جمع برای مدیریت جمع کردن، مانند این:
<!-- Other template content -->
<h1>{{ greeting }}</h1>
<p>
{% blocktrans count counter=num_visitors %}
There is {{ counter }} visitor.
{% plural %}
There are {{ counter }} visitors.
{% endblocktrans %}
</p>
<!-- Remaining template content -->
اینجا، {% blocktrans count counter=num_visitors %}
برای رسیدگی به حالت مفرد و the استفاده می شود {% plural %}
بخش برای حالت جمع است.
مرحله 3: فایل های پیام را به روز کنید
را اجرا کنید makemessages
دستور به روز رسانی خود را .po
فایل ها برای هر زبان: django-admin makemessages -l es
برای اسپانیایی، و django-admin makemessages -l fr
برای فرانسوی
مرحله 4: فرم های جمع را ترجمه و مدیریت کنید .po
فایل ها
در هرکدام .po
در فایل، ورودی هایی برای فرم های مفرد و جمع پیدا خواهید کرد.
مثلا اسپانیایی ها .po فایل باید دارای محتوای زیر باشد:
msgid "There is %(counter)s visitor."
msgid_plural "There are %(counter)s visitors."
msgstr[0] "Hay %(counter)s visitante."
msgstr[1] "Hay %(counter)s visitantes."
بعد، اجرا کنید django-admin compilemessages
دستور کامپایل فایل های پیام. سرور خود را اجرا کنید و بسته به تعداد بازدیدکنندگان باید پیام را به صورت مفرد یا جمع ببینید. تغییر شماره در num_visitors
در نظر شما و مشاهده کنید که پیام چگونه تغییر می کند.
نتیجه
و در اینجا شما آن را دارید – یک راهنمای جامع برای بومی سازی یک برنامه جنگو. با طراحی قابل دسترس جنگو، همه ابزارهای لازم برای ترجمه اعداد و مقادیر DateTime را در دستان خود دارید. به علاوه، ما دیدیم که چگونه خط فرمان Django-admin می تواند مدیریت فایل های ترجمه را آسان کند.
اما مهم این است که به یاد داشته باشید که بومی سازی یک وب سایت فراتر از ترجمه کلمات است. برای استفاده کامل از قدرت قابلیت های بومی سازی جنگو، خود را در مستندات آن غرق کنید، درک خود را عمیق تر کنید و به تمرین ادامه دهید.
با تشکر از شما برای خواندن! من جس هستم و در Hyperskill متخصص هستم. میتوانید آهنگ جنگو را در پلتفرم بررسی کنید.
منتشر شده در 1402-12-26 08:24:04