REEID บทบรรณาธิการ
เนื้อหาแบบไดนามิกคือจุดที่การแปล WordPress เริ่มยาก
การแปล WordPress นั้นตรงไปตรงมาเมื่อข้อความอยู่ในเนื้อหาโพสต์ แต่เว็บไซต์จริงจำนวนมากพึ่งพาผลลัพธ์ที่ประกอบขึ้นขณะรันไทม์: วิดเจ็ต ชอร์ตโค้ด บล็อกที่เรนเดอร์แบบไดนามิก ข้อความแจ้งที่ปลั๊กอินสร้างขึ้น ชิ้นส่วนที่โหลดผ่าน AJAX พื้นที่บัญชี และส่วนอื่นๆ ที่ไม่ได้ถูกเก็บเป็นเนื้อหาที่แก้ไขได้ตามปกติ พื้นที่เหล่านี้มักต้องการการจัดการหลายภาษาที่ชัดเจน เพราะระบบแปลทำงานได้เฉพาะกับสิ่งที่สามารถระบุ จัดเก็บ และจับคู่กับบริบทภาษาที่ถูกต้องได้เท่านั้น
ข้อสรุปสำคัญ
หากเนื้อหาถูกสร้างขึ้นนอกตัวแก้ไขโพสต์ปกติ การแปลมักขึ้นอยู่กับว่าระบบสามารถเปิดเผยเนื้อหานั้นเป็นข้อมูลที่แปลได้ เชื่อมโยงกับภาษาที่ถูกต้อง และรักษาสัญญาณการกำหนดเส้นทาง แคนนอนิคัล และความสัมพันธ์ที่ถูกต้องเมื่อหน้าเว็บถูกเรนเดอร์ได้หรือไม่
ทำไมการแปลโพสต์ทั่วไปจึงหยุดอยู่ที่ขอบเขตของตัวแก้ไข
ส่วนที่ง่ายที่สุดของการแปล WordPress คือข้อความที่อยู่ในเนื้อหาโพสต์ เพราะมีวัตถุต้นทางที่ชัดเจน การกำหนดภาษาแบบคงที่ และตำแหน่งที่คาดเดาได้ในตัวแก้ไข เครื่องมือแปลมักจะอ่านเนื้อหานั้น สร้างเวอร์ชันเฉพาะภาษา และคงความสัมพันธ์ระหว่างเวอร์ชันต่างๆ ไว้ได้
เนื้อหาแบบไดนามิกทำลายโมเดลนั้น หากข้อความถูกประกอบขึ้นภายหลังโดยวิดเจ็ต ชอร์ตโค้ด คอลแบ็กการเรนเดอร์ของบล็อก เทมเพลตของปลั๊กอิน หรือคำขอ AJAX ข้อความนั้นอาจไม่เคยมีอยู่เป็นฟิลด์ที่แก้ไขได้เพียงรายการเดียวในโพสต์เอง ซึ่งหมายความว่าชั้นการแปลไม่สามารถพึ่งพากฎการจัดเก็บและการจับคู่แบบเดียวกับที่ใช้กับเนื้อหาทั่วไปได้
ผลลัพธ์เชิงปฏิบัติคือพฤติกรรมหลายภาษาขึ้นอยู่กับว่าพื้นที่แบบไดนามิกนั้นเปิดเผยอินพุตที่แปลได้ จัดเก็บข้อมูลที่รับรู้ภาษา หรือสามารถเรนเดอร์แตกต่างกันตามภาษาในเวลาที่มีการร้องขอได้หรือไม่ หากทำไม่ได้ หน้าแปลแล้วอาจยังคงมีชิ้นส่วนที่ไม่ถูกแปลอยู่ แม้ว่าโพสต์หลักจะถูกทำให้เป็นภาษาท้องถิ่นอย่างถูกต้องแล้วก็ตาม
ส่วนใดของ WordPress ที่มักต้องการการจัดการความเข้ากันได้แบบชัดเจน
วิดเจ็ตและแถบด้านข้างมักมีข้อความที่กำหนดค่าจากนอกตัวแก้ไขโพสต์หลัก ดังนั้นการแปลจึงต้องเข้าถึงการตั้งค่าของธีมหรือปลั๊กอิน ไม่ใช่แค่เนื้อหาโพสต์เท่านั้น
ชอร์ตโค้ดอาจยากเป็นพิเศษ เพราะผลลัพธ์ที่มองเห็นได้ถูกสร้างจากแอตทริบิวต์ ตัวเลือกที่จัดเก็บไว้ หรือข้อมูลของปลั๊กอิน ซึ่งอาจไม่ได้ถูกแทนด้วยข้อความหน้าเว็บที่แก้ไขได้
บล็อกอาจเป็นแบบคงที่หรือแบบไดนามิกก็ได้ บล็อกแบบคงที่จะเก็บเนื้อหาไว้ในโพสต์ แต่บล็อกแบบไดนามิกอาจเรนเดอร์จากตรรกะฝั่งเซิร์ฟเวอร์ ซึ่งหมายความว่าข้อความที่มองเห็นได้ถูกสร้างขึ้นในเวลารันไทม์และอาจต้องการการรองรับการแปลแยกต่างหาก
ผลลัพธ์ที่ปลั๊กอินสร้างขึ้น ข้อความแจ้ง พื้นที่บัญชี และชิ้นส่วนที่โหลดผ่าน AJAX ก็เป็นจุดที่ล้มเหลวได้บ่อยเช่นกัน เพราะสิ่งเหล่านี้ถูกประกอบจากข้อมูลที่ปลั๊กอินเป็นเจ้าของหรือสถานะเฉพาะคำขอ แทนที่จะมาจากเนื้อหาหลักของหน้าเพียงอย่างเดียว
พื้นที่เหล่านี้ไม่ได้ถูกแปลผิดโดยอัตโนมัติในทุกการตั้งค่า แต่บ่อยครั้งมันอยู่นอกเส้นทางการแปลปกติ จึงต้องมีการจัดการความเข้ากันได้อย่างชัดเจนเพื่อให้ทำงานได้ถูกต้องในทุกภาษา
ปัญหาทางวิศวกรรมหลัก: การแปลต้องการข้อมูลที่คงที่ ไม่ใช่แค่ข้อความที่มองเห็นได้
ระบบหลายภาษาจะสามารถแปลได้เฉพาะสิ่งที่มันระบุและเชื่อมโยงกับภาษาได้เท่านั้น ซึ่งโดยทั่วไปหมายถึงข้อมูลต้นทางที่คงที่ ความสัมพันธ์ของวัตถุที่คาดเดาได้ และวิธีสร้างผลลัพธ์เดิมขึ้นมาอีกครั้งในภาษาอื่นโดยไม่ทำให้หน้าเว็บเสียหาย
เนื้อหาแบบไดนามิกมักขึ้นอยู่กับเมตาของโพสต์ ฟิลด์กำหนดเอง ระเบียนที่ปลั๊กอินเป็นเจ้าของ หรือเงื่อนไขรันไทม์ หากอินพุตเหล่านั้นไม่ได้ถูกแมปกับค่าที่เทียบเท่ากันในแต่ละภาษา หน้าแปลแล้วอาจแสดงข้อความผิด วัตถุที่เชื่อมโยงผิด หรือส่วนผสมของหลายภาษา
นี่คือเหตุผลที่ความสัมพันธ์ของเนื้อหามีความสำคัญ หน้าแปลแล้วไม่ใช่แค่ปัญหาการแทนที่ข้อความเท่านั้น แต่ยังเป็นปัญหาการกำหนดเส้นทางและการเชื่อมโยงด้วย ระบบต้องรู้ว่าเมื่อผู้เข้าชมอยู่บนเวอร์ชันภาษาท้องถิ่นของไซต์ ควรใช้โพสต์ เทอม เทมเพลต หรือวัตถุที่เกี่ยวข้องที่แปลแล้วใด
เมื่อการแมปนั้นไม่สมบูรณ์ โหมดความล้มเหลวมักเป็นการแปลไม่ครบมากกว่าล้มเหลวทั้งหมด: หน้าโหลดขึ้นมา แต่บางชิ้นส่วนยังคงอยู่ในภาษาต้นทาง ชี้ไปยังตัวแปรภาษาที่ผิด หรือแสดงป้ายกำกับและลิงก์ที่ไม่สอดคล้องกัน
การเรนเดอร์ขณะรันไทม์เปลี่ยนเวิร์กโฟลว์การแปล
การเรนเดอร์แบบไดนามิกหมายความว่า HTML สุดท้ายยังไม่ถูกกำหนดอย่างสมบูรณ์เมื่อบันทึกโพสต์ แต่หน้าอาจถูกประกอบในภายหลังจากเทมเพลต ตรรกะการเรนเดอร์ของบล็อก การตั้งค่าของปลั๊กอิน หรือบริบทของคำขอ
สิ่งนี้เปลี่ยนเวิร์กโฟลว์การแปลในสองทาง ทางแรก ระบบแปลอาจต้องแปลแหล่งข้อมูลพื้นฐานแทนผลลัพธ์ที่เรนเดอร์แล้ว ทางที่สอง ระบบอาจต้องประเมินผลลัพธ์ใหม่ในแต่ละคำขอ เพื่อให้เวอร์ชันภาษาที่ถูกต้องถูกประกอบขึ้นในเวลารันไทม์
สิ่งนี้มีประโยชน์เมื่อเทมเพลตเดียวต้องรองรับหลายภาษา แต่ก็สร้างความเสี่ยงด้านการพึ่งพาเช่นกัน หากคอมโพเนนต์แบบไดนามิกอ่านค่าจากตัวเลือกที่ใช้ร่วมกัน การตั้งค่ากลาง หรือระเบียนที่ไม่ผูกกับภาษา ทุกภาษาก็อาจได้รับข้อความเดียวกัน เว้นแต่คอมโพเนนต์นั้นจะถูกทำให้รับรู้ภาษาอย่างชัดเจน
สำหรับเจ้าของ WordPress คำถามเชิงปฏิบัติไม่ใช่แค่ว่าหน้าเว็บสามารถแปลได้หรือไม่ แต่คือคอมโพเนนต์ที่สร้างหน้าเว็บนั้นรู้หรือไม่ว่าจะเลือกข้อมูลเฉพาะภาษาที่ถูกต้องในเวลาที่เรนเดอร์อย่างไร
โหมดความล้มเหลวที่พบบ่อยบนไซต์ WordPress หลายภาษา
โหมดความล้มเหลวที่พบบ่อยอย่างหนึ่งคือชิ้นส่วนที่ไม่ถูกแปลภายในหน้าที่แปลแล้วโดยรวม ซึ่งเกิดขึ้นเมื่อโพสต์หลักถูกแปลแล้ว แต่วิดเจ็ต ชอร์ตโค้ด หรือผลลัพธ์ของปลั๊กอินยังคงอ่านค่าจากการตั้งค่าในภาษาต้นทาง
อีกแบบหนึ่งคือความสัมพันธ์เสียหาย หน้าแปลแล้วอาจลิงก์ไปยังโพสต์ ผลิตภัณฑ์ เทอม หรือมุมมองบัญชีที่เกี่ยวข้องผิด หากการแมปวัตถุพื้นฐานไม่รับรู้ภาษา
การกำหนดเส้นทางก็อาจล้มเหลวที่ขอบของเนื้อหาแบบไดนามิกได้เช่นกัน หากคอมโพเนนต์สร้างลิงก์ สัญญาณแคนนอนิคัล หรือเส้นทางเฉพาะภาษาโดยไม่คำนึงถึงโลแคลปัจจุบัน ผู้เข้าชมอาจถูกส่งไปยังเวอร์ชันที่ผิดของไซต์ หรือเครื่องมือค้นหาอาจได้รับสัญญาณที่ไม่สอดคล้องกัน
เนื้อหา AJAX เพิ่มความเสี่ยงอีกชั้น เพราะหน้าเริ่มต้นและชิ้นส่วนที่โหลดในภายหลังอาจไม่ใช้บริบทภาษาเดียวกัน เว้นแต่คำขอนั้นจะถูกจัดการอย่างชัดเจนให้เป็นเช่นนั้น
พื้นที่บัญชีและข้อความแจ้งมีความอ่อนไหวเป็นพิเศษ เพราะมักขึ้นอยู่กับสถานะผู้ใช้ สถานะเซสชัน หรือข้อมูลที่ปลั๊กอินเป็นเจ้าของ พื้นที่เหล่านี้อาจต้องใช้ตรรกะการแปลที่แยกจากเนื้อหาหน้าสาธารณะ
การจัดการความเข้ากันได้โดยทั่วไปต้องครอบคลุมอะไรบ้าง
การจัดการความเข้ากันได้โดยทั่วไปต้องตอบสามคำถาม: ข้อความอยู่ที่ไหน มันถูกเชื่อมโยงกับภาษาอย่างไร และมันถูกเรนเดอร์ในบริบทที่ถูกต้องอย่างไร
หากข้อความอยู่ในเมตาของโพสต์ ฟิลด์กำหนดเอง หรือการตั้งค่าของปลั๊กอิน ชั้นการแปลจำเป็นต้องมีวิธีจัดเก็บหรืออ้างอิงค่าที่เฉพาะกับแต่ละภาษา
หากข้อความถูกสร้างโดยบล็อก ชอร์ตโค้ด หรือคอลแบ็กของเทมเพลต ตรรกะการเรนเดอร์จำเป็นต้องรู้ว่าจะส่งออกเวอร์ชันภาษาใด และจะโหลดวัตถุที่เกี่ยวข้องใด
หากผลลัพธ์มีลิงก์หรือเป้าหมายการนำทาง เป้าหมายเหล่านั้นต้องชี้ไปยังวัตถุที่แปลแล้ว ไม่ใช่วัตถุต้นทางเดิม
หากผลลัพธ์ถูกโหลดแบบอะซิงโครนัส คำขอนั้นเองจำเป็นต้องมีบริบทภาษามากพอให้ชิ้นส่วนตรงกับหน้าที่ผู้เข้าชมกำลังดูอยู่แล้ว
คำถามที่พบบ่อย
ทำไมหน้า WordPress ที่แปลแล้วจึงยังแสดงข้อความที่ไม่ถูกแปลได้?
เพราะเนื้อหาหลักของหน้าอาจถูกแปลแล้ว แต่ข้อความจากวิดเจ็ต ชอร์ตโค้ด บล็อกแบบไดนามิก ข้อความแจ้งของปลั๊กอิน หรือชิ้นส่วน AJAX ถูกสร้างจากข้อมูลแยกต่างหากที่ไม่เคยถูกแมปเข้าสู่เวิร์กโฟลว์การแปล
บล็อกแบบไดนามิกยากต่อการแปลกว่าบล็อกปกติเสมอไปหรือไม่?
ไม่เสมอไป บล็อกแบบคงที่เก็บเนื้อหาไว้ในโพสต์และสามารถทำงานเหมือนข้อความที่แก้ไขได้ตามปกติ บล็อกแบบไดนามิกจะยากกว่าเมื่อผลลัพธ์ที่มองเห็นได้ถูกประกอบขึ้นในเวลารันไทม์จากตรรกะฝั่งเซิร์ฟเวอร์หรือข้อมูลของปลั๊กอินที่ต้องการการจัดการภาษาแยกต่างหาก
ทำไมลิงก์และเนื้อหาที่เกี่ยวข้องจึงสำคัญในการแปล?
เพราะการแปลไม่ได้เกี่ยวกับข้อความเท่านั้น หากหน้าแปลแล้วยังคงชี้ไปยังโพสต์ เทอม หรือมุมมองบัญชีในภาษาต้นทาง ประสบการณ์ผู้ใช้และโครงสร้างภาษาก็จะไม่สอดคล้องกัน
สัญญาณหลักใดบ่งบอกว่าการตั้งค่าหลายภาษาต้องมีงานด้านความเข้ากันได้?
สัญญาณที่ชัดเจนคือเมื่อโพสต์หลักแปลได้ถูกต้อง แต่พื้นที่เฉพาะ เช่น วิดเจ็ต ข้อความแจ้ง พื้นที่บัญชี หรือชิ้นส่วนที่โหลดแบบอะซิงโครนัส ยังคงอยู่ในภาษาที่ผิดหรือชี้ไปยังวัตถุที่เกี่ยวข้องผิด
แหล่งที่มา & หลักฐาน
นำสถาปัตยกรรมไปใช้งาน
ดูว่าการผสานรวม WordPress ทำงานอย่างไรในระบบหลายภาษา
สำรวจความเข้ากันได้เฉพาะปลั๊กอิน พื้นที่การแปล และหมายเหตุการใช้งานใน REEID Integration Directory






