[ English | Deutsch | русский | Indonesia | 日本語 | 한국어 (대한민국) ]

Mengaktifkan Infrastruktur Terjemahan

Setelah Anda menyiapkan proyek, Anda mungkin ingin mengaktifkan terjemahan. Untuk ini, Anda harus terlebih dahulu menandai semua string agar bisa dilokalkan, untuk proyek Python gunakan oslo.i18n untuk ini dan ikut i`guidelines`_.

Perhatikan bahwa ini hanya mengaktifkan terjemahan, terjemahan sebenarnya dilakukan oleh tim i18n, dan mereka harus memprioritaskan proyek mana yang akan diterjemahkan.

Pertama aktifkan terjemahan dalam proyek Anda, tergantung pada apakah itu proyek Django, proyek Python atau proyek ReactJS.

Catatan

Skrip infra menganggap proyek sebagai proyek Django ketika nama repositori Anda diakhiri dengan -dashboard, -ui, horizon atau django_openstack_auth. Jika tidak, proyek Anda akan dikenali sebagai proyek Python. Proyek yang menggunakan ReactJS membutuhkan perlakuan khusus.

Jika struktur repositori Anda lebih kompleks, misalnya, dengan beberapa modul python, atau dengan proyek Django dan Python, lihat Kasus yang lebih kompleks as well.

Proyek Python

Untuk terjemahan string dalam file Python, hanya sedikit perubahan yang diperlukan di dalam sebuah proyek.

Catatan

Sebelumnya setup.cfg membutuhkan bagian compile_catalog, update_catalog, dan extract_messages serta satu a``babel.cfg`` file. Ini tidak diperlukan lagi dan dapat dihapus.

Perbarui file setup.cfg Anda. Ini harus berisi entri packages` di bagian ``files:

[files]
packages = ${MODULENAME}

Ganti``${MODULENAME}`` dengan nama modul utama Anda seperti nova atau novaclient. File setup i18n Anda, biasanya bernama "_i18n.py``, harus menggunakan nama modul Anda sebagai nama domain:

_translators = oslo_i18n.TranslatorFactory(domain='${MODULENAME}')

Proyek Django

Perbarui file setup.cfg Anda. Ini harus berisi entri packages` di bagian ``files:

[files]
packages = ${MODULENAME}

Buat file babel-django.cfg dengan konten berikut:

[python: **.py]
[django: **/templates/**.html]
[django: **/templates/**.csv]

Buat file babel-djangojs.cfg dengan konten berikut:

[javascript: **.js]
[angular: **/static/**.html]

Proyek ReactJS

Tiga dependensi baru diperlukan: react-intl, babel-plugin-react-intl, dan react-intl-po.

Perbarui file package.json Anda. Ini harus berisi referensi ke perintah json2pot dan po2json.

"scripts": {
    ...
    "json2pot": "rip json2pot ./i18n/extracted-messages/**/*.json -o ./i18n/messages.pot",
    "po2json": "rip po2json -m ./i18n/extracted-messages/**/*.json"
    }

File PO yang diterjemahkan akan diubah menjadi JSON dan ditempatkan ke direktori ./i18n/locales.

Anda perlu memperbarui skrip infra juga untuk menandai repositori sebagai proyek ReactJS untuk terjemahan, untuk detailnya lihat :ref: translation_scripts.

Tambahkan Dukungan Server Terjemahan

Usulkan perubahan ke repositori openstack/project-config termasuk perubahan berikut:

  1. Siapkan proyek di server terjemahan.

    Edit file gerrit/projects.yaml dan tambahkan opsi translate:

    - project: openstack/<projectname>
      description: Latest and greatest cloud stuff.
      options:
        - translate
    
  2. Tambahkan pekerjaan ke pipelines Anda.

    Edit file zuul.d/projects.yaml dan tambahkan templat yang mendefinisikan pekerjaan terjemahan ke repositori Anda:

    - project:
        name: openstack/<projectname>
        templates:
          - translation-jobs-master-stable
    

    Tim terjemahan menerjemahkan stable branches hanya untuk proyek GUI, jadi untuk horizon dan pluginnya.

    Jika repositori adalah proyek GUI, gunakan templat translation-jobs-master-stable. Jika tidak, gunakan template translation-jobs-master-only.

Saat mengirimkan perubahan ke openstack/project-config untuk ditinjau, gunakan topik translation_setup sehingga menerima perhatian yang sesuai:

$ git review -t translation_setup

Dengan perubahan ini digabungkan, string yang ditandai untuk terjemahan dikirim ke server terjemahan setelah setiap penggabungan ke proyek Anda. Selain itu, tugas berkala disiapkan yang memeriksa setiap hari apakah ada string yang diterjemahkan dan mengusulkannya ke proyek Anda bersama dengan file sumber terjemahan. Perhatikan bahwa pekerjaan harian hanya akan mengusulkan file yang diterjemahkan di mana sebagian besar string diterjemahkan.

Memeriksa Impor Terjemahan

Sebagai pemeriksaan minimal bahwa file terjemahan yang diimpor valid, Anda dapat menambahkan ke target lint (pep8 atau linters) tes msgfmt sederhana:

$ bash -c "find ${MODULENAME} -type f -regex '.*\.pot?' -print0| \
         xargs -0 -n 1 --no-run-if-empty msgfmt --check-format -o /dev/null"

Perhatikan bahwa skrip infra menjalankan pengujian yang sama, jadi menambahkannya ke proyek Anda bersifat opsional.

Kasus yang lebih kompleks

Skrip infra untuk pengaturan terjemahan bekerja sebagai berikut:

  • Skrip infra mengenali jenis proyek berdasarkan nama repositori. Jika nama repositori diakhiri dengan -dashboard, -ui, horizon atau django_openstack_auth, itu diperlakukan sebagai proyek Django. Jika tidak, ini akan diperlakukan sebagai proyek Python.

  • Jika repositori Anda mendeklarasikan beberapa modul python di entri packages di bagian [files] `` di ``setup.cfg, skrip infra menjalankan tugas terjemahan untuk setiap modul python.

Kami sangat menyarankan untuk mengikuti pedoman di atas, tetapi dalam beberapa kasus, perilaku ini tidak memenuhi struktur proyek Anda. Sebagai contoh,

  • Repositori Anda berisi kode Django dan Python.

  • Repositori Anda mendefinisikan beberapa modul python, tetapi Anda hanya ingin menjalankan pekerjaan terjemahan untuk modul tertentu.

Dalam kasus seperti itu, Anda dapat mendeklarasikan bagaimana setiap modul python harus ditangani secara manual di setup.cfg. Modul Python yang dideklarasikan dalam django_modules dan python_modules diperlakukan sebagai proyek Django dan proyek Python masing-masing. Jika entri django_modules atau python_modules tidak ada, itu diartikan bahwa tidak ada modul seperti itu.

[openstack_translations]
django_modules = module1
python_modules = module2 module3

Anda juga perlu menyiapkan repositori Anda mengikuti instruksi untuk Python dan/atau proyek Django di atas secara tepat.