मुझे लगता है कि मुझे एक समाधान मिला, लेकिन थोड़ा पहले
परिसर
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, जैसा कि आधार में कहा गया है कि यह समान होता।