إن ترجمة التطبيق إلى لغات مختلفة وتعريبه أمر يجب على جميع المطورين التعامل معه. المواد ، التي ننشر ترجمتها اليوم ، تقدم دليلاً موجزًا حول تدويل تطبيقات Django.ينطبق جزء مما سيتم مناقشته هنا على توطين أي مشاريع Python. بعد فحص الأساسيات ، سنتحدث عن تسريع جهود التدويل. على وجه الخصوص ، على استخدام منصة العبارة . من المفترض أن قارئ هذه المادة لديه تطبيق Django يعمل ، وأن لديه حزمة مثبتة (يمكنك تثبيته ، على سبيل المثال ، باستخدام أمر ). إذا لم تكن قد استخدمت Django (إطار ويب شائع يعتمد على Python) من قبل ، فقد يكون من المفيد لك إلقاء نظرة على هذا أولاً.
gettext
pip install gettext
الدليل الرسمي ، ثم العودة إلى هذه المقالة.إعدادات بيئة العمل الأساسية
لذا ، لنفترض أن لديك مشروع Django mysite
ويسمى تطبيق polls
. يجب أن يبدو هيكل المشروع كالتالي:/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
polls/
migrations/
__init__.py
admin.py
models.py
tests.py
views.py
الخطوة الأولى لعملنا هي التحقق مما إذا كان خيار التدويل نشطًا في تكوين المشروع. للقيام بذلك ، تحتاج إلى إجراء التغييرات التالية على mysite/settings.py
:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
تدويل القوالب
الآن تحتاج إلى وضع علامة على جميع الأسطر التي يجب ترجمتها إلى لغات مختلفة. افترض أن لديك ملف القالب التالي polls/templates/polls/index.html
:
<h1>Welcome to our site!</h1>
<p>Here you find polls.</p>
يجب معالجة هذا الملف على النحو التالي:
{% load i18n %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>
هنا قمنا باستيراد حزمة للترجمة واستبدال كل النص ببنيات العرض trans 'SomeTranslationKeyName'
. بالإضافة إلى ذلك ، كبديل لهذا النهج ، يمكنك استخدام نصوص الترجمة الافتراضية في شكل مفاتيح الترجمة. باستخدام هذا الأسلوب ، سيكون لديك دائمًا نص افتراضي جيد إذا لم تكن هناك ترجمة متاحة لمفتاح معين.التدويل في بايثون كود
إذا كنت ترغب في توطين السلاسل داخل رمز Python (على سبيل المثال ، في ملف polls/views.py
) ، فأنت بحاجة إلى استيراد الوظيفة إلى الملف ugettext
. بالنسبة لها ، وهو أمر طبيعي تمامًا ، يمكنك تعيين اسم مستعار _
. إليك الشكل الذي ستبدو عليه النسخة المترجمة من وظيفة بسيطة من ملف views.py
:
from django.http import HttpResponse
from django.utils.translation import ugettext as _
def index(request):
output = _('StatusMsg')
return HttpResponse(output)
إنشاء ملفات الترجمة
نحتاج الآن إلى إنشاء ملفات ترجمة لكل إعداد لغة نريد دعمه. للقيام بذلك ، قم بإنشاء دليل وتنفيذ الأمر التالي polls/locale
في الدليل polls
:django-admin makemessage -l de
هنا de
يمكنك استبدال رمز اللغة للغة التي تخطط لإضافتها إلى التطبيق. في مثالنا ، سيؤدي تنفيذ هذا الأمر إلى إنشاء gettext
ملف يحتوي على polls/locale/de/LC_MESSAGES/django.po
المحتويات التالية:
...
msgid "WelcomeHeading"
msgstr ""
msgid "WelcomeMessage"
msgstr ""
يمكنك الآن إدخال موجز سطر في هذا الملف:
...
msgid "WelcomeHeading"
msgstr "Willkommen auf unserer Seite!"
msgid "WelcomeMessage"
msgstr "Hier findet Ihr Umfragen."
عندما تكون الترجمة جاهزة ، تحتاج إلى تجميع كل شيء عن طريق تشغيل الأمر التالي:$ django-admin compilemessages
قم بتشغيل هذا الأمر مرة أخرى في الدليل polls
.للتحقق بسرعة من قابلية تشغيل الترجمة ، تحتاج إلى تغيير رمز اللغة في الملف mysite/settings.py
. على سبيل المثال ، مثل هذا:
LANGUAGE_CODE = 'de'
إذا فتحت التطبيق الآن في متصفح ، فيجب ترجمته إلى الألمانية.تسريع توطين التطبيق باستخدام عبارة
إذا كنت تستخدم Phrase لتنظيم العمل على تعريب التطبيقات ، فأنت لا تحتاج حقًا إلى إنشاء ملفات * .po وتعديلها يدويًا! كل ما تحتاجه لخلق ونقل مفاتيح WelcomeHeading
و WelcomeMessage
في العبارة واستخدام وظيفة التصدير لتحميل ملفات .po *.إذا كان لديك أداة سطر الأوامر الخاصة بنا مثبتة Phrase Client
، فإن عملك يصبح أكثر بساطة. يكفي إنشاء ملف تكوين في الدليل الجذر للمشروع .phraseapp.yml
بالمحتويات التالية:
phraseapp:
access_token: <your access token>
project_id: <your project's id on PhraseApp>
file_format: po
pull:
targets:
file: "polls/locale/<locale_code>/LC_MESSAGES/django.po
ثم تحتاج إلى تشغيل الأمر التالي في الدليل الجذر للمشروع:phraseapp pull && django-admin compilemessages
وبفضل هذا ، سيتم تحديث جميع ترجمات المشروع.بالإضافة إلى ذلك ، يمكن أن يؤدي استخدام محرر In-Context Editor في مشروع Django إلى تبسيط العمل . للقيام بذلك ، قم فقط بالتثبيت django-phrase
باستخدام pip
:pip install django-phrase
ثم قم فقط بتحرير القوالب عند العمل الذي تخطط لاستخدامه In-Context-Editor
:<!-- polls/templates/polls/index.html -->
{% load i18n %}
{% load phrase_i18n %}
{% phrase_javascript %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>
يرجى ملاحظة أن التحميل phrase_i18n
يجب أن يتم بعد i18n
.أخيرًا ، أضف ما يلي إلى ملف التكوين:
PHRASE_ENABLED = True
PHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'
PHRASE_PREFIX = '{{__'
PHRASE_SUFFIX = '__}}'
بعد ذلك ، سيكون كل شيء جاهزًا للانطلاق.اختيار اللغة
عادة ، يقوم مطورو التطبيقات بتعيين الإعدادات المحلية بناءً على إعدادات متصفح المستخدم. للقيام بذلك ، تحتاج إلى إحضار الملف mysite/settings.py
إلى النموذج التالي:
from django.utils.translation import ugettext_lazy as _
...
MIDDLEWARE_CLASSES = (
...,
'django.middleware.locale.LocaleMiddleware',
...,
)
...
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
('en-us', _('English')),
('de', _('German')),
)
مع هذا النهج ، إذا كان المستخدم لديه لغة German
، فسوف يرى خيار الترجمة de
. خلاف ذلك ، سيتم استخدام الترجمة الافتراضية en-us
. يمكنك التحقق من التشغيل الصحيح لهذه الآلية باستخدام curl
:curl http://localhost:8000/polls -H "Accept-Language: de"
يجب أن يعيد هذا الأمر شيئًا مما يلي:<h1>Willkommen auf unserer Seite!</h1>
<p>Hier findet Ihr Umfragen.</p>
ملخص
في هذه المقالة ، درسنا أساسيات تدويل تطبيقات Django. تحدثنا هنا عن خدمة Phrase ، التي يمكنها تسريع العمل وتبسيطه. نأمل أن يكون ما تعلمته مفيدًا لك.القراء الأعزاء! كيف تتعامل مع تدويل مشاريع Python الخاصة بك؟