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.