Ganti terjemahan inti WordPress default


11

WordPress diatur ke bahasa Belanda. Ketika saya menggunakan get_the_archive_title()tema saya dengan benar, output "Categorie: Category-name" pada halaman arsip kategori. Namun saya ingin itu membaca "Sectie: Category-name".

Saya tidak ingin mengubah file bahasa Belanda di folder wp-content / languages, karena itu akan diperbarui oleh pembaruan WordPress.

Saya mencoba menyalin file terjemahan itu, mengubah terjemahan "kategori" dan memasukkan file nl_NL.mo baru ke dalam my-theme / languages. Ini tidak memiliki efek apa pun.

Bagaimana saya bisa mencapai terjemahan yang berbeda untuk beberapa string tanpa mengubah file terjemahan inti?

Jawaban:


15

Anda dapat menggunakan filter gettext :

add_filter( 'gettext', 'cyb_filter_gettext', 10, 3 );
function cyb_filter_gettext( $translated, $original, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Jika Anda perlu memfilter terjemahan dengan konteks, gunakan gettext_with_contextfilter :

add_filter( 'gettext_with_context', 'cyb_filter_gettext_with_context', 10, 4 );
function cyb_filter_gettext_with_context( $translated, $original, $context, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Terjemahan dengan konteks berarti bahwa konteks diberikan dalam fungsi gettext yang digunakan untuk menerjemahkan string. Misalnya, ini tanpa konteks:

$translated = __( 'Search', 'textdomain' );

Dan ini dengan konteks:

$translated = _x( 'Search', 'form placeholder', 'textdomain' );

Filter serupa tersedia untuk terjemahan jamak ( [_n()][2]dan [_nx()][2]): ngettextdan ngettext_with_context.


1
Itu berhasil! Saya harus melakukan "Categorie:% s" dan "Sectie:% s" karena teksnya harus persis seperti dalam file terjemahan.
Florian

Oh ya, itu benar. Saya tidak tahu teks yang tepat untuk diterjemahkan.
cybmeta

1
Sepotong kode hebat - perlu diketahui bahwa gettextfilter tidak akan menangkap terjemahan yang menggunakan string "konteks", itu akan memerlukan gettext_with_context .
Manu

Terima kasih atas solusi hebat ini. Ketika saya sedang membangun tema anak dan bersedia untuk mengesampingkan beberapa terjemahan tema orang tua, saya mengganti badan fungsi yang diusulkan dengan baris berikut return $domain != 'child-domain' && ( $new = __( $original, 'child-domain' ) ) != $original ? $new : $translated;. Dengan cara ini, saya dapat mengatur terjemahan utama pada file PO tema anak bukannya mengirimnya ke dalam kode fungsi.
Franco

Terima kasih cybmeta! Saya menggunakan teknik ini untuk mengubah teks inti dengan plugin yang saya terbitkan di repo. Saya mengkredit posting ini dalam kode. wordpress.org/plugins/…
John Dee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.