Adalah domain teks yang diperlukan untuk tema anak

8

Maaf untuk pertanyaan noob.

Apakah domain teks diperlukan untuk tema anak? Saya sedang membangun tema anak sederhana tanpa teks-domain dideklarasikan. Jadi, ketika saya menggunakan string yang harus diterjemahkan, saya harus menggunakan tema teks-domain induk (ya tema induk memiliki teks-domain dimuat dan juga memiliki file .mo / .po).

Misalnya menambahkan baris ini di templat tema anak saya

<?php __('Some String', 'parent-text-domain');> 

Akankah string di atas diterjemahkan?

Terima kasih sebelumnya

Ayanize
sumber

Jawaban:

7

TL; DR: Jika Anda menggunakan string yang ada dalam tema induk, tepat bagaimana mereka digunakan dalam tema induk, Anda tidak perlu memiliki domain teks untuk tema anak Anda.

Tetapi jika Anda menggunakan string yang tidak digunakan dalam tema induk, untuk membuatnya dapat diterjemahkan, Anda akan memerlukan domain teks lain dengan .mofile terjemahan terkait ( ).


Alur kerja terjemahan

Ketika WordPress menemukan string dalam fungsi translatasi, itu:

  1. Memeriksa apakah terjemahan untuk domain teks yang diperlukan telah dimuat (melalui load_plugin_textdomainatau load_theme_textdomainatau load_textdomain), jika demikian lanjut ke poin 3.
  2. Memeriksa apakah folder terjemahan (secara default wp-content/languages) berisi file domain teks yang cocok. File textdomain yang cocok adalah di "{$domain}-{$locale}.mo"mana $domaindomain teks dari string untuk menerjemahkan dan $localemerupakan lokal saat ini untuk situs web. Jika file itu tidak ditemukan string asli dikembalikan, jika tidak dimuat dan WP ke depan ke titik berikutnya.
  3. Ketika textdomain dimuat, WP melihat apakah string yang diperlukan terkandung dalam file itu, jika bukan string asli dikembalikan, sebaliknyaWP meneruskan ke titik berikutnya.
  4. Jika string terjemahan yang ditemukan memerlukan resolusi singular / jamak (mis. Ketika menggunakan _n()) itu selesai. Kalau tidak, WP maju ke titik berikutnya.
  5. Kait filter diterapkan pada string yang diterjemahkan (lihat https://developer.wordpress.org/?s=gettext&post_type%5B%5D=wp-parser-hook ) dan akhirnya hasilnya dikembalikan.

Begitu?

Ketika Anda menggunakan domain teks tema induk dalam fungsi terjemahan dari tema anak (dengan asumsi tema induk mengirimkan dan memuat file domain teks, atau memiliki file terjemahan dalam folder terjemahan), WordPress akan tiba di titik 3. dalam daftar di atas, dan jadi jika string tersedia dalam file (karena digunakan dalam tema induk) itu akan diterjemahkan, jika tidak demikian.

Ini berarti bahwa string khusus dalam tema induk memerlukan file terjemahan sendiri.

Secara teori, dimungkinkan untuk menggunakan domain teks induk di file terjemahan lain, karena WordPress mampu memuat lebih banyak kali domain teks yang sama, "menggabungkan" mereka, tetapi itu memiliki masalah karena hanya satu file yang mungkin ada dalam format "{$domain}-{$locale}.mo"di folder terjemahan ( lihat poin 2. dalam daftar di atas).

Jadi, sebagai kesimpulan, satu-satunya cara yang layak untuk membuat tema anak diterjemahkan, jika mengandung string yang tidak digunakan dalam tema induk, adalah dengan menggunakan domain teks sendiri dan file terjemahan sendiri.

gmazzap
sumber
Jawaban yang sangat bagus! Satu lagi pertanyaan - katakanlah tema induk memiliki string ini "warna latar belakang" dan pada anak itu juga, string ini ada. Jadi dalam hal ini saya dapat menggunakan domain teks tema induk dengan aman? __ ('warna latar belakang', 'domain-orangtua-teks')?
Ayanize
ya @Ayanize jika tema induk memiliki __('background-color', 'parent-text-domain')Anda dapat menggunakan tema anak yang sama tanpa perlu melakukan apa pun untuk menerjemahkannya.
gmazzap
0

Jika tema anak Anda mengandung string yang berbeda dari tema orang tua.

Cara yang tepat untuk menggunakan domain teks yang berbeda dalam tema anak adalah load_child_theme_textdomain()fungsinya sekarang. Anda dapat menggunakannya dengan cara yang sama seperti memuat _..._ fungsi textdomain lainnya.

Waspadalah!

Tidak seperti file bahasa plugin, nama seperti my_child_theme-de_DE.mo TIDAK akan berfungsi. Meskipun file bahasa plugin memungkinkan Anda untuk menentukan domain teks dalam nama file, ini TIDAK akan bekerja dengan tema dan tema anak. File bahasa untuk tema harus menyertakan pintasan bahasa SAJA .

buruh pelabuhan
sumber