ฉันคิดว่าฉันพบวิธีแก้ปัญหา แต่ก่อนหน้าเล็กน้อย
หลักฐาน
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
ดังที่กล่าวไว้ในหลักฐานว่าคงเหมือนเดิม