คุณสมบัติปลั๊กอินราคาแหล่งข้อมูล
เปลี่ยนภาษา
แหล่งข้อมูลวิธีแก้ไขการแปลแบบ Fuzzy ในไฟล์ .po ของ WordPress

วิธีแก้ไขการแปลแบบ Fuzzy ในไฟล์ .po ของ WordPress

SimplePoTranslate Team11 พฤษภาคม 2569
วิธีแก้ไขการแปลแบบ Fuzzy ในไฟล์ .po ของ WordPress

คุณแปลทุกสตริงแล้ว คุณบันทึกไฟล์ อัปโหลดไฟล์ .mo และรีเฟรชเว็บไซต์ของคุณแล้ว แต่กระนั้น ป้ายกำกับบางส่วนก็ยังคงเป็นภาษาอังกฤษอย่างดื้อรั้น คุณเปิดไฟล์ .po ค้นหาสตริง และมันก็อยู่ที่นั่น แปลได้อย่างสมบูรณ์แบบ แล้วทำไม WordPress ถึงไม่สนใจล่ะ?

คำตอบเกือบจะตลอดเวลาคือแฟล็กเล็กๆ ที่ซ่อนอยู่เหนือรายการ: #, fuzzy การแปลแบบ Fuzzy คือวิธีที่ gettext บอกว่า "การแปลนี้อาจผิด ดังนั้นอย่าเพิ่งเชื่อมัน" และที่สำคัญ WordPress จะปฏิเสธที่จะแสดงสตริง fuzzy บนเว็บไซต์จริง โดยจะกลับไปใช้ภาษาอังกฤษต้นฉบับแทน นี่คือหนึ่งในสาเหตุที่คนส่วนใหญ่เข้าใจผิดมากที่สุดของปัญหา "การแปลของฉันไม่แสดง"

คู่มือนี้จะอธิบายอย่างละเอียดว่าแฟล็ก การแปลแบบ Fuzzy หมายถึงอะไร ทำไมมันถึงปรากฏขึ้นเรื่อยๆ ในแค็ตตาล็อกของคุณ และวิธีค้นหาและล้างสตริง fuzzy ใน Poedit, บนบรรทัดคำสั่ง และในขนาดใหญ่ทั่วทั้งรายการที่ค้างอยู่ เมื่อคุณเข้าใจกลไกนี้ ความลึกลับของการแปลที่หายไปก็จะหมดไป

แฟล็ก Fuzzy หมายถึงอะไรกันแน่?

แฟล็ก fuzzy เป็นเครื่องหมายที่ gettext เพิ่มลงในรายการการแปลเพื่อระบุว่าการแปลนั้นไม่แน่นอนและต้องการการตรวจสอบจากมนุษย์ ในไฟล์ .po ดิบ มันจะปรากฏเป็นความคิดเห็นพิเศษที่อยู่เหนือสตริงโดยตรง

#: includes/cart.php:88
#, fuzzy
msgid "Add to cart"
msgstr "Im Warenkorb"

บรรทัด #, fuzzy นั้นจะบอกเครื่องมือที่รองรับ gettext ทุกชนิด รวมถึง WordPress ด้วยว่า msgstr ที่อยู่ด้านล่างนั้นเป็นแบบชั่วคราว การแปลมีอยู่จริง แต่ gettext ไม่ถือว่าได้รับการยืนยันแล้ว

ทำไม WordPress ถึงข้ามสตริง Fuzzy

นี่คือพฤติกรรมที่ทำให้ทุกคนแปลกใจ เมื่อ WordPress คอมไพล์หรืออ่านไฟล์ .mo มันจะถือว่ารายการ fuzzy เป็น ไม่ได้แปล สตริงนั้นมีอยู่ในไฟล์ทางเทคนิค แต่ WordPress จงใจที่จะละเว้นมันและแสดง msgid ต้นฉบับแทน

ดังนั้นจากมุมมองของคุณ การแปลนั้น "เสร็จสิ้น" แล้ว มันอยู่ในไฟล์นั้นเลย แต่จากมุมมองของ WordPress สตริงนั้นไม่มีการแปลที่น่าเชื่อถือ ดังนั้นมันจึงแสดงแหล่งที่มาที่เป็นภาษาอังกฤษ นี่คือสาเหตุที่แค็ตตาล็อกที่ดูเหมือนจะเสร็จสมบูรณ์แล้วยังคงแสดงข้อความที่ไม่ได้แปลบนส่วนหน้าได้

การออกแบบนี้ตั้งใจให้เป็นเช่นนั้น และพูดตามตรงก็สมเหตุสมผล จุดประสงค์ทั้งหมดของแฟล็ก fuzzy คือการป้องกันการแปลที่ยังไม่ได้รับการตรวจสอบและอาจผิดพลาดไม่ให้เผยแพร่สู่สาธารณะโดยเงียบๆ ลองนึกภาพสตริงที่เดิมอ่านว่า "Delete account" (ลบบัญชี) และต่อมาเปลี่ยนเป็น "Deactivate account" (ปิดใช้งานบัญชี) หาก gettext ยังคงเก็บการแปลเก่าไว้โดยไม่ตรวจสอบ ผู้ใช้อาจเห็นปุ่มที่เขียนว่า "Delete account" ซึ่งจริงๆ แล้วแค่ปิดใช้งาน ซึ่งเป็นการไม่ตรงกันที่อันตราย ด้วยการซ่อนสตริง fuzzy, gettext บังคับให้มนุษย์ยืนยันว่าการแปลยังคงตรงกับความหมายใหม่ก่อนที่จะไปถึงใคร แฟล็กนี้เป็นกลไกด้านความปลอดภัย ไม่ใช่ข้อผิดพลาด

ทำไมแฟล็ก Fuzzy ถึงปรากฏขึ้นเรื่อยๆ?

แฟล็ก fuzzy ไม่ได้เกิดขึ้นแบบสุ่ม มันถูกสร้างขึ้นโดยอัตโนมัติโดยเครื่องมือ gettext ในสองสถานการณ์หลัก และการทำความเข้าใจทั้งสองสิ่งจะช่วยให้คุณรู้วิธีป้องกันได้

สตริงต้นฉบับเปลี่ยนไป

สาเหตุที่พบบ่อยที่สุดคือการอัปเดตแหล่งที่มา ลองนึกภาพนักพัฒนาเปลี่ยนสตริงในปลั๊กอินเวอร์ชันถัดไปจาก "Add to cart" เป็น "Add to basket" เมื่อคุณรวมเทมเพลตใหม่เข้ากับการแปลที่มีอยู่ของคุณ gettext จะเห็นว่าแหล่งที่มาไม่ตรงกับสิ่งที่คุณแปลไว้แต่แรก แทนที่จะทิ้งการแปลเก่าของคุณ มันจะเก็บไว้แต่ทำเครื่องหมายว่า fuzzy โดยพื้นฐานแล้วคือบอกว่า: "ภาษาอังกฤษเปลี่ยนไปแล้ว โปรดตรวจสอบอีกครั้งว่าการแปลของคุณยังคงเข้ากันได้หรือไม่"

การจับคู่โดยอัตโนมัติด้วย Translation Memory และ msgmerge

สาเหตุที่สองคือการจับคู่แบบ fuzzy ระหว่างการรวมไฟล์ เครื่องมือ msgmerge จะอัปเดตไฟล์การแปลเก่ากับเทมเพลตใหม่ และเมื่อพบสตริงต้นฉบับที่คล้ายกันแต่ไม่เหมือนกับสตริงก่อนหน้า มันจะคัดลอกการแปลเก่ามาและทำเครื่องหมายว่า fuzzy

# Merge a new template into an existing translation.
# Similar-but-changed strings get marked #, fuzzy automatically.
msgmerge --update awesome-plugin-de_DE.po awesome-plugin.pot

Translation Memory ในโปรแกรมแก้ไขบนเดสก์ท็อปก็ทำงานในลักษณะเดียวกัน: เมื่อเติมคำแนะนำโดยอัตโนมัติจากคำที่ใกล้เคียง มันจะทำเครื่องหมายผลลัพธ์ว่า fuzzy เพื่อให้คุณจำได้ว่าต้องตรวจสอบ ในทั้งสองกรณี แฟล็กกำลังทำหน้าที่ของมัน ปัญหาคือรายการ fuzzy เหล่านั้นยังคงไม่ได้ถูกตรวจสอบ และ WordPress ก็ซ่อนมันไว้เงียบๆ

มีแหล่งที่มาที่สามที่ซับซ้อนกว่าที่ควรทราบ: เครื่องมือคัดลอก-วางและการนำเข้าจำนวนมาก แพลตฟอร์มการแปลและสคริปต์นำเข้าบางตัวจะทำเครื่องหมายทุกรายการว่าเป็น fuzzy โดยค่าเริ่มต้นเพื่อเป็นการป้องกันไว้ก่อน โดยคาดหวังให้มนุษย์ยืนยันแต่ละรายการหลังจากนั้น หากคุณนำเข้าแค็ตตาล็อกจากระบบอื่นแล้วพบว่าทุกสตริงกลายเป็น fuzzy ทันที นี่มักจะเป็นสาเหตุ การแปลอาจจะดีสมบูรณ์แบบ แต่จนกว่าแฟล็กจะถูกล้างออก ก็จะไม่มีการแปลใดปรากฏบนเว็บไซต์ของคุณ การทราบแหล่งที่มาของแฟล็กจะช่วยให้คุณทราบว่าคุณจำเป็นต้องตรวจสอบแต่ละรายการอย่างแท้จริงหรือไม่ หรือว่าการล้างจำนวนมากอย่างมั่นใจนั้นปลอดภัย

คุณจะค้นหาและแก้ไขสตริง Fuzzy ได้อย่างไร?

การล้างสตริง fuzzy หมายถึงการตรวจสอบแต่ละรายการ และเมื่อคุณยืนยันว่าการแปลถูกต้องแล้ว ให้ลบแฟล็กออก มีสามวิธีที่ใช้งานได้จริงในการดำเนินการนี้ ขึ้นอยู่กับขนาดของงาน

การแก้ไขสตริง Fuzzy ใน Poedit

Poedit ทำให้เรื่องนี้ง่ายที่สุด เปิดไฟล์ .po และใช้การควบคุมการค้นหาและตัวกรองเพื่อแสดงเฉพาะรายการ fuzzy ซึ่งจะถูกทำเครื่องหมายด้วยสี (โดยปกติจะเป็นสีส้ม) เพื่อให้สังเกตเห็นได้ทันที คลิกแต่ละรายการ ยืนยันหรือแก้ไขการแปล จากนั้นปิดสถานะ fuzzy ด้วยแป้นพิมพ์ลัด (แก้ไข จากนั้น "Translation is Fuzzy" หรือแป้นพิมพ์ลัดที่แสดงในเมนู) เมื่อคุณบันทึก Poedit จะคอมไพล์ไฟล์ .mo ที่สะอาดอีกครั้ง และสตริงที่ได้รับการยืนยันแล้วจะแสดงบนเว็บไซต์ของคุณ หากคุณยังใหม่กับโปรแกรมแก้ไขนั้น คู่มือ Poedit ฉบับสมบูรณ์ จะอธิบายขั้นตอนการทำงานของการกรองและการตรวจสอบอย่างละเอียด

การแก้ไขสตริง Fuzzy บนบรรทัดคำสั่ง

สำหรับการทำงานอัตโนมัติหรือแค็ตตาล็อกขนาดใหญ่ การใช้บรรทัดคำสั่งจะเร็วกว่า คุณสามารถนับรายการ fuzzy และเมื่อคุณยืนยันเป็นจำนวนมากแล้ว ให้ลบแฟล็กออกเพื่อให้ WordPress โหลดรายการเหล่านั้นได้

# Count how many fuzzy strings remain
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po | grep -c "msgid"

# Clear all fuzzy flags (only after you trust the translations)
msgattrib --clear-fuzzy --empty awesome-plugin-de_DE.po \
  --output-file=awesome-plugin-de_DE.po

โปรดระมัดระวังในการล้างข้อมูลจำนวนมาก การลบแฟล็ก fuzzy โดยไม่ตรวจสอบการแปลจะทำให้จุดประสงค์ของแฟล็กไม่เกิดผล และอาจส่งข้อความที่ผิดพลาดไปยังผู้ใช้ของคุณได้อย่างแท้จริง ใช้วิธีบรรทัดคำสั่งเมื่อคุณเชื่อถือแหล่งที่มาของการแปล และใช้วิธี Poedit แบบแมนนวลเมื่อคุณไม่เชื่อถือ

วิธีที่ปลอดภัยและอยู่ตรงกลางคือการส่งออกสตริง fuzzy ไปยังไฟล์แยกต่างหาก ตรวจสอบเฉพาะสตริงเหล่านั้น แล้วรวมกลับเข้าไปใหม่ ซึ่งจะทำให้การแปลที่ได้รับการยืนยันของคุณยังคงเดิมในขณะที่คุณมุ่งเน้นเฉพาะรายการที่ต้องการความสนใจจริงๆ

# Extract only the fuzzy entries for focused review
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po \
  --output-file=fuzzy-only.po

การตรวจสอบสตริงแยกกันห้าสิบสตริงมีโอกาสเกิดข้อผิดพลาดน้อยกว่าการเลื่อนดูแค็ตตาล็อกที่มีเป็นพันบรรทัดเพื่อค้นหาแถบสีส้ม และยังให้บันทึกที่ชัดเจนว่ามีการเปลี่ยนแปลงอะไรบ้างในการอัปเดตล่าสุด

หลังจากล้างแฟล็กแล้ว ให้บันทึกซ้ำหรือคอมไพล์ไฟล์ .mo ใหม่เสมอ สถานะ fuzzy อยู่ในไฟล์ .po แต่ WordPress อ่านไฟล์ไบนารี .mo ดังนั้นจนกว่าคุณจะสร้างใหม่ ส่วนหน้าของคุณจะยังคงแสดงภาษาอังกฤษแม้ว่าไฟล์ .po จะดูสะอาดก็ตาม Poedit จะคอมไพล์ใหม่โดยอัตโนมัติเมื่อบันทึก; บนบรรทัดคำสั่งคุณรัน msgfmt awesome-plugin-de_DE.po -o awesome-plugin-de_DE.mo การลืมขั้นตอนการคอมไพล์ขั้นสุดท้ายนี้เป็นหนึ่งในสาเหตุที่พบบ่อยที่สุดที่ทำให้แค็ตตาล็อกที่เพิ่งล้าง fuzzy ไปแล้วยังไม่ปรากฏขึ้น คือการแปลได้รับการยืนยันในไฟล์ต้นฉบับ แต่ไบนารีที่เว็บไซต์โหลดจริงนั้นล้าสมัย

โปรดทราบว่ารายการ fuzzy มักจะปรากฏควบคู่ไปกับสตริงพหูพจน์ ซึ่ง msgid_plural ที่เปลี่ยนไปสามารถทำเครื่องหมายบล็อกพหูพจน์ทั้งหมดว่าเป็น fuzzy ได้ หากรายการ fuzzy ที่ค้างอยู่ของคุณมีจำนวนและปริมาณมาก คู่มือของเราเกี่ยวกับ พหูพจน์ Gettext และการทำพหูพจน์ที่ซับซ้อน จะอธิบายว่าทำไมรายการเหล่านั้นถึงเปราะบางเป็นพิเศษในระหว่างการรวมไฟล์

การล้างรายการ Fuzzy ที่ค้างอยู่เป็นจำนวนมาก

สตริง fuzzy เพียงหนึ่งสตริงใช้เวลาแก้ไขสามสิบวินาที แค็ตตาล็อกที่มีสตริง fuzzy สี่ร้อยสตริงหลังการอัปเดตปลั๊กอินครั้งใหญ่เป็นปัญหาที่แตกต่างกัน และเมื่ออยู่ในการแปลหลายสิบภาษา มันจะกลายเป็นคอขวดที่แท้จริง การล้างแฟล็กจำนวนมากโดยไม่ตรวจสอบคือวิธีที่การแปลที่ผิดพลาดจะไปถึงการใช้งานจริง

ทางออกที่สะอาดกว่าคือการแปลรายการ fuzzy ใหม่ทั้งหมด แทนที่จะประทับตรายางการจับคู่ที่ล้าสมัย เมื่อคุณเรียกใช้แค็ตตาล็อกผ่าน SimplePoTranslate, AI ที่เข้าใจบริบท จะสร้างการแปลที่ถูกต้องและได้รับการยืนยันสำหรับทุกสตริงที่เปลี่ยนแปลง ดังนั้นคุณไม่เพียงแค่ลบแฟล็กเตือน แต่คุณกำลังแทนที่การจับคู่ที่ไม่แน่นอนด้วยการแปลจริง Syntax Locking จะรักษาสตริง %s, %1$s, {count} และแท็ก HTML ทุกตัวให้คงเดิมในระหว่างกระบวนการ และ Smart Batching จะประมวลผลแค็ตตาล็อกหลังการอัปเดตขนาดใหญ่ได้ในครั้งเดียว คุณจะได้รับไฟล์ ZIP ที่สะอาดพร้อมไฟล์ .po, .mo, .json, .php และ .xliff โดยไม่มีรายการ fuzzy ที่ค้างอยู่ พร้อมสำหรับการนำไปใช้งานจากคลาวด์

ควรแยกแยะเรื่องนี้ออกจากคำถามที่กว้างกว่าว่าทำไมการแปลถึงไม่ปรากฏเลย แฟล็ก fuzzy เป็นสาเหตุหนึ่งที่เฉพาะเจาะจง แต่ไฟล์ .mo ที่หายไป ชื่อไฟล์ผิดพลาด และการไม่ตรงกันของโลแคลก็ทำให้เกิดอาการเดียวกันได้ สำหรับรายการตรวจสอบการวินิจฉัยทั้งหมด โปรดดู คู่มือการแก้ไขปัญหาสำหรับการแปลที่ไม่แสดงใน WordPress ของเรา ซึ่งถือว่าสตริง fuzzy เป็นหนึ่งในรายการที่ใหญ่กว่า

พร้อมที่จะล้างรายการ fuzzy ที่ค้างอยู่ทั้งหมดและทำให้ทุกสตริงปรากฏบนเว็บไซต์ของคุณแล้วหรือยัง? ลองใช้ SimplePoTranslate ฟรี — ไม่ต้องใช้บัตรเครดิต ระดับฟรีจะแปลไฟล์ .po ของคุณใหม่ทั้งหมด โดยแทนที่การจับคู่แบบ fuzzy ที่ไม่แน่นอนด้วยการแปลที่สะอาดและได้รับการยืนยัน

หัวข้อที่เกี่ยวข้อง

แชร์บทความนี้