Dalam artikel ini, saya akan membimbing anda melalui proses mengantarabsankan plugin WordPress. Proses ini tidak sukar dan apabila pengetahuan diperoleh, anda boleh mempunyai plugin WordPress anda dengan mudah diterjemahkan ke bahasa lain.
Takeaways Key
Pengantarabangsaan adalah proses membangunkan plugin anda supaya dapat diterjemahkan ke dalam bahasa lain dengan mudah.
mengapa mengantarabangsakan?
Sebagai pemaju, anda mungkin tidak mempunyai masa untuk menyediakan versi tempatan plugin anda kerana anda tidak bercakap bahasa lain. Walau bagaimanapun, apabila anda mengantarabsikasikan plugin anda, anda meninggalkan pintu terbuka untuk orang lain untuk membuat lokalisasi tanpa perlu mengubah kod sumber.
Sekarang kita sudah biasa dengan konsep pengantarabangsaan dan penyetempatan plugin, mari kita menyelam ke dalam proses membuat plugin siap untuk terjemahan.
Langkah pertama untuk membuat plugin diterjemahkan adalah memasukkan tajuk terjemahan di kalangan tajuk plugin.
tajuk terjemahan adalah domain teks dan laluan domain.
Domain teks digunakan untuk menandakan semua teks milik plugin. Ia adalah pengenal unik yang memastikan WordPress dapat membezakan antara semua terjemahan yang dimuatkan. Ini meningkatkan kebolehgunaan dan bermain lebih baik dengan alat WordPress yang sudah ada.
Domain teks mesti sepadan dengan slug plugin. Sebagai contoh, jika plugin anda adalah satu fail yang dipanggil Sample-Plugin.php atau ia terkandung dalam folder yang dipanggil Sample-Plugin Domain harus menjadi sampel-plugin.
Nama domain teks mesti menggunakan sengkang dan tidak menggariskan.
ingat saya katakan domain teks mesti sepadan dengan slug plugin? Itu mungkin tidak benar selepas semua. Saya menjalankan percubaan cepat dengan salah satu plugin saya, bukannya slug plugin, saya menggunakan teks yang unik dan ia berfungsi tanpa sebarang masalah.
Moral: Pastikan domain teks adalah unik sehingga ia tidak bertembung dengan plugin lain.
Laluan domain adalah folder WordPress akan mencari fail terjemahan.
Secara lalai, WordPress mencari direktori plugin untuk fail terjemahan untuk digunakan. Mempunyai fail terjemahan di folder root plugin anda boleh tidak teratur struktur plugin anda.
Jika anda ingin menyimpan fail terjemahan dalam folder, sebagai contoh; /Bahasa, anda perlu memaklumkan WordPress tentangnya menggunakan tajuk Laluan Domain.
di bawah adalah tajuk biasa plugin WordPress termasuk terjemahan.
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>
Sekarang, kami akan menggunakan fungsi LOAD_PLUGIN_TEXTDOMAIN () untuk memberitahu WordPress untuk memuatkan fail terjemahan jika ia wujud untuk bahasa pengguna.
di bawah adalah sinopsis fungsi.
<span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
Parameter pertama $ domain harus menjadi domain teks; $ ABS_REL_PATH telah ditetapkan dan harus ditetapkan kepada palsu; Akhirnya, $ plugin_rel_path adalah laluan relatif untuk fail terjemahan.
Jika fail mo terjemahan berada dalam direktori plugin sendiri, gunakan seperti berikut:
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
Jika fail MO terjemahan dalam subdirektori bahasa plugin. Gunakan seperti berikut:
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );</span>
Anda tidak hanya memanggil fungsi load_plugin_textdomain, ia harus dipanggil dalam plugin anda seawal tindakan plugins_loaded seperti ini:
<span>function load_plugin_textdomain() { </span> <span>load_plugin_textdomain( 'espw-plugin', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' ); </span><span>} </span> <span>add_action( 'plugins_loaded', 'load_plugin_textdomain' );</span>
Sekarang bahawa domain teks dan header laluan domain ditetapkan, sudah tiba masanya untuk mempelajari cara mengantarabangsakan plugin.
Segmen tutorial ini akan dibahagikan kepada yang berikut:
Sila ambil perhatian: rentetan ESPW-PLUGIN akan digunakan sebagai domain teks dalam tutorial ini.
Untuk membuat rentetan diterjemahkan dalam plugin anda, bungkus rentetan asal dalam panggilan fungsi __ () seperti berikut:
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>
Jika anda ingin echo rentetan ke penyemak imbas, bukannya bahasa echo membina, gunakan fungsi _e:
<span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
Sebagai pemaju PHP dan WordPress, saya mengandaikan anda tahu apa yang menjadi tempat letak. Anda boleh dengan cepat melalui dokumentasi PHP Sprintf dan Printf () untuk maklumat lanjut.
Jika anda menggunakan pembolehubah dalam rentetan seperti contoh di bawah, anda harus menggunakan ruang letak.
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
cara yang betul adalah menggunakan fungsi printf () seperti berikut:
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );</span>
melalui kod beberapa plugin yang dihoskan di repositori plugin WordPress, saya melihat perkara seperti ini:
<span>function load_plugin_textdomain() { </span> <span>load_plugin_textdomain( 'espw-plugin', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' ); </span><span>} </span> <span>add_action( 'plugins_loaded', 'load_plugin_textdomain' );</span>
<span>$text = __( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>
Walaupun rentetan kini diterjemahkan, pembolehubah PHP $ bandar juga menjadi diterjemahkan.
Ini adalah amalan yang buruk kerana penterjemah boleh tersilap mengubah pembolehubah atau menyuntik kod jahat ke dalam pangkalan kod plugin, dan ini akhirnya akan membuat kerosakan plugin.
Fungsi Sprintf adalah serupa dengan printf kerana mereka memformat rentetan menggunakan ruang letak manakala printf mengeluarkan rentetan yang diformat, sprintf mengembalikan rentetan.
Contoh: Kod berikut menetapkan rentetan diformat ke teks $ Variable.
<span>_e( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>
termasuk HTML dalam rentetan yang diterjemahkan bergantung pada konteks.
Contohnya adalah pautan (dipisahkan dari teks di sekelilingnya):
<span>echo 'Your city is $city.'</span>
<span>printf( </span> <span>__( 'Your city is %s.', 'espw-plugin' ), </span> <span>$city </span><span>);</span>
rentetan yang berubah apabila bilangan perubahan item dapat diinternalan menggunakan fungsi _n ().
Fungsi ini menerima 4 argumen, iaitu:
mari kita lihat beberapa contoh untuk memahami bagaimana fungsi _n () berfungsi.
Dalam bahasa Inggeris anda mempunyai "satu komen" dan "dua komen". Dalam bahasa lain, anda boleh mempunyai pelbagai bentuk jamak.
Kod di bawah menunjukkan cara mengendalikan senario tersebut menggunakan fungsi _n ().
<span>echo __('Your city is $city', 'espw-plugin');</span>
Penjelasan kod Kod di atas terdiri daripada ketiga -tiga fungsi ini - printf, _n dan number_format_i18n.
Untuk asimilasi mudah, kod fungsi akan dibedah dengan setiap komponen fungsi dijelaskan.
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>
hujah pertama yang diserahkan kepada fungsi _n adalah teks yang akan dipaparkan apabila bilangan komen adalah tunggal.
yang kedua ialah teks yang dipaparkan apabila bilangan komen lebih besar daripada satu.
Placeholder %s akan mengandungi nilai number_format_i18n (get_comments_number ()) yang akan dijelaskan tidak lama lagi.
argumen ketiga get_comments_number () dianggap sebagai fungsi yang mengembalikan kiraan komen.
Jika ia kembali 1, hujah pertama satu komen mendapat output oleh printf jika tidak, hujah kedua %s komen dikembalikan jika lebih besar daripada 1.
Sila ambil perhatian: Pemegang tempat %s digantikan oleh integer yang dikembalikan oleh number_format_i18n (get_comments_number ()) yang merupakan hujah kedua yang diserahkan kepada fungsi printf.
Akhirnya, hujah keempat adalah terjemahan domain teks .
Fungsi Number_Format_I18n () menukarkan kiraan komen ke format berdasarkan locale. Lihat dokumentasi untuk maklumat lanjut.
Sama dengan nombor_format_i18n () adalah date_i18n yang mengambil tarikh dalam format setempat, berdasarkan timestamp.
masih dalam fungsi _n (), di bawah adalah satu lagi demonstrasi bagaimana fungsi berfungsi.
<span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
Jika pembolehubah $ kiraan kembali 1, teks yang kami hapus satu mesej spam akan dipaparkan; Tetapi jika ia lebih besar daripada 1, kami memadamkan mesej spam %d %akan dipaparkan dengan tempat letak %d digantikan oleh nilai integer $ Count.
kadang -kadang satu istilah digunakan dalam beberapa konteks, walaupun ia adalah satu dan perkataan yang sama dalam bahasa Inggeris ia harus diterjemahkan secara berbeza dalam bahasa lain.
Contohnya, siaran perkataan boleh digunakan sebagai kata kerja seperti dalam "Klik di sini untuk menyiarkan komen anda" dan sebagai kata nama "edit siaran ini".
dalam kes sedemikian fungsi _x atau _ex harus digunakan.
ia sama dengan __ () dan _e (), tetapi ia mempunyai hujah tambahan - $ konteks.
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
Menggunakan kaedah ini dalam kedua -dua kes kita akan mendapat komen rentetan untuk versi asal, tetapi penterjemah akan melihat dua rentetan komen untuk terjemahan, masing -masing dalam konteks yang berbeza.
Apabila rentetan yang dibuat diterjemahkan oleh fungsi _x () dihuraikan oleh alat terjemahan seperti poedit, argumen konteks memberikan petunjuk kepada penterjemah pada konteks rentetan/teks digunakan.
Dalam bahasa Jerman, jawatan sebagai kata nama adalah beitrag sementara sebagai kata kerja adalah verbuchen.
di bawah adalah tangkapan skrin poedit yang menerjemahkan pos rentetan ke Jerman dengan konteks kuasa dua.
manakala _x () mengambil rentetan terjemahan, _ex () memaparkannya.
antara senarai adalah fungsi untuk melarikan diri teks terjemahan - ESC_HTML (), ESC_HTML_E (), ESC_HTML_X (), ESC_ATTR (), ESC_ATTR_E () dan ESC_ATTR_X (). Anda boleh mendapatkan lebih banyak maklumat mengenai setiap fungsi ini di WordPress Codex.
Saya tidak perlu menjelaskan setiap perkara ini, tetapi apa yang mereka lakukan pada dasarnya melarikan diri teks yang boleh diterjemahkan.
Salah satu matlamat WordPress adalah untuk memudahkan pengguna di seluruh dunia untuk menerbitkan kandungan. Sebagai pemaju plugin, anda boleh membantu untuk memudahkan proses penerbitan untuk pengguna apabila anda mengantarabsikasikan plugin anda.
bahagian pertama tutorial ini pada dasarnya adalah mengenai semua yang anda perlu ketahui mengenai plugin i18n.
Bahagian akhir akan menjadi berjalan kaki pada cara membuat terjemahan plugin siap serta belajar bagaimana untuk melokalkan plugin ke bahasa baru.
Saya harap anda telah mempelajari sesuatu yang baru dari tutorial ini.
Happy Coding!
Fungsi __ () dan _e () kedua -duanya digunakan dalam WordPress i18n untuk membuat rentetan teks diterjemahkan. Perbezaan utama di antara mereka ialah __ () mengembalikan rentetan yang diterjemahkan, manakala _e () bergema atau mengeluarkan rentetan yang diterjemahkan secara langsung. Oleh itu, anda akan menggunakan __ () apabila anda ingin menyimpan rentetan yang diterjemahkan dalam pembolehubah, dan _e () apabila anda ingin memaparkan rentetan yang diterjemahkan kepada pengguna.
Untuk menterjemahkan plugin WordPress anda ke dalam bahasa yang berbeza, anda perlu membuat fail .po dan .mo untuk setiap bahasa. Fail-fail ini mengandungi rentetan yang diterjemahkan dan dinamakan mengikut kod bahasa ISO-639 (mis., En_us untuk Bahasa Inggeris, FR_FR untuk Perancis). Anda boleh menggunakan alat seperti PoEdit atau Loco Terjemahan untuk membuat dan mengurus fail terjemahan ini. PoEdit dan Loco Translate adalah alat popular untuk membuat dan menguruskan fail terjemahan. GlotPress, alat terjemahan berasaskan web, juga digunakan oleh komuniti WordPress untuk menterjemahkan teras WordPress, plugin, dan tema. Boleh menguji plugin WordPress anda untuk kesediaan terjemahan dengan menukar bahasa dalam tetapan WordPress anda dan menyemak jika rentetan teks plugin diterjemahkan dengan betul. Anda juga boleh menggunakan alat seperti plugin WordPress I18n Checker, yang memeriksa plugin anda untuk kesilapan biasa i18n.
Apakah peranan .pot, .po, dan .mo fail dalam WordPress i18n? .po, dan .mo fail memainkan peranan penting dalam WordPress I18n. Fail .pot adalah templat yang mengandungi semua rentetan yang diterjemahkan dari plugin anda. Fail .po adalah fail yang boleh dibaca manusia yang mengandungi rentetan yang diterjemahkan, dan fail .mo adalah fail yang boleh dibaca mesin yang digunakan oleh WordPress untuk memaparkan rentetan yang diterjemahkan. Tema Terjemahan-siap?
Atas ialah kandungan terperinci WordPress i18n: Buat terjemahan plugin anda siap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!