Django: Panduan Cepat untuk Internasionalisasi

Penerjemahan suatu aplikasi ke dalam berbagai bahasa dan pelokalannya adalah sesuatu yang harus dihadapi oleh semua pengembang. Materi, terjemahan yang kami terbitkan hari ini, memberikan panduan singkat tentang internasionalisasi aplikasi Django.

Bagian dari apa yang akan dibahas di sini berlaku untuk pelokalan proyek-proyek Python. Setelah memeriksa dasar-dasarnya, kita akan berbicara tentang percepatan upaya internasionalisasi. Secara khusus, tentang penggunaan platform Phrase . Diasumsikan bahwa pembaca materi ini memiliki aplikasi Django yang berfungsi, dan bahwa ia memiliki paket yang diinstal (Anda dapat menginstalnya, misalnya, dengan perintah ). Jika Anda belum pernah menggunakan Django (kerangka web berbasis Python populer) sebelumnya, maka mungkin berguna bagi Anda untuk melihatnya terlebih dahulu.



gettextpip install gettextpanduan resmi , dan kemudian kembali ke artikel ini.

Pengaturan lingkungan kerja dasar


Jadi, misalkan Anda memiliki proyek Django mysite, dan aplikasi bernama polls. Struktur proyek akan terlihat seperti ini:

/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        migrations/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

Langkah pertama dari pekerjaan kami adalah memeriksa apakah opsi internasionalisasi diaktifkan dalam konfigurasi proyek. Untuk melakukan ini, Anda perlu melakukan perubahan berikut untuk mysite/settings.py:

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

Internasionalisasi template


Sekarang Anda perlu menandai semua baris yang harus diterjemahkan ke bahasa yang berbeda. Misalkan Anda memiliki file templat berikut polls/templates/polls/index.html:

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

File ini perlu diproses sebagai berikut:

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

Di sini kami mengimpor paket untuk pelokalan dan mengganti semua teks dengan tampilan konstruksi trans 'SomeTranslationKeyName'. Selain itu, sebagai alternatif dari pendekatan ini, Anda dapat menggunakan teks terjemahan default dalam bentuk kunci terjemahan. Dengan pendekatan ini, Anda akan selalu memiliki teks default yang baik jika tidak ada terjemahan yang tersedia untuk kunci tertentu.

Internasionalisasi dalam Kode Python


Jika Anda ingin melokalisasi string di dalam kode Python (misalnya, dalam file polls/views.py), Anda perlu mengimpor fungsi ke file ugettext. Untuknya, yang cukup normal, Anda dapat menetapkan alias _. Inilah tampilan versi sederhana dari fungsi sederhana dari sebuah file 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)

Membuat File Terjemahan


Sekarang kita perlu membuat file terjemahan untuk setiap pengaturan bahasa yang ingin kita dukung. Untuk melakukan ini, buat direktori polls/localedan pollsjalankan perintah berikut di direktori :

django-admin makemessage -l de

Di sini deAnda dapat mengganti kode lokal untuk bahasa yang Anda rencanakan untuk ditambahkan ke aplikasi. Dalam contoh kita, eksekusi perintah ini akan mengarah pada pembuatan gettextfile -file dengan polls/locale/de/LC_MESSAGES/django.pokonten berikut:

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

Sekarang Anda dapat memasukkan umpan baris dalam file ini:

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

Saat terjemahan siap, Anda perlu mengkompilasi semuanya dengan menjalankan perintah berikut:

$ django-admin compilemessages

Jalankan perintah ini lagi, di direktori polls.

Agar dapat memeriksa operabilitas terjemahan dengan cepat, Anda perlu mengubah kode bahasa dalam file mysite/settings.py. Misalnya, seperti ini:

# mysite/settings.py
LANGUAGE_CODE = 'de'

Jika sekarang Anda membuka aplikasi di browser, itu harus diterjemahkan ke dalam bahasa Jerman.

Mempercepat lokalisasi aplikasi menggunakan Frase


Jika Anda menggunakan Frasa untuk mengatur kerja pada aplikasi pelokalan, maka Anda benar-benar tidak perlu secara manual membuat dan mengedit file * .po! Anda hanya perlu membuat dan mentransfer kunci WelcomeHeadingdan WelcomeMessagedi Frasa dan menggunakan fungsi ekspor untuk mengunduh file * .po.

Jika Anda menginstal alat baris perintah kami Phrase Client, maka pekerjaan Anda semakin disederhanakan. Cukup membuat file konfigurasi di direktori root proyek .phraseapp.ymldengan konten berikut:

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

Maka Anda perlu menjalankan perintah berikut di direktori root proyek:

phraseapp pull && django-admin compilemessages

Berkat ini, semua terjemahan proyek akan diperbarui.

Selain itu, penggunaan Editor Dalam Konteks kami di proyek Django Anda dapat lebih menyederhanakan pekerjaan . Untuk melakukan ini, cukup instal django-phrasemenggunakan pip:

pip install django-phrase

Kemudian cukup edit templat ketika bekerja dengan yang Anda rencanakan untuk digunakan In-Context-Editor:

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

Harap dicatat bahwa pemuatan phrase_i18nharus dilakukan setelah i18n.

Akhirnya, tambahkan yang berikut ke file konfigurasi:

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

Setelah itu, semuanya akan siap.

Pilihan lokal


Biasanya, pengembang aplikasi mengatur lokal berdasarkan pada pengaturan browser pengguna. Untuk melakukan ini, Anda perlu membawa file mysite/settings.pyke formulir berikut:

# 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')),
)

Dengan pendekatan ini, jika pengguna memiliki lokal German, ia akan melihat opsi terjemahan de. Kalau tidak, terjemahan standar akan digunakan en-us. Anda dapat memverifikasi operasi yang benar dari mekanisme ini menggunakan curl:

curl http://localhost:8000/polls -H "Accept-Language: de"

Perintah ini harus mengembalikan sesuatu seperti berikut:

<h1>Willkommen auf unserer Seite!</h1>
<p>Hier findet Ihr Umfragen.</p>

Ringkasan


Dalam artikel ini, kami memeriksa dasar-dasar internasionalisasi aplikasi Django. Di sini kita berbicara tentang layanan Frasa, yang dapat mempercepat dan menyederhanakan pekerjaan. Kami berharap apa yang Anda pelajari bermanfaat bagi Anda.

Pembaca yang budiman! Bagaimana Anda mendekati internasionalisasi proyek Python Anda?


All Articles