बाल विषय पर मूल विषय अनुवाद को ओवरराइड करें


12

मेरे पास एक मूल विषय है जो load_theme_textdomain()कई भाषाओं में सभी अनुवादित तारों को लोड करने के लिए सही तरीके से उपयोग करता है ।

फिर मैंने एक बाल विषय बनाया, जो load_child_theme_textdomain()इसके तार के लिए एक ही चीज को प्राप्त करने के लिए उपयोग करता है।

मूल विषय पर किसी विशेष भाषा के लिए कुछ अनुवादित स्ट्रिंग्स हैं जिन्हें मैं बाल विषय में बदलना / ओवरराइड करना चाहता हूं।

मुझे पता है कि अगर वे एक टेम्प्लेट फ़ाइल पर थे तो मैं फ़ाइल को बदल सकता था और बस उन स्ट्रिंग्स के लिए टेक्सटोमैन को बदल सकता था, लेकिन दुर्भाग्य से मैं जिन लोगों के बारे में बात कर रहा हूं उनका उपयोग कई स्थानों पर और डैशबोर्ड में भी किया गया है (इसलिए कुछ फ़िल्टर / एक्शन फ़ंक्शन के अंदर) )।

तो मेरा सवाल यह है: क्या माता-पिता टेम्पलेट फ़ाइलों या कार्यों को बदलने के बिना बाल विषय के अंदर उन अनुवादित स्ट्रिंग्स को बदलने का एक तरीका है?

मुझे नहीं पता, हो सकता है कि बच्चे के विषय के भाषाओं फ़ोल्डर के अंदर एक पैरेंट- theme.mo फाइल को केवल उन स्ट्रिंग्स के साथ अनुवादित किया जाए, या ऐसा कुछ।

जवाबों:


9

मुझे लगता है कि मुझे एक समाधान मिला, लेकिन थोड़ा पहले

परिसर

load_theme_textdomain()और load_child_theme_textdomain()मूल रूप से समान हैं, एकमात्र अंतर डिफ़ॉल्ट पथ है जो वे उपयोग करते हैं:

  • उन्हें वर्तमान भाषा आती है (उपयोग करते हुए get_locale()) और रिश्तेदार .mo फ़ाइल को तर्क के रूप में पारित पथ में जोड़ें ;
  • तब वे load_textdomain()दोनों टेक्सटोमैन और .mo फ़ाइल के परिणामस्वरूप पथ के रूप में पासिंग कॉल करते हैं ।

इसके बाद load_textdomain.mo फ़ाइल को ग्लोबल टेक्सडेटोमेन वैरिएबल में लोड करता है, लेकिन जैसा कि हम स्रोत से पढ़ सकते हैं :

यदि डोमेन पहले से मौजूद है, तो अनुवाद मर्ज किए जाएंगे।

यदि दोनों सेटों में समान स्ट्रिंग है, तो मूल मान से अनुवाद लिया जाएगा।

इसलिए, हम चाहते हैं कि विषय माता-पिता के तार को ओवरराइड / बदलने के लिए, हमें मूल टेक्सटोमैन के लिए एक कस्टम .mo फ़ाइल लोड करने की आवश्यकता है, जिसमें केवल उन स्ट्रिंग का अनुवाद किया गया है, इससे पहले कि मूल विषय अपनी .mo फ़ाइल को लोड करता है।


उपाय

अंत में, मैंने चाइल्ड थीम भाषाओं के फ़ोल्डर में मूल विषय (सिर्फ सुविधा के लिए) के नाम के साथ एक फ़ोल्डर बनाया, और उसके अंदर अपनी मूल .mo फाइलें टेक्सटोमैन (भाषा के लिए, xx_XX.moप्रपत्र में) के लिए रख दी । xx_XXभाषा कोड कहां है)।

और फिर मैंने अपने चाइल्ड थीम functions.phpफ़ाइल में after_setup_themeएक्शन के दौरान एक लाइन जोड़ी , जो कि मेरे बच्चे के लिए .mo फ़ाइल को लोड करता है।

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

क्योंकि functions.phpचाइल्ड थीम की फाइल माता-पिता के एक से पहले लोड की जाती है, इसलिए स्ट्रिंग्स के इस सेट का मूल विषय अनुवाद पर प्राथमिकता होगी (या मैं add_actionफ़ंक्शन के तीसरे पैरामीटर का उपयोग करके प्राथमिकता निर्धारित कर सकता था )।


नोट: मैं load_child_theme_textdomainइसके बजाय इस्तेमाल कर सकता था load_theme_textdomain, जैसा कि आधार में कहा गया है कि यह समान होता।


4

आप भाषा फ़ाइलों का उपयोग कर सकते हैं जो आपके बच्चे के थीम फ़ोल्डर में हैं। सबसे पहले आपको यह जानना होगा कि पैरेंट थीम का उपयोग कौन सा टेक्स्ट डोमेन कर रहा है। फिर फ़ाइल नाम (जैसे de_DE.po / de_DE.mo या nl_NL.po / nl_NL.mo) के रूप में केवल अपनी भाषा के साथ .po और .mo फ़ाइलें बनाएं और उन्हें अपने बाल थीम निर्देशिका के भीतर एक फ़ोल्डर में डालें, "भाषाएं" उदाहरण के लिए।

इसके बाद आप पाठ डोमेन को इनिशियलाइज़ कर सकते हैं load_child_theme_textdomain():

load_child_theme_textdomain( 'the_text_domain', get_stylesheet_directory() . '/languages/' );

ध्यान दें कि आप मूल डोमेन PHP फ़ाइलों की तरह __()या फ़ंक्शन कॉल के लिए टेक्स्ट डोमेन पा सकते हैं _e()। दूसरा पैरामीटर टेक्स्ट डोमेन है:__( 'Translated text string', 'text_domain' );


धन्यवाद @redelschaap, अंत में आप समाधान तब तक काम करेंगे जब तक कि आप पेरेंट टेक्सटोमैन के लिए एक अलग फ़ोल्डर का उपयोग करते हैं, जिस पर आप चाइल्ड टेक्सटोमैन का उपयोग करते हैं: वह था! :)
d79

आप अपने बच्चे के विषय के भीतर से कई पाठ डोमेन लोड कर सकते हैं। लेकिन आप सभी अनुवादों के लिए मूल विषय टेक्स्ट डोमेन का भी उपयोग कर सकते हैं, क्योंकि उसी पाठ डोमेन के लिए फ़ाइलों को लोड करते समय अनुवादों को विलय कर दिया जाता है।
redelschaap

0

वर्डप्रेस 5.0.1 के लिए 2019 अपडेट।

  1. फाइलों में माता-पिता या बच्चे को उनके पास नहीं रखना चाहिए। उदाहरण के लिए, स्पैनिश मैक्सिकन अनुवाद में फाइल चाइल्ड-थीम-नाम / भाषाओं / es_MX.po और /child-theme-name/languages/es_MX.mo होनी चाहिए
  2. चाइल्ड थीम फ़ंक्शन। एफपीपी में निम्नलिखित कोड होना चाहिए। ध्यान दें कि फंक्शन load_child_theme_textdomain () पहला पैरामीटर PARENT थीम स्लग है, न कि बच्चे का:
function child_theme_slug_setup() {
    load_child_theme_textdomain( 'parent-theme-slug', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'child_theme_slug_setup' );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.