Varsayılan WordPress çekirdek çevirisini geçersiz kıl


11

WordPress Hollandaca diline ayarlanmıştır. Temamı kullandığımda get_the_archive_title(), kategori arşivi sayfasında "Categorie: Category-name" çıktısını doğru şekilde çıktı. Ancak ben "Sectie: Category-name" okumak istiyorum.

WordPress güncellemeleri tarafından güncelleneceği için wp-content / diller klasöründeki Hollandaca dil dosyasını değiştirmek istemiyorum.

Bu çeviri dosyasını kopyalamayı, "kategori" çevirisini değiştirmeyi ve yeni nl_NL.mo dosyasını temam / dillerime yerleştirmeyi denedim. Bunun bir etkisi olmadı.

Çekirdek çeviri dosyalarını değiştirmeden bazı dizeler için nasıl farklı bir çeviri yapabilirim?

Yanıtlar:


15

Gettext filtresini kullanabilirsiniz :

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;
}

Eğer içerikle çevirisini filtrelemek gerekiyorsa, kullanım gettext_with_contextfiltresi :

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;
}

Bağlam içeren bir çeviri, dizeyi çevirmek için kullanılan gettext işlevinde bir bağlam verildiği anlamına gelir. Örneğin, bu bağlam olmadan:

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

Ve bu bağlamda:

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

Çoğul çeviriler için benzer filtreler kullanılabilir ( [_n()][2]ve [_nx()][2]): ngettextve ngettext_with_context.


1
İşe yaradı! "Categorie:% s" ve "Sectie:% s" yapmak zorunda kaldım çünkü metin tam olarak çeviri dosyasında olduğu gibi.
— Florian

Oh, evet, bu doğru. Çevrilecek tam metni bilmiyordum.
— cybmeta

1
Harika bir kod parçası - gettextfiltrenin "bağlam" dizesi kullanan çevirileri yakalamayacağını unutmayın, bunlar gettext_with_context'e ihtiyaç duyacaktır .
— Manu

Bu harika çözüm için teşekkürler. Bir çocuk teması oluştururken ve ana temanın çevirilerinden bazılarını geçersiz kılmak istediğim için, önerilen işlev gövdesini aşağıdaki satırla değiştirdim return $domain != 'child-domain' && ( $new = __( $original, 'child-domain' ) ) != $original ? $new : $translated;. Bu şekilde, çocuk temasının PO dosyasındaki geçersiz kılınan çevirileri işlev kodunda kablolamak yerine temizleyebilirim.
— Franco

Teşekkürler cybmeta! Repo'da yayınladığım bir eklenti ile temel metni değiştirmek için bu tekniği kullandım. Kodda bu gönderiyi kullandım. wordpress.org/plugins/…
— John Dee
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.