Pertama-tama Anda perlu memberi tahu PHP lokal dan domain mana yang Anda gunakan.
putenv("LANG=da_DK");
setlocale('LC_ALL', "da_DK");
bindtextdomain("mycatalog", "./locale/");
textdomain("mycatalog");
Dalam hal ini saya memiliki terjemahan bahasa Denmark dan file bernama mycatalog.mo (dan .po). File-file ini ditempatkan (dari root Anda) di sini:locale/da_DK/LC_MESSAGES/mycatalog.mo/po
Untuk menampilkan terjemahan Anda, lakukan ini:
echo _("Hello world"); // Which would become "Hej verden"
_(); adalah alias dari gettext(); Hal cerdas tentang gettexts adalah jika tidak ada terjemahan, Anda tidak akan memiliki kode bahasa jelek seperti "MSG_HELLO_WORLD" di UI Anda, tetapi sebagai alternatif yang lebih baik:Cukup teks bahasa Inggris biasa.
Dalam file messages.po Anda harus memiliki semua pesan (peka huruf besar kecil dan juga sehubungan dengan koma, titik, titik dua, dll. yang digunakan) pada formulir ini:
msgid "Hello world!"
msgstr "Hej verden!"
Ketika Anda telah menambahkan ini ke file .po Anda, Anda membuka file ini di poedit, tekan "Simpan" dan itu akan menghasilkan file .mo. File ini diunggah ke direktori yang sama dengan file .po (biasanya sesuatu seperti \locale\da_DK\LC_MESSAGES\ dari root skrip)
Untuk menerjemahkan konten dinamis/variabel, Anda dapat menggunakan - antara lain - sprintf, dengan cara ini:
echo sprintf(_("My name is %s"), $name);
Dalam hal ini %s akan muncul di file .po; Ketika Anda memiliki string yang diterjemahkan (yang berisi %s), sprintf akan memastikan untuk mengganti %s dengan konten variabel. JIKA variabel harus diterjemahkan juga, Anda dapat melakukan ini:
echo sprintf(_("The color of my house is %s"), _($color));
Maka Anda tidak memerlukan kalimat lengkap untuk setiap warna, tetapi Anda tetap mendapatkan terjemahan warna.
Penting untuk dicatat bahwa pertama kali .mo dijalankan di server, itu di-cache - dan tidak ada cara untuk menghapus file ini dari cache tanpa memulai ulang (Apache atau sejenisnya itu sendiri sudah cukup). Ini berarti bahwa setiap perubahan yang Anda buat pada .mo setelah pertama kali digunakan, tidak akan efektif. Ada sejumlah peretasan untuk mengatasi ini, tetapi sejujurnya, sebagian besar tidak terlalu bagus (termasuk menyalin .mo, menambahkan waktu () di belakangnya lalu mengimpor dan menyimpannya lagi). Paragraf terakhir ini hanya penting jika Anda tidak akan menerjemahkan semuanya sekaligus, tetapi dalam potongan-potongan.
Jika Anda ingin membuat alat terjemahan sendiri, alat ini membantu Anda mengonversi .po ke .mo menggunakan PHP:
http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/