openSOURCE

openSOURCE

Did You Know?

Level up your quality of work

Odoo Dev FAQs

Terjemahan — i18n

Estimated reading: 5 minutes 38 views

Selamat datang di bagian kedelapan FAQ OdooCamp: Terjemahan — i18n. Prolog ini jadi pengantar sebelum kita masuk ke pertanyaan teknis yang paling sering diajukan developer tentang lokalisasi bahasa, baik untuk UI, report, portal/website, maupun data yang bisa diterjemahkan per‑record.


Mengapa i18n Penting di Odoo?

Odoo dipakai lintas negara dan tim. Dengan i18n yang rapi, kita:

  • Menyajikan UI dan report dalam bahasa pengguna.

  • Menjaga konsistensi istilah brand/industri.

  • Mendukung konten multibahasa (mis. nama produk/website) tanpa menggandakan record.


Mindset Kerja i18n

Sumber Teks → Ekstraksi → File PO → Terjemahan → Load/Update

  • Sumber teks: Python (_()), XML view (atribut string, help, label), QWeb (konten & atribut tertentu), JavaScript (_t()), serta field yang translate=True (nilai per‑record).

  • Ekstraksi: hasilkan POT/PO dari modul.

  • File PO: simpan ke i18n/<kode_bahasa>.po (mis. i18n/id.po).

  • Load/Update: impor via UI atau command‑line; Odoo menyimpan ke ir.translation.


Ruang Lingkup yang Akan Kita Bahas di FAQ i18n

  1. Sumber teks yang diterjemahkan di Python, XML, QWeb, dan JavaScript.

  2. Field translate=True: kapan dipakai untuk konten per‑record (nama produk, deskripsi, halaman website).

  3. Siklus kerja PO: ekspor, terjemahkan, impor; update saat upgrade modul.

  4. QWeb & report: praktik aman t-esc, format lokal (t-options), dan flag terjemahan.

  5. JavaScript (OWL): penggunaan _t dan bundling assets.

  6. Diagnostik: mencari string yang tidak tertangkap, memperbaiki konteks, menghindari duplikasi msgid.


Anatomi Dasar File PO

Simpan terjemahan modul di i18n/<lang>.po.

msgid "Sales Orders"
msgstr "Pesanan Penjualan"

# Dengan konteks (contoh, jika ada)
msgctxt "model:ir.ui.menu,name"
msgid "Products"
msgstr "Produk"

Catatan:

  • msgid adalah teks sumber; msgstr adalah terjemahannya.

  • Odoo menggunakan konteks untuk membedakan string identik di tempat berbeda.


Sumber Teks & Cara Menandai

1) Python (server‑side)

from odoo import _, models

raise UserWarning(_("You cannot confirm an empty order."))
  • Gunakan _() untuk semua pesan, label dinamis, dan nama aksi yang dihasilkan Python.

  • Gunakan placeholder aman: _("Hello %(name)s") % {"name": user.name} agar msgid stabil.

2) XML (views/data deklaratif)

<field name="string">Customer</field>
<field name="help">Main contact person</field>
  • Atribut seperti string, help, placeholder, dan label view lain otomatis diekstrak.

3) QWeb (template)

Konten HTML dan sebagian atribut bisa diterjemahkan. Kita tetap menampilkan nilai dengan t-esc.

<h3>Quotation</h3>
<span t-esc="o.amount_total" t-options='{"widget":"monetary","display_currency": o.currency_id}'/>
  • Untuk teks statis yang tidak ingin diterjemahkan, kita bisa menandai dengan flag non‑translate di level template (akan dibahas di FAQ QWeb i18n).

4) JavaScript (OWL)

import { _t } from "@web/core/l10n/translation";
this.env.services.notification.add(_t("Saved successfully"));
  • Gunakan _t() untuk string yang tampil ke pengguna.

5) Field translate=True (per‑record)

name = fields.Char(translate=True)
description = fields.Html(translate=True)
  • Nilai field ini bisa beda per bahasa lewat UI (tab Terjemahan) tanpa membuat record baru.


Ekspor & Impor Terjemahan

Via UI (Settings → Translations)

  • Ekspor terjemahan modul ke PO, terjemahkan di editor eksternal, lalu impor kembali.

  • Aktifkan bahasa target terlebih dahulu (load language).

Via Command‑line (odoo‑bin)

Contoh ekspor PO untuk modul my_module dan bahasa Indonesia:

odoo-bin \
  --addons-path=addons_path \
  --i18n-export=my_module/i18n/id.po \
  --modules=my_module \
  --language=id_ID

Impor (overwrite jika perlu):

odoo-bin \
  --addons-path=addons_path \
  --i18n-import=my_module/i18n/id.po \
  --language=id_ID \
  --i18n-overwrite

Lokalisasi Format (Tanggal/Angka/Uang)

  • Di QWeb/report, gunakan t-options untuk mengikuti locale user/report:

<span t-esc="o.date_order" t-options='{"widget":"datetime"}'/>
<span t-esc="o.amount_total" t-options='{"widget":"monetary","display_currency": o.currency_id}'/>
  • Di Python/JS, jangan hard‑code format; serahkan pada widget/layanan formatting Odoo.


Best Practices (Do/Don’t)

Do

  • Tandai semua pesan user‑facing dengan _() (Python) atau _t() (JS).

  • Gunakan placeholder (Python style %(name)s) agar msgid stabil dan mudah diterjemahkan.

  • Pakai translate=True untuk field konten (nama/HTML) yang perlu multibahasa.

  • Simpan PO di i18n/ dan kelola via git; review setiap perubahan string.

Don’t

  • Jangan menggabung string terjemahan dengan +/template yang mengubah urutan kata secara liar.

  • Jangan menaruh tanggal/angka dengan format manual; gunakan widget/locale Odoo.

  • Jangan menduplikasi msgid akibat variasi spasi/kapitalisasi yang tidak konsisten.


Debugging & Diagnostik

  • String tidak muncul di PO: pastikan sudah menandai dengan _()/_t() dan modul termasuk saat ekspor.

  • Terjemahan tidak terpakai: cek bahasa sudah diaktifkan, cache dibersihkan, dan PO di‑import setelah update modul.

  • Field translate=True tak berubah per bahasa: pastikan kita mengganti bahasa UI dan membuka tab Terjemahan pada form record.


Checklist Sebelum Masuk ke FAQ Detail

  • Semua string user‑facing ditandai _() (Python) atau _t() (JS).

  • Atribut view (string/help/placeholder) konsisten dan jelas.

  • Field yang butuh multibahasa memakai translate=True.

  • Proses ekspor‑impor PO teruji; bahasa target sudah aktif.

  • Report/portal memakai formatting lokal (t-options).


Yang Akan Kita Jawab di FAQ i18n

  • Cara aman menulis string dinamis dengan placeholder.

  • Mengelola translate=True pada field teks/HTML dan implikasinya di ORM.

  • Mengatasi string yang tidak tertangkap extractor (Python/JS/QWeb).

  • Strategi sinkronisasi PO saat upgrade modul dan tim multibahasa.

  • Praktik terbaik i18n pada report (QWeb) dan portal.

Dengan prolog ini, kita siap melangkah ke FAQ Terjemahan — i18n dan membahas praktik konkret untuk proyek Odoo 18 CE yang multibahasa.

Leave a Comment

Share this Doc

Terjemahan — i18n

Or copy link

CONTENTS