Saya pikir saya menemukan solusi, tetapi sebelum sedikit
Premis
load_theme_textdomain()
dan load_child_theme_textdomain()
pada dasarnya sama, satu-satunya perbedaan adalah jalur default yang mereka gunakan:
- mereka mendapatkan bahasa saat ini (menggunakan
get_locale()
) dan menambahkan file .mo relatif ke jalur yang dilewati sebagai argumen;
- kemudian mereka memanggil
load_textdomain()
lewat sebagai argumen baik itu textdomain dan path yang dihasilkan ke file .mo.
Kemudian load_textdomain
memuat file .mo ke dalam variabel textdomain global, tetapi seperti yang dapat kita baca dari sumber :
Jika domain sudah ada, terjemahan akan digabungkan.
Jika kedua set memiliki string yang sama, terjemahan dari nilai asli akan diambil.
Jadi, untuk mengganti / mengganti hanya string dari theme parent yang kita inginkan, kita perlu memuat file .mo kustom untuk textdomain induk, hanya berisi string yang diterjemahkan, sebelum theme parent memuat file .mo-nya.
Larutan
Pada akhirnya, saya hanya membuat folder dengan nama tema induk (hanya untuk kenyamanan) ke dalam folder bahasa tema anak, dan memasukkan ke dalamnya file .mo kustom saya untuk domain teks induk (satu untuk bahasa, dalam xx_XX.mo
bentuk, dimana xx_XX
kode bahasanya).
Dan kemudian saya menambahkan baris dalam functions.php
file tema anak saya selama after_setup_theme
aksi, di dekat salah satu yang memuat file .mo untuk textdomain tema anak saya:
add_action( 'after_setup_theme', function () {
// load custom translation file for the parent theme
load_theme_textdomain( 'parent-textdomain', get_stylesheet_directory() . '/languages/parent-theme' );
// load translation file for the child theme
load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
} );
Karena functions.php
file tema anak dimuat sebelum yang orang tua, rangkaian string ini akan lebih diutamakan daripada terjemahan tema induk (atau saya bisa saja menetapkan prioritas menggunakan parameter ketiga add_action
fungsi).
Catatan: Saya bisa menggunakan load_child_theme_textdomain
bukan load_theme_textdomain
, seperti yang dikatakan di premis itu akan sama.