ฉันคิดว่าฉันพบวิธีแก้ปัญหา แต่ก่อนหน้าเล็กน้อย
หลักฐาน
load_theme_textdomain()และload_child_theme_textdomain()โดยทั่วไปแล้วมีความแตกต่างเพียงอย่างเดียวคือเส้นทางเริ่มต้นที่ใช้:
- พวกเขาได้รับภาษาปัจจุบัน (โดยใช้
get_locale()) และเพิ่มไฟล์. mo แบบสัมพัทธ์ลงในพา ธ ที่ส่งเป็นอาร์กิวเมนต์
- จากนั้นพวกเขาเรียก
load_textdomain()ผ่านเป็นอาร์กิวเมนต์ทั้ง textdomain และเส้นทางผลลัพธ์ไปยังไฟล์. mo
จากนั้นload_textdomainโหลดไฟล์. mo ลงในตัวแปรโดเมนข้อความทั่วโลก แต่อย่างที่เราสามารถอ่านได้จากแหล่งที่มา :
หากโดเมนมีอยู่แล้วการแปลจะถูกรวมเข้าด้วยกัน
หากทั้งสองชุดมีสตริงเดียวกันการแปลจากค่าดั้งเดิมจะถูกนำมาใช้
ดังนั้นเพื่อแทนที่ / แทนที่เฉพาะสตริงของธีมพาเรนต์ที่เราต้องการเราต้องโหลดไฟล์. mo แบบกำหนดเองสำหรับเทมเพลตโดเมนหลักที่มีเพียงการแปลสตริงเหล่านั้นก่อนที่ธีมหลักจะโหลดไฟล์. mo
วิธีการแก้
ในที่สุดฉันก็สร้างโฟลเดอร์ที่มีชื่อของชุดรูปแบบหลัก (เพียงเพื่อความสะดวก) ในโฟลเดอร์ภาษาชุดรูปแบบของเด็กและวางไว้ในนั้นไฟล์. mo ที่กำหนดเองของฉันสำหรับผู้ปกครอง textdomain (หนึ่งสำหรับภาษาในxx_XX.moรูปแบบxx_XXรหัสภาษาอยู่ที่ไหน)
จากนั้นฉันเพิ่มบรรทัดในfunctions.phpไฟล์ชุดรูปแบบลูกของฉันระหว่างการafter_setup_themeดำเนินการใกล้กับบรรทัดที่โหลดไฟล์. mo สำหรับ textdomain ชุดรูปแบบลูกของฉัน:
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ดังที่กล่าวไว้ในหลักฐานว่าคงเหมือนเดิม