คุณสมบัติปลั๊กอินราคาแหล่งข้อมูล
เปลี่ยนภาษา
แหล่งข้อมูลวิธีแปลปลั๊กอิน WordPress (ทีละขั้นตอน)

วิธีแปลปลั๊กอิน WordPress (ทีละขั้นตอน)

SimplePoTranslate Team7 พฤษภาคม 2569
วิธีแปลปลั๊กอิน WordPress (ทีละขั้นตอน)

คุณพบปลั๊กอิน WordPress ที่สมบูรณ์แบบสำหรับโปรเจกต์ของคุณแล้ว มันทำงานได้ตรงตามที่คุณต้องการ รีวิวก็ดีเยี่ยม แต่เมื่อคุณเปิดใช้งาน มันกลับพบว่าปุ่ม ป้ายกำกับ และข้อความแสดงข้อผิดพลาดทั้งหมดเป็นภาษาอังกฤษ ผู้เยี่ยมชมชาวเยอรมัน ฝรั่งเศส หรือญี่ปุ่นของคุณกำลังจะเจอกับกำแพงข้อความที่พวกเขาอ่านไม่ออก

ข่าวดีก็คือ ปลั๊กอินที่สร้างมาอย่างดีส่วนใหญ่จะ translation-ready (พร้อมสำหรับการแปล) ซึ่งหมายความว่านักพัฒนาได้ห่อสตริงของพวกเขาไว้ในฟังก์ชัน Gettext โดยเฉพาะเพื่อให้คนอย่างคุณสามารถแปลได้ ความท้าทายคือการรู้ว่าไฟล์อยู่ที่ไหน จะตั้งชื่อไฟล์แปลของคุณว่าอะไร และจะวางไว้ที่ไหนเพื่อไม่ให้การอัปเดตปลั๊กอินครั้งต่อไปลบงานของคุณไป

คู่มือนี้จะแสดงวิธี แปลปลั๊กอิน WordPress ตั้งแต่ต้นจนจบ: การค้นหา text domain และโฟลเดอร์ภาษา การรับหรือสร้างเทมเพลต .pot การสร้างไฟล์ .po และ .mo ที่ตั้งชื่ออย่างถูกต้อง และการวางไฟล์เหล่านั้นในที่ที่ WordPress จะโหลดได้อย่างน่าเชื่อถือ เราจะครอบคลุมถึงปลั๊กอินประเภทหนึ่งที่วิธีการนี้ไม่สามารถแปลได้อย่างสมบูรณ์ เพื่อที่คุณจะได้ไม่ต้องเสียเวลาหลายชั่วโมงกับการต่อสู้กับกรณีที่เป็นไปไม่ได้

จะหาไฟล์แปลของปลั๊กอินได้อย่างไร?

ก่อนที่จะแปลอะไร คุณต้องมีข้อมูลสองส่วนจากปลั๊กอิน: text domain และ languages folder ของมัน Text domain คือสตริงเฉพาะที่ปลั๊กอินใช้เพื่อระบุการแปลของตัวเอง และ languages folder คือที่เก็บเทมเพลตต้นฉบับ

การระบุ Languages Folder และ Text Domain

เปิดไดเรกทอรีปลั๊กอินที่ wp-content/plugins/your-plugin/ และมองหาโฟลเดอร์ย่อย /languages ข้างใน คุณมักจะพบไฟล์ .pot ซึ่งเป็นเทมเพลตเปล่าที่มีสตริงที่แปลได้ทั้งหมด

หากต้องการยืนยัน text domain ให้เปิดไฟล์ PHP หลักของปลั๊กอินแล้วดูที่บล็อกส่วนหัว:

/**
 * Plugin Name: Awesome Plugin
 * Text Domain: awesome-plugin
 * Domain Path: /languages
 */

ที่นี่ text domain คือ awesome-plugin ค่านี้มีความสำคัญอย่างยิ่ง เพราะไฟล์แปลของคุณต้องมีค่านี้อยู่ในชื่อไฟล์ ไม่เช่นนั้น WordPress จะไม่จับคู่กับปลั๊กอิน คุณจะเห็นค่านี้ในการเรียกสตริงทุกที่ในโค้ด:

echo __( 'Settings saved successfully.', 'awesome-plugin' );

อาร์กิวเมนต์ที่สอง awesome-plugin คือ text domain อีกครั้ง ทุกสตริงที่ใช้ค่านี้สามารถแปลได้ด้วยแค็ตตาล็อกของคุณ หากสตริงในอินเทอร์เฟซของปลั๊กอินขาดตัวห่อนี้ ตัวอย่างเช่น นักพัฒนาที่เขียนโค้ด echo 'Save' โดยไม่มี __() สตริงนั้นจะไม่สามารถแปลได้เลย และไฟล์ .po ก็ไม่สามารถเข้าถึงได้ ปลั๊กอินที่มีชื่อเสียงส่วนใหญ่จะห่อทุกอย่างอย่างถูกต้อง แต่ถ้าคุณสังเกตเห็นสตริงที่ดื้อรั้นหนึ่งหรือสองสตริงที่ไม่ยอมแปล สาเหตุที่น่าจะเป็นไปได้คือตัวห่อ Gettext ที่หายไปในซอร์สโค้ด

วิธีรวดเร็วในการประเมินว่าปลั๊กอินพร้อมสำหรับการแปลจริงหรือไม่คือการตรวจสอบรายการในไดเรกทอรี WordPress.org ซึ่งจะแสดงเปอร์เซ็นต์การแปลและลิงก์ไปยังเทมเพลต /languages ปลั๊กอินที่มีโปรเจกต์การแปลที่ใช้งานอยู่มีแนวโน้มที่จะมีสตริงที่สะอาดและห่อหุ้มสมบูรณ์มากกว่าปลั๊กอินที่ถูกทอดทิ้ง

จะทำอย่างไรถ้าปลั๊กอินไม่มีไฟล์ POT?

ปลั๊กอินบางตัวจัดส่งโดยไม่มีเทมเพลต .pot หากโฟลเดอร์ /languages ว่างเปล่าหรือหายไป คุณต้องสร้างเทมเพลตด้วยตัวเองโดยการสแกนซอร์สโค้ดเพื่อหาสตริงที่แปลได้

เครื่องมือมาตรฐานสำหรับเรื่องนี้คือ WP-CLI ซึ่งจะแยกการเรียก Gettext ทั้งหมดลงในไฟล์ .pot ที่สดใหม่

wp i18n make-pot wp-content/plugins/awesome-plugin \
  wp-content/plugins/awesome-plugin/languages/awesome-plugin.pot

คำสั่งนี้จะสำรวจไฟล์ PHP และ JavaScript ของปลั๊กอิน ค้นหา __(), _e(), _n() และการเรียกที่เกี่ยวข้องทั้งหมด และเขียนเทมเพลตที่สมบูรณ์ หากคุณต้องการเส้นทางแบบกราฟิก Poedit Pro สามารถสแกนซอร์สโค้ดได้เช่นเดียวกัน ไม่ว่าด้วยวิธีใด ผลลัพธ์ที่ได้คือไฟล์ .pot ที่มีสตริงต้นฉบับทั้งหมดพร้อมการแปลที่ว่างเปล่า พร้อมที่จะเปลี่ยนเป็นไฟล์ภาษาจริง

การสร้างเทมเพลตของคุณเองมีประโยชน์แอบแฝง: มันจะจับสตริงที่นักพัฒนาต้นฉบับอาจลืมรวมไว้ในไฟล์ .pot ที่จัดส่ง ปลั๊กอินมีการพัฒนาอย่างรวดเร็ว และเทมเพลตที่มาพร้อมกับเวอร์ชัน 2.1 อาจขาดสตริงที่เพิ่มเข้ามาใน 2.4 การสร้างใหม่จากซอร์สโค้ดปัจจุบันรับประกันว่าแค็ตตาล็อกของคุณสะท้อนสิ่งที่ปลั๊กอินแสดงอยู่จริงในวันนี้ ไม่ใช่สิ่งที่มันแสดงเมื่อสองรุ่นที่แล้ว หากคุณดูแลการแปลสำหรับปลั๊กอินเมื่อเวลาผ่านไป การเรียกใช้ make-pot ใหม่หลังจากการอัปเดตที่สำคัญแต่ละครั้งเป็นนิสัยที่น่าเชื่อถือ

การสร้างไฟล์ PO และ MO ด้วยชื่อที่ถูกต้อง

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

สูตรชื่อไฟล์

สำหรับการแปลปลั๊กอิน รูปแบบคือ text-domain-locale ดังนั้นสำหรับ text domain awesome-plugin ที่แปลเป็นภาษาเยอรมัน ไฟล์จะต้องตั้งชื่อดังนี้:

awesome-plugin-de_DE.po
awesome-plugin-de_DE.mo

รหัส locale คือรหัสภาษาของไซต์ WordPress: de_DE สำหรับภาษาเยอรมัน, fr_FR สำหรับภาษาฝรั่งเศส, es_ES สำหรับภาษาสเปน, pt_BR สำหรับภาษาโปรตุเกสแบบบราซิล หากตั้งค่า locale ผิด WordPress จะข้ามไฟล์ของคุณไปอย่างเงียบๆ คุณสร้างไฟล์เหล่านี้จากเทมเพลต .pot ในโปรแกรมแก้ไขเช่น Poedit ซึ่งจะคอมไพล์ไฟล์ไบนารี .mo โดยอัตโนมัติเมื่อคุณบันทึก หากคุณยังใหม่กับโปรแกรมแก้ไขนั้น คู่มือ Poedit ฉบับสมบูรณ์ จะแนะนำการสร้างการแปลจากเทมเพลตทีละขั้นตอน

จะวางไฟล์ไว้ที่ไหนเพื่อไม่ให้การอัปเดตลบไฟล์ออกไป

มีสองตำแหน่งที่เป็นไปได้ และการเลือกตำแหน่งที่ถูกต้องมีความสำคัญ

# RISKY: inside the plugin — wiped on every plugin update
wp-content/plugins/awesome-plugin/languages/awesome-plugin-de_DE.mo

# SAFE: the global languages override folder — survives updates
wp-content/languages/plugins/awesome-plugin-de_DE.mo

ควรใช้ wp-content/languages/plugins/ เสมอ WordPress จะตรวจสอบไดเรกทอรีการแทนที่นี้ก่อน และเนื่องจากมันอยู่นอกโฟลเดอร์ปลั๊กอิน การอัปเดตปลั๊กอินจะไม่กระทบกับการแปลของคุณ ไฟล์ที่วางอยู่ในโฟลเดอร์ของปลั๊กอินจะถูกเขียนทับทันทีที่ติดตั้งเวอร์ชันใหม่

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

WordPress โหลดการแปลของคุณอย่างไร

ปลั๊กอินที่พร้อมสำหรับการแปลจะบอก WordPress ให้โหลดแค็ตตาล็อกโดยการเรียกใช้ load_plugin_textdomain() ในระหว่างการเริ่มต้น:

add_action( 'init', function() {
    load_plugin_textdomain(
        'awesome-plugin',
        false,
        dirname( plugin_basename( __FILE__ ) ) . '/languages'
    );
} );

สำหรับปลั๊กอินสมัยใหม่ส่วนใหญ่บน WordPress 4.6 และใหม่กว่า คุณไม่จำเป็นต้องแตะต้องสิ่งนี้ WordPress จะโหลดการแปลจาก wp-content/languages/plugins/ โดยอัตโนมัติตราบใดที่ชื่อไฟล์และ locale ของไซต์ของคุณตรงกัน หากการแปลที่เสร็จสิ้นของคุณยังไม่ปรากฏ สาเหตุเกือบทั้งหมดคือชื่อไฟล์ไม่ตรงกัน, ไฟล์ .mo เก่า, หรือภาษาของไซต์ถูกตั้งค่า locale ผิด คู่มือการแก้ไขปัญหาการแปลไม่แสดงใน WordPress ของเราจะอธิบายทุกจุดที่ล้มเหลวเหล่านี้

ปลั๊กอินที่เก็บสตริงในฐานข้อมูล

นี่คือข้อจำกัดที่สำคัญ วิธีการ Gettext แปลได้เฉพาะสตริงที่อยู่ในโค้ดของปลั๊กอิน ปลั๊กอินบางตัว โดยเฉพาะอย่างยิ่งเครื่องมือสร้างแบบฟอร์ม เครื่องมือสร้างหน้า และส่วนขยายอีคอมเมิร์ซ ให้คุณสร้างเนื้อหา (ป้ายกำกับแบบฟอร์ม, คุณลักษณะของผลิตภัณฑ์, ข้อความที่กำหนดเอง) ที่ถูกบันทึกในฐานข้อมูล WordPress สตริงเหล่านั้นเป็นข้อมูลที่ผู้ใช้สร้างขึ้น ไม่ใช่ส่วนหนึ่งของ .pot ดังนั้นไฟล์ .po จึงไม่สามารถเข้าถึงได้ สำหรับเนื้อหาฐานข้อมูล คุณต้องใช้ปลั๊กอินหลายภาษาเช่น WPML หรือ Polylang หรือคุณสมบัติการแปลสตริงของปลั๊กอินเอง ควรทดสอบเสมอว่าสตริงที่กำหนดอยู่ในโค้ดหรือในฐานข้อมูลก่อนที่จะสรุปว่าไฟล์ .po สามารถแก้ไขได้

การทดสอบง่ายๆ จะบอกคุณว่าคุณกำลังจัดการกับสตริงชนิดใด หากข้อความเป็นสิ่งที่คุณพิมพ์ลงในฟิลด์การตั้งค่า, ป้ายกำกับแบบฟอร์มที่คุณสร้าง, ข้อความขอบคุณที่กำหนดเอง, ชื่อผลิตภัณฑ์ มันคือเนื้อหาฐานข้อมูลและไฟล์ .po ไม่สามารถแตะต้องได้ หากข้อความเป็นส่วนหนึ่งของอินเทอร์เฟซในตัวของปลั๊กอิน, ป้ายกำกับปุ่ม, ข้อผิดพลาดในการตรวจสอบความถูกต้อง, การแจ้งเตือนของผู้ดูแลระบบที่มาพร้อมกับปลั๊กอินเอง มันอยู่ในโค้ดและไฟล์ .po เป็นเครื่องมือที่เหมาะสมอย่างยิ่ง การกำหนดเส้นแบ่งนี้ตั้งแต่เนิ่นๆ จะช่วยประหยัดเวลาหลายชั่วโมงของความผิดหวัง เพราะไม่ว่าการแก้ไขไฟล์ .po ที่สมบูรณ์แบบแค่ไหนก็ไม่สามารถแปลสตริงที่ปลั๊กอินดึงมาจากฐานข้อมูลในขณะรันไทม์ได้เลย

การแปลในขนาดใหญ่โดยไม่ต้องทำงานด้วยตนเอง

การแปลปลั๊กอินหนึ่งตัวเป็นภาษาเดียวด้วยมือสามารถจัดการได้ การแปลเป็นสิบภาษา หรือการแปลชุดปลั๊กอินทั้งหมดสำหรับไซต์ลูกค้า จะกลายเป็นงานที่ซ้ำซากจำเจหลายวัน และการแก้ไขด้วยตนเองทุกครั้งมีความเสี่ยงที่จะทำผิดพลาดกับตัวยึดตำแหน่งเช่น %s หรือ %1$s และทำให้ผลลัพธ์เสียหายได้

นี่คือจุดที่เวิร์กโฟลว์บนคลาวด์เข้ามาเปลี่ยนสมการ อัปโหลดไฟล์ .po หรือ .pot ของปลั๊กอินไปยัง SimplePoTranslate เลือกภาษาเป้าหมายของคุณ และ context-aware AI จะแปลแค็ตตาล็อกทั้งหมดในขณะที่ Syntax Locking จะตรึงตัวยึดตำแหน่ง, แท็ก HTML และโทเค็นโค้ดทุกตัวไม่ให้เสียหาย Smart Batching จัดการแค็ตตาล็อกขนาดใหญ่ในการทำงานครั้งเดียว และคุณสามารถดาวน์โหลดไฟล์ ZIP ที่มี .po, .mo, .json, .php และ .xliff รวมกัน โดยจัดรูปแบบอย่างถูกต้องและพร้อมที่จะนำไปวางใน wp-content/languages/plugins/ มันทำงานทั้งหมดบนคลาวด์ ดังนั้นจึงไม่มีการติดตั้งบนเดสก์ท็อปและไม่มีสิ่งรบกวนบนไซต์ของคุณ

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

ใช้เส้นทางด้วยตนเองเมื่อคุณมีปลั๊กอินเดียวและภาษาเดียว ใช้คลาวด์เมื่อคุณต้องการหลายภาษาอย่างรวดเร็ว โดยไม่แลกกับความปลอดภัยของตัวยึดตำแหน่ง

พร้อมที่จะแปลปลั๊กอิน WordPress ของคุณเป็นทุกภาษาที่ผู้ชมของคุณพูด โดยไม่ทำให้ตัวแปรใดๆ เสียหายแล้วหรือยัง? ลองใช้ SimplePoTranslate ฟรี — ไม่ต้องใช้บัตรเครดิต ชั้นบริการฟรีช่วยให้คุณสามารถแปลไฟล์ .po ของปลั๊กอินแรกได้ในไม่กี่นาที พร้อมกับการล็อกไวยากรณ์ (Syntax Locking) บนทุกสตริง

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

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