Django: دليل سريع للتدويل

إن ترجمة التطبيق إلى لغات مختلفة وتعريبه أمر يجب على جميع المطورين التعامل معه. المواد ، التي ننشر ترجمتها اليوم ، تقدم دليلاً موجزًا ​​حول تدويل تطبيقات Django.

ينطبق جزء مما سيتم مناقشته هنا على توطين أي مشاريع Python. بعد فحص الأساسيات ، سنتحدث عن تسريع جهود التدويل. على وجه الخصوص ، على استخدام منصة العبارة . من المفترض أن قارئ هذه المادة لديه تطبيق Django يعمل ، وأن لديه حزمة مثبتة (يمكنك تثبيته ، على سبيل المثال ، باستخدام أمر ). إذا لم تكن قد استخدمت Django (إطار ويب شائع يعتمد على Python) من قبل ، فقد يكون من المفيد لك إلقاء نظرة على هذا أولاً.



gettextpip 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:

# mysite/settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

تدويل القوالب


الآن تحتاج إلى وضع علامة على جميع الأسطر التي يجب ترجمتها إلى لغات مختلفة. افترض أن لديك ملف القالب التالي polls/templates/polls/index.html:

<!-- polls/templates/polls/index.html -->
<h1>Welcome to our site!</h1>
<p>Here you find polls.</p>

يجب معالجة هذا الملف على النحو التالي:

<!-- polls/templates/polls/index.html -->
{% load i18n %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

هنا قمنا باستيراد حزمة للترجمة واستبدال كل النص ببنيات العرض trans 'SomeTranslationKeyName'. بالإضافة إلى ذلك ، كبديل لهذا النهج ، يمكنك استخدام نصوص الترجمة الافتراضية في شكل مفاتيح الترجمة. باستخدام هذا الأسلوب ، سيكون لديك دائمًا نص افتراضي جيد إذا لم تكن هناك ترجمة متاحة لمفتاح معين.

التدويل في بايثون كود


إذا كنت ترغب في توطين السلاسل داخل رمز Python (على سبيل المثال ، في ملف polls/views.py) ، فأنت بحاجة إلى استيراد الوظيفة إلى الملف ugettext. بالنسبة لها ، وهو أمر طبيعي تمامًا ، يمكنك تعيين اسم مستعار _. إليك الشكل الذي ستبدو عليه النسخة المترجمة من وظيفة بسيطة من ملف views.py:

# polls/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المحتويات التالية:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr ""
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr ""

يمكنك الآن إدخال موجز سطر في هذا الملف:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr "Willkommen auf unserer Seite!"
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr "Hier findet Ihr Umfragen."

عندما تكون الترجمة جاهزة ، تحتاج إلى تجميع كل شيء عن طريق تشغيل الأمر التالي:

$ django-admin compilemessages

قم بتشغيل هذا الأمر مرة أخرى في الدليل polls.

للتحقق بسرعة من قابلية تشغيل الترجمة ، تحتاج إلى تغيير رمز اللغة في الملف mysite/settings.py. على سبيل المثال ، مثل هذا:

# mysite/settings.py
LANGUAGE_CODE = 'de'

إذا فتحت التطبيق الآن في متصفح ، فيجب ترجمته إلى الألمانية.

تسريع توطين التطبيق باستخدام عبارة


إذا كنت تستخدم Phrase لتنظيم العمل على تعريب التطبيقات ، فأنت لا تحتاج حقًا إلى إنشاء ملفات * .po وتعديلها يدويًا! كل ما تحتاجه لخلق ونقل مفاتيح WelcomeHeadingو WelcomeMessageفي العبارة واستخدام وظيفة التصدير لتحميل ملفات .po *.

إذا كان لديك أداة سطر الأوامر الخاصة بنا مثبتة Phrase Client، فإن عملك يصبح أكثر بساطة. يكفي إنشاء ملف تكوين في الدليل الجذر للمشروع .phraseapp.ymlبالمحتويات التالية:

# .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.

أخيرًا ، أضف ما يلي إلى ملف التكوين:

# mysite/settings.py
PHRASE_ENABLED = True
PHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'
PHRASE_PREFIX = '{{__'
PHRASE_SUFFIX = '__}}'

بعد ذلك ، سيكون كل شيء جاهزًا للانطلاق.

اختيار اللغة


عادة ، يقوم مطورو التطبيقات بتعيين الإعدادات المحلية بناءً على إعدادات متصفح المستخدم. للقيام بذلك ، تحتاج إلى إحضار الملف mysite/settings.pyإلى النموذج التالي:

# 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 الخاصة بك؟


All Articles