Cara Menerjemahkan File PO Tanpa Merusak Aplikasi Anda
TABLE OF CONTENTS
File PO tampak seperti file teks biasa sampai sebuah %s yang diterjemahkan, bentuk jamak yang hilang, atau msgid yang diedit membuat aplikasi Anda bermasalah. Gunakan alur kerja ini untuk menerjemahkan string yang ditujukan untuk pengguna tanpa mengubah struktur gettext.
Jangan tempel seluruh file ke penerjemah teks biasa. File PO mirip dengan kode sumber: kata-katanya bisa diterjemahkan, tetapi struktur file, placeholder, komentar, dan indeks jamak harus tetap utuh.
Metode 1: Gunakan Penerjemah File PO
Pilih metode ini jika Anda ingin draf pertama yang cepat dan aman tanpa perlu mengedit pasangan msgid / msgstr secara manual.
-
Cadangkan file
.poasli. Simpan salinan bersih di repositori Anda sebelum mengirimkan apa pun ke penerjemah. Jika file hasil terjemahan bermasalah, Anda membutuhkan versi yang sudah pasti benar untuk dibandingkan. -
Buka penerjemah yang mendukung PO. Gunakan alat yang memang dibuat untuk file gettext, seperti OpenL PO Translator, alat terjemahan dokumen berbayar per penggunaan. Alat yang mendukung PO seharusnya hanya menerjemahkan string target, sementara string sumber, komentar, placeholder, dan struktur file tetap utuh. Jika Anda masih memilih alat, bandingkan opsi di panduan penerjemah PO terbaik kami.
-
Unggah file
.po. Gunakan file bahasa yang berisi entrimsgiddanmsgstr. Jika Anda hanya memiliki template.pot, buat dulu file.podalam bahasa target, lalu unggah file.potersebut. -
Pilih bahasa sumber dan target. Sesuaikan bahasa sumber dengan teks di dalam
msgid, bukan bahasa antarmuka admin Anda. Misalnya, jika file berisi stringmsgiddalam bahasa Inggris dan Anda ingin hasil dalam bahasa Spanyol, pilih Inggris ke Spanyol. -
Unduh file hasil terjemahan. Simpan dengan konvensi penamaan lokal yang diharapkan framework Anda. Plugin WordPress biasanya menggunakan pola text-domain plus locale, sedangkan Django biasanya menyimpan file di bawah
locale/<bahasa>/LC_MESSAGES/. -
Tinjau string yang berisiko terlebih dahulu. Cari di file terjemahan untuk
%,{,},<,>,msgid_plural,msgctxt, dan#, fuzzy. Entri-entri inilah yang paling mungkin memengaruhi perilaku aplikasi saat dijalankan. -
Uji file terjemahan di aplikasi Anda. Muat bahasa secara lokal dan telusuri layar-layar yang menggunakan string terjemahan tersebut. File PO belum selesai hanya karena sudah diterjemahkan; file tersebut baru selesai jika aplikasi tetap dapat ditampilkan dengan benar.
Metode 2: Menerjemahkan File PO di Poedit
Pilih metode ini jika Anda membutuhkan peninjauan manusia, kompatibilitas dengan WordPress, atau alur kerja yang teliti per entri.
-
Buka file di Poedit. Poedit adalah editor terjemahan khusus untuk format PO dan format lokalisasi lainnya; editor dasarnya gratis, dengan fitur Pro berbayar untuk alur kerja yang lebih berat. Untuk WordPress, buku panduan resmi Polyglots menjelaskan bahwa Poedit dapat membuat file
.podan.modari file POT serta mendukung bentuk jamak dan UTF-8. -
Perbarui dari template POT jika sumber berubah. Jika pengembang mengubah teks aplikasi, perbarui file
.podari.potterbaru sebelum menerjemahkan. Ini memastikan string baru, yang dihapus, dan yang fuzzy tetap terlihat, sehingga tidak ada teks antarmuka yang usang dikirimkan secara diam-diam. -
Hanya terjemahkan field
msgstr.msgidadalah string sumber yang digunakan aplikasi Anda untuk mencari terjemahan. Dalam alur kerja gettext normal, penerjemah hanya boleh mengeditmsgstr, bukanmsgid. -
Jaga placeholder tetap persis sama. Jangan menerjemahkan atau mengubah spasi variabel seperti
%s,%d,%1$s,{name},%(count)s,:name, atau tag HTML. Jika urutan kata harus diubah, pindahkan placeholder sebagai satu kesatuan. -
Tangani bentuk jamak sebagai terjemahan terpisah. Entri jamak dapat berisi
msgid,msgid_plural, dan beberapa nilaimsgstr[n]. Isi setiap slot jamak yang dibutuhkan oleh bahasa target, jangan hanya menyalin kalimat yang sama ke semua slot. -
Simpan dan kompilasi file
.mojika aplikasi Anda membutuhkannya. Beberapa stack membaca file.posecara langsung selama pengembangan, tetapi WordPress dan banyak setup gettext menggunakan file.moyang sudah dikompilasi saat runtime. Poedit dapat mengompilasi.mosecara otomatis saat menyimpan; Django dapat mengompilasi pesan dengan perintahdjango-admin compilemessages. -
Selesaikan semua peringatan sebelum mengunggah. Di Poedit, ikon peringatan biasanya menunjukkan placeholder yang rusak, variabel yang hilang, atau ketidaksesuaian bentuk jamak. Perbaiki masalah tersebut sebelum mengimpor terjemahan ke WordPress, Django, Drupal, atau branch rilis Anda.
Metode 3: Gunakan Platform Lokalisasi
Pilih metode ini jika beberapa penerjemah, peninjau, atau manajer rilis perlu bekerja pada file PO yang sama.
-
Impor file PO ke platform yang mendukung gettext. Weblate dan platform lokalisasi serupa mendukung alur kerja PO. Platform lokalisasi tim umumnya merupakan produk berbayar, meskipun Weblate juga menyediakan opsi open-source yang bisa di-host sendiri. Penanganan komentar, header, string fuzzy, dan placeholder bisa berbeda, jadi periksa pengaturan format sebelum mengunggah file produksi.
-
Aktifkan pemeriksaan placeholder dan tag. Nyalakan aturan QA untuk placeholder gaya printf, variabel bernama, tag HTML/XML, dan bentuk jamak. Pemeriksaan ini akan menangkap kesalahan yang tidak bisa dideteksi oleh pemeriksa ejaan biasa.
-
Pastikan komentar pengembang tetap terlihat. Komentar pada file PO dapat memuat konteks seperti referensi sumber, catatan pengembang yang diekstrak, flag, dan string sumber sebelumnya. Penerjemah membutuhkan catatan tersebut, terutama ketika label UI singkat seperti “Open” bisa berarti kata kerja, kata sifat, atau perintah menu.
-
Gunakan translation memory dengan peninjauan. Translation memory sangat berguna untuk string UI yang berulang, tetapi bisa saja menyalin terjemahan lama ke konteks baru. Tinjau ulang string yang digunakan kembali jika
msgctxt, referensi sumber, atau UI di sekitarnya berubah. -
Ekspor file PO dan lakukan pemeriksaan lokal. Jangan langsung percaya hasil ekspor. Masukkan kembali file terjemahan ke aplikasi, kompilasi jika perlu, dan uji tampilan sebelum melakukan merge.
Aturan File PO yang Tidak Boleh Dilanggar
| PO item | Perlu diterjemahkan? | Contoh aman | Kenapa penting |
|---|---|---|---|
msgid | Tidak | msgid "Save changes" | Aplikasi menggunakan string sumber ini sebagai kunci pencarian di banyak alur kerja gettext. |
msgstr | Ya | msgstr "Simpan perubahan" | Ini adalah teks dalam bahasa target yang dilihat pengguna. |
msgctxt | Tidak | msgctxt "button" | Konteks membedakan string sumber yang identik. |
%s, %d, %1$s | Tidak | Hello, %s -> Halo, %s | Kode runtime mengganti placeholder ini dengan nilai nyata. |
{name}, %(count)s, :name | Tidak | Welcome, {name} | Variabel bernama harus tetap sesuai dengan kode aplikasi. |
| Tag HTML | Biasanya tidak | <strong>Warning</strong> | Terjemahkan teksnya, bukan sintaks tag-nya. |
msgid_plural | Tidak | msgid_plural "%d files" | Bentuk jamak sumber adalah bagian dari jalur kode asli. |
msgstr[0], msgstr[1] | Ya, dengan hati-hati | msgstr[0] "%d file" | Setiap bahasa target punya aturan jamak sendiri. |
#, fuzzy | Tinjau dulu | #, fuzzy | Fuzzy berarti terjemahan mungkin sudah usang atau belum dikonfirmasi. |
#. komentar pengembang | Biasanya tidak | #. Button label | Catatan ini membantu penerjemah memahami konteks. |
Contoh Singkat: Terjemahan PO yang Aman vs. Rusak
Berikut adalah entri gettext normal:
#. %s is the user's display name.
#, c-format
msgid "Welcome back, %s"
msgstr ""
Terjemahan bahasa Spanyol yang aman tetap mempertahankan %s:
#. %s is the user's display name.
#, c-format
msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, %s"
Terjemahan yang rusak mengubah placeholder:
msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, % s"
Spasi kecil itu bisa berpengaruh. GNU msgfmt --check-format dirancang untuk mendeteksi ketidaksesuaian format-string seperti placeholder % yang salah, dan Poedit juga akan memperingatkan masalah umum pada placeholder. Untuk daftar string yang lebih luas yang sebaiknya tidak diubah, gunakan panduan kami tentang apa yang tidak boleh diterjemahkan.
Cara Memeriksa File PO yang Sudah Diterjemahkan
- Jalankan validasi gettext jika Anda sudah menginstal gettext.
msgfmt --check --check-format -o /tmp/messages.mo path/to/messages.po
Perintah ini akan memeriksa sintaks, header, dan format string, lalu menulis katalog terkompilasi sementara jika file valid.
- Kompilasi file sesuai dengan cara yang diharapkan oleh framework Anda.
django-admin compilemessages
Untuk proyek Django, compilemessages akan mengompilasi file .po yang dibuat oleh makemessages menjadi file .mo untuk mendukung gettext.
- Cari terjemahan yang kosong.
grep -n 'msgstr ""' path/to/messages.po
Field msgstr yang kosong mungkin memang disengaja untuk entri yang belum diterjemahkan, namun sebaiknya Anda tidak terkejut saat rilis jika masih ada yang kosong.
- Cari string fuzzy.
grep -n '#, fuzzy' path/to/messages.po
String fuzzy sebaiknya ditinjau ulang oleh manusia sebelum rilis. Secara default, msgfmt tidak akan menggunakan terjemahan fuzzy kecuali Anda mengompilasi dengan --use-fuzzy, sehingga entri fuzzy bisa berperilaku seperti string yang belum diterjemahkan di katalog akhir.
- Uji langsung di UI nyata. Buka layar yang memuat formulir, jumlah jamak, pesan error, menu akun, dan alur pembayaran. Validasi PO hanya menangkap masalah pada file; hanya pengujian UI yang bisa menemukan kalimat yang janggal, teks yang meluap, dan konteks yang hilang.
Metode Mana yang Sebaiknya Anda Gunakan?
| Situasi | Metode terbaik | Alasan |
|---|---|---|
| Anda butuh draft pertama dengan cepat untuk satu file PO | Penerjemah file PO | Cara tercepat dengan tetap menjaga struktur |
| Anda mengelola plugin atau tema WordPress | Poedit | Alur kerja WordPress yang sudah dikenal dengan kompilasi .mo |
| Anda mengelola aplikasi Django | Penerjemah PO atau Poedit, lalu compilemessages | Proses penerjemahan bisa cepat, tapi kompilasi framework tetap diperlukan |
| Anda punya banyak bahasa dan peninjau | Platform lokalisasi | Penugasan, riwayat, QA, dan kontrol review lebih baik |
| Anda menerjemahkan string untuk pengembang | Tinjauan manusia setelah terjemahan mesin | Istilah kode, placeholder, dan konteks lebih penting |
| Anda juga melokalkan file JSON atau i18n frontend | Gunakan alur kerja khusus format | Aturan PO tidak selalu berlaku untuk JSON, YAML, atau pesan ICU |
Jika proyek Anda mencampur file PO gettext dengan file lokal JSON, terjemahkan setiap format menggunakan alat yang memahami strukturnya. File PO berpusat pada msgid dan msgstr; lokalisasi JSON berpusat pada key dan value. Untuk alur kerja ini, lihat panduan kami tentang penerjemah JSON terbaik tahun 2026.
FAQ
Bisakah saya menerjemahkan file PO dengan Google Translate?
Anda bisa menyalin nilai msgstr satu per satu ke penerjemah umum, tetapi mengunggah atau menempelkan seluruh file PO ke penerjemah teks biasa sangat berisiko. Penerjemah umum bisa saja mengubah msgid, komentar, escape tanda kutip, indeks jamak, atau placeholder. Sebaiknya gunakan penerjemah yang paham PO, Poedit, atau platform lokalisasi.
Apa perbedaan antara .po, .pot, dan .mo?
.pot adalah template yang diekstrak dari kode sumber. Biasanya hanya berisi string asli tanpa terjemahan. .po adalah file terjemahan yang bisa diedit untuk satu bahasa target. .mo adalah katalog biner hasil kompilasi yang banyak digunakan aplikasi berbasis gettext saat runtime.
Haruskah saya menerjemahkan msgid?
Tidak, bukan dalam alur kerja normal. Terjemahkan msgstr. Manual GNU gettext menjelaskan msgid sebagai string asli yang belum diterjemahkan dan msgstr sebagai terjemahannya; string msgid dihasilkan dan dikelola oleh alat gettext.
Bagaimana cara memeriksa apakah file PO valid?
Jalankan msgfmt --check --check-format jika gettext tersedia, buka file di Poedit, atau gunakan pemeriksaan QA di platform lokalisasi Anda. Setelah itu, kompilasi dan uji file di dalam aplikasi. Validasi memang diperlukan, tetapi tidak bisa menggantikan pengujian antarmuka pengguna (UI testing).
Apa yang terjadi jika saya merusak placeholder?
Dalam kasus terbaik, aplikasi akan menampilkan string yang aneh. Dalam kasus terburuk, pemformat runtime akan melempar error karena string terjemahan tidak lagi cocok dengan variabel yang diberikan oleh kode. Placeholder hanya boleh dipindahkan sebagai satu token utuh, jangan pernah diterjemahkan atau diedit sebagian.
Apakah OpenL bisa menerjemahkan file PO?
Ya. OpenL PO Translator dibuat khusus untuk file gettext .po dan memastikan placeholder serta variabel tetap utuh saat menerjemahkan ke lebih dari 100 bahasa. OpenL menggunakan alur kerja terjemahan dokumen berbasis bayar per penggunaan, jadi cocok untuk draf pertama yang cepat ketika menjaga struktur PO lebih penting daripada mengerjakan semuanya secara manual. Jika Anda hanya memiliki template .pot, buat file .po dalam bahasa target sebelum menggunakan OpenL.
Sumber
- Manual GNU gettext: Berkas PO — Penjelasan resmi dari gettext mengenai format berkas PO.
- Manual GNU gettext: Entri Berkas PO — Sumber untuk
msgid,msgstr, komentar, flag, dan struktur entri. - Manual GNU gettext: Entri dengan Bentuk Jamak — Sumber untuk struktur entri bentuk jamak.
- Manual GNU gettext: Pemanggilan msgfmt — Sumber untuk
msgfmt --checkdan validasi format-string. - OpenL PO Translator — Halaman produk OpenL untuk menerjemahkan berkas
.posambil menjaga placeholder dan variabel. - Poedit — Situs resmi Poedit untuk editor terjemahan PO dan penawaran Pro.
- WordPress Polyglots Handbook: Poedit — Panduan WordPress tentang penggunaan Poedit, berkas POT, berkas PO, kompilasi MO, dan peringatan placeholder.
- Dokumentasi Django: Terjemahan — Alur kerja Django untuk berkas pesan dan terjemahan.
- Dokumentasi Django: compilemessages — Referensi perintah Django untuk mengompilasi berkas
.pomenjadi berkas.mo. - Dokumentasi Drupal: Berkas PO dan POT — Penjelasan Drupal tentang
.po,.pot, konteks, bentuk jamak, komentar, dan variabel. - Dokumentasi Weblate: GNU gettext PO — Catatan platform lokalisasi tentang header PO, string sumber sebelumnya, string usang, dan berkas MO yang dihasilkan.