Bagaimana cara membuat terjemahan plugin WordPress siap?

19

Apa cara terbaik membuat plugin yang siap terjemahan?

Itu tidak harus diterjemahkan dari awal tetapi harus mudah diterjemahkan sehingga sesama pengembang dari budaya yang berbeda dapat berpartisipasi dalam proses pelokalan plugin.

Nabil Kadimi
sumber

Jawaban:

38

1. Menulis dengan lokalisasi dalam pikiran

Jangan menggunakan echoatau print()menghasilkan output teks, sebaliknya gunakan fungsi WordPress __()dan _e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()dan __()akan menyediakan terjemahan - dalam bahasa saat ini - teks yang disediakan sebagai parameter pertama. _e()akan menampilkan teks sedangkan __()akan mengembalikannya.

Parameter kedua adalah domain teks , Anda akan menggunakannya untuk memberi tahu WordPress bahwa teks yang disediakan sebagai parameter pertama milik plugin ini, Anda dapat menggunakan nama apa pun yang Anda inginkan, tetapi saya lebih suka menggunakan nama yang sama seperti yang saya gunakan untuk plugin tersebut. file direktori, saya merasa lebih intuitif.

Bagaimana cara menampilkan teks dinamis seperti: "Hello <username>"?

Dengan __()dan sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. Siapkan file .pot / .po / .mo

Definisi

  • File .pot : disediakan untuk Anda oleh pengembang plugin dan digunakan sebagai titik awal untuk membuat terjemahan baru, WordPress tidak menggunakannya.
  • File .po : adalah file terjemahan yang Anda atau orang lain mulai, dan mungkin sudah selesai, WordPress tidak menggunakannya.
  • File A.mo : secara otomatis dibuat oleh Poedit setiap kali Anda menyimpan file .po, yang dapat Anda lakukan dengan file-file ini adalah mengunggah atau mengunggahnya kembali setiap kali Anda membuat atau memperbarui file .po. WordPress mendapat terjemahan dari file .mo .

Buka Poedit dan buat katalog baru (File ›New Catallog ...) dengan pengaturan ini:

  • Info proyek: Gunakan informasi Anda (atau tim Anda), bahasa dan negara harus cocok dengan bahasa default plugin Anda
  • Jalan:
    • Jalur dasar: .
    • Jalur: hapus semua & tambahkan .., (kami akan menyimpan file bahasa dalam subdirektori plugin yang disebut bahasa)
  • Kata kunci: hapus semua & tambahkan __dan_e

Simpan katalog sebagai dan pindai file plugin Anda untuk teks yang dapat diterjemahkan dengan menekan tombol pembaruan. Ketika pembaruan selesai tutup katalog itu, Anda tidak perlu memperbarui file itu kecuali jika Anda menambahkan string terjemahan yang baru (yaitu terlampir dalam atau ) ke plugin Anda./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Sekarang mari kita buat terjemahan pertama (saya akan menggunakan fr_FR):

Menggunakan Podeit , buat katalog dari file POT (File ›Katalog baru dari file POT ...) :

  • Info proyek: Gunakan informasi Anda (atau tim Anda), ubah bahasa dan negara , saya akan menggunakan bahasa Prancis dan Prancis
  • Jalan: Jangan berubah
  • Kata kunci: Jangan mengejar

Simpan katalog sebagai . Terjemahkan beberapa atau semua string, simpan kembali file .po, unggah file .po dan .mo./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Perhatikan bahwa setiap kali Anda menyimpan file .po, file .mo dibuat dengan nama yang sama, nama file dari file .po sangat penting , itu terdiri dari gabungan dari domain teks plugin (my-plugin) dan bahasa lokal ( fr_FR), selalu beri nama file .po Anda untuk plugin seperti ini: [textdomain] - [locale] .po , berikut adalah beberapa contoh:

  • Italia / Italia: wpcf7-it_IT.po
  • Portugis / Brasil: wpcf7-pt_BR.po
  • Bahasa Arab: wpcf7-ar.po... Ya!

Setiap kali plugin diperbarui dengan teks baru, perbarui file po, terjemahkan string baru dan unggah kembali file .po dan .mo

3. Instruksikan plugin untuk memuat teks yang diterjemahkan untuk bahasa saat ini

Di suatu tempat di plugin Anda, Anda harus memberi tahu WordPress untuk menggunakan file .mo Anda, Anda dapat melakukannya dengan menggunakan kode ini di awal file plugin Anda:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

Ganti my-plugindengan nama plugin Anda di parameter load_plugin_textdomainfungsi 1 dan 3 .

4. Tes dan atasi masalah

Beberapa alasan itu mungkin tidak berfungsi:

  • String tidak diimpor ke file .pot atau .po
    • → Pengaturan katalog salah (jalur atau kata kunci atau keduanya)
  • Teks tidak diterjemahkan di situs WordPress
    • → file .mo untuk bahasa yang hilang atau memiliki nama file yang salah
    • → Domain teks tidak digunakan (ganti _e('my text')dengan _e('my text', 'my-plugin'))
    • → Domain teks tidak dimuat (gunakan contoh di atas dengan parameter yang tepat, WP tidak akan memperingatkan Anda tentang kesalahan)
Nabil Kadimi
sumber
3
+1 Tulisan yang bagus :) Lihatlah artikel ini: Memuat file bahasa WordPress dengan cara yang benar , " Pedoman praktis untuk menghilangkan rasa sakit saat memuat file bahasa di WordPress ". :::::: Glotpress dan grup Polyglots mungkin layak disebut juga.
brasofilo
Terima kasih atas instruksi yang bagus ini! Perlu disebutkan bahwa load_plugin_textdomain () perlu dipanggil dalam setiap metode, di mana Anda menggunakan _e () dan __ ()
Andreas
2

Jawaban Nabil cukup lengkap tetapi ada variasi mudah yang disediakan:

  1. Plugin Anda ada di repositori plugin WordPress.org

  2. Anda bersedia mengharuskan plugin Anda hanya bekerja dengan WordPress 4.6 atau lebih tinggi.

Langkah-langkahnya adalah sebagai berikut:

  1. Di file readme.txt plugin Anda, tambahkan Requires at least: 4.6. Lihat https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. jika belum, unggah plugin Anda ke repositori plugin WordPress. Lihat https://wordpress.org/plugins/developers/add/ .

  3. Temukan domain slug / teks plugin Anda. Untuk melakukannya, buka halaman plugin Anda di repositori plugin WordPress. URL akan seperti https://wordpress.org/plugins/your-plugin-slug/ . Bagian terakhir dari URL, “your-plugin-slug”, adalah slug plugin Anda. Itulah yang Anda gunakan untuk domain teks fungsi terjemahan.

  4. Gunakan fungsi terjemahan WordPress di plugin Anda (seperti __e(‘hello’, ‘my-plugin-domain’);). Pastikan untuk menggunakan domain teks plugin yang benar, diperoleh pada langkah sebelumnya. Lihat https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ untuk info lebih lanjut.

Jika Anda melakukan langkah-langkah di atas, WordPress akan menangani:

  • Parsing melalui Plugin Anda untuk semua string yang dapat diterjemahkan (tidak perlu menginstal dan menjalankan Poedit atau apa pun)
  • Permudah siapa pun untuk menyumbangkan terjemahan plugin Anda di translate.wordpress.org (tidak perlu memiliki situs sendiri yang didedikasikan untuk menerjemahkan plugin Anda, atau memiliki proses kustom bagi penerjemah untuk mengirimkan terjemahan mereka kepada Anda)
  • ketika seseorang menggunakan plugin Anda, WordPress akan memeriksa apakah itu diterjemahkan ke dalam bahasa mereka, dan jika demikian, menunjukkannya dalam bahasa mereka (tidak perlu bagi mereka, atau Anda, untuk memuat file terjemahan ke situs web mereka)

(Jawaban dari posting blog saya di sini: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )

thacacacamel
sumber
Saya tidak yakin mengapa ini diturunkan. Itu yang saya lakukan untuk membuat wordpress.org/plugins/print-my-blog-ready terjemahan (dan plugin telah berhasil diterjemahkan)
thespacecamel
Apakah itu berarti jika sebuah plugin / tema tidak ada dalam repositori plugin WordPress tetapi menggunakan domain teks dari sebuah plugin di sana, wordpress akan memuat file terjemahan yang salah?
Bodo
Pertanyaan bagus @bodo. Jika sebuah plugin menunjukkan untuk menggunakan domain teks dari plugin lain yang ada di repo wp.org, saya pikir WordPress akan dengan senang hati menggunakan file terjemahan plugin wp.org. Tapi maaf, saya tidak yakin.
thespacecamel