डिफ़ॉल्ट वर्डप्रेस कोर अनुवाद को ओवरराइड करें


11

वर्डप्रेस डच भाषा पर सेट है। जब मैं get_the_archive_title()अपने विषय का उपयोग सही ढंग से एक श्रेणी संग्रह पृष्ठ पर "वर्गीकृत: श्रेणी-नाम" का उत्पादन करता हूं। हालाँकि मैं "Sectie: श्रेणी-नाम" पढ़ना चाहूंगा।

मैं wp-content / languages ​​फ़ोल्डर में डच भाषा फ़ाइल को बदलना नहीं चाहता, क्योंकि यह वर्डप्रेस अपडेट द्वारा अपडेट किया जाएगा।

मैंने उस अनुवाद फ़ाइल को कॉपी करने की कोशिश की, "श्रेणी" अनुवाद को बदलकर नई nl_NL.mo फ़ाइल को मेरी थीम / भाषाओं में डाल दिया। इसका कोई असर नहीं हुआ।

मैं कोर ट्रांसलेशन फ़ाइलों को बदलने के बिना कुछ तारों के लिए एक अलग अनुवाद कैसे प्राप्त कर सकता हूं?

जवाबों:


15

आप गेटटेक्स्ट फिल्टर का उपयोग कर सकते हैं :

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

यदि आपको अनुवाद को संदर्भ के साथ फ़िल्टर करने की आवश्यकता है, तो gettext_with_contextफ़िल्टर का उपयोग करें :

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

संदर्भ के साथ एक अनुवाद का अर्थ है कि स्ट्रिंग के अनुवाद के लिए उपयोग किए जाने वाले गेटटेक्स्ट फ़ंक्शन में एक संदर्भ दिया गया है। उदाहरण के लिए, यह संदर्भ के बिना है:

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

और यह संदर्भ के साथ है:

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

इसी तरह के फिल्टर बहुवचन अनुवाद ( [_n()][2]और [_nx()][2]) के लिए उपलब्ध हैं : ngettextऔर ngettext_with_context


1
वह काम किया! मुझे "वर्गीकृत:% s" और "Sectie:% s" करना पड़ा क्योंकि पाठ का अनुवाद फ़ाइल में बिल्कुल वैसा ही होना है।
फ्लोरियन

ओह, हाँ, यह सही है। मैं अनुवाद करने के लिए सटीक पाठ नहीं जानता था।
साइबरमेट

1
कोड का महान टुकड़ा - बस ध्यान रखें कि gettextफ़िल्टर उन अनुवादों को नहीं पकड़ेगा जो "संदर्भ" स्ट्रिंग का उपयोग करते हैं, उन्हें gettext_with_context की आवश्यकता होगी
मनु

इस महान समाधान के लिए धन्यवाद। जैसा कि मैं एक बाल विषय का निर्माण कर रहा हूं और मूल विषय के कुछ अनुवादों को ओवरराइड करने के लिए तैयार हूं, मैंने निम्न पंक्ति के साथ प्रस्तावित फ़ंक्शन बॉडी को प्रतिस्थापित किया return $domain != 'child-domain' && ( $new = __( $original, 'child-domain' ) ) != $original ? $new : $translated;। इस तरह, मैं बच्चे के PO फ़ाइल में ओवरराइडिंग अनुवादों को हाउस कर सकता हूं बजाय उन्हें फ़ंक्शन कोड में शामिल किए।
फ्रेंको

धन्यवाद सायबेटा! मैंने इस तकनीक का उपयोग कोर टेक्स्ट को रेपो में प्रकाशित एक प्लगइन के साथ बदलने के लिए किया। मैंने इस पोस्ट को कोड में श्रेय दिया। wordpress.org/plugins/…
John Dee
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.