การแปลข้อความที่ยาวขึ้น (มุมมองและเทมเพลตอีเมล) ด้วย gettext


9

ฉันกำลังพัฒนาเว็บแอปพลิเคชั่น PHP หลายภาษาและฉันมีข้อความยาว (-ish) ที่ฉันต้องการแปลด้วย gettext เหล่านี้คือเทมเพลตอีเมล (โดยปกติจะสั้น แต่ก็ยังมีอีกหลายบรรทัด) และบางส่วนของเทมเพลตการดู (บล็อคข้อความที่มีความหมายที่ยาวกว่า) ข้อความเหล่านี้จะมี HTML ง่ายๆ (เช่นตัวหนา / ตัวเอียงเพื่อเน้นอาจเป็นลิงค์ที่นี่หรือที่นั่น) แม่แบบเป็นสคริปต์ PHP ที่มีการบันทึกผลลัพธ์

ปัญหาคือ gettext ดูงุ่มง่ามมากสำหรับการจัดการข้อความที่ยาวขึ้น โดยทั่วไปแล้วข้อความที่ยาวจะมีการเปลี่ยนแปลงมากกว่าระยะเวลาสั้นกว่าข้อความสั้น - ฉันสามารถเปลี่ยน msgid และตรวจสอบให้แน่ใจว่าได้อัปเดตในการแปลทั้งหมด (อาจเป็นงานจำนวนมากและมีข้อผิดพลาดเกิดขึ้นได้ง่ายเมื่อ msgid ยาว) หรือ msgid ไม่เปลี่ยนแปลงและแก้ไขเฉพาะการแปล (ซึ่งจะทำให้ข้อความล้าสมัยในแม่แบบที่ทำให้เข้าใจผิด) นอกจากนี้ฉันเคยเห็นคำแนะนำเกี่ยวกับการรวม HTML ในสตริง gettext แต่การหลีกเลี่ยงมันจะทำให้ข้อความธรรมดาชิ้นเดียวกลายเป็นชิ้นส่วนจำนวนมากซึ่งจะเป็นฝันร้ายที่ยิ่งใหญ่กว่าในการแปลและรวมกันอีกครั้งและฉันก็เห็นคำแนะนำ การแยก gettext สตริงที่ไม่จำเป็นออกเป็น msgids แยกกัน

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

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


ที่เกี่ยวข้อง: stackoverflow.com/questions/2966026/…
sleske

คำตอบ:


3

ฉันสะดุดกับปัญหาที่คล้ายกันเมื่อไม่นานมานี้ (ดู/programming/8288050/can-i-automatically-update-msgids-in-gettexts-po-files-for-trivial-text-change )

โดยทั่วไปมีสองตัวเลือก:

  1. ทำตามที่ตั้งใจจะใช้ gettext: ใช้ข้อความต้นฉบับเป็น msgid, HTML และทั้งหมด จากนั้นทุกการเปลี่ยนแปลงของข้อความต้นฉบับจะทำให้การแปลทั้งหมดไม่ถูกต้อง msgmergeอย่างไรก็ตามการจับคู่แบบคลุมเครือจะยังคงตรงกับข้อความต้นฉบับที่ถูกต้องกับการแปลแบบเก่าดังนั้นโดยปกติการแปลแบบเก่าจะมีให้สำหรับนักแปล
  2. เมื่อใช้ข้อความต้นฉบับเป็น msgid ให้ใช้ตัวระบุสังเคราะห์บางอย่าง (เช่น EMAIL_TEMPLATE_NEWSLETTER_START) ด้วยวิธีนี้ ID ไม่เคยเปลี่ยนแปลง ข้อความต้นฉบับ (อาจเป็นภาษาอังกฤษ) จะเป็นคำแปลอีกคำหนึ่งสำหรับ gettext ข้อเสียเปรียบหลัก: 1) คุณต้องติดตามแยกการแปลที่ทันสมัย; 2) เครื่องมือ gettext บางตัวอาจใช้งานไม่ได้ (นักแปลอาจต้องใช้เครื่องมือพิเศษ)

1

เปลี่ยน msgid และตรวจสอบให้แน่ใจว่าได้อัปเดตในการแปลทั้งหมด (อาจมีมาก> ทำงานและผิดพลาดง่ายมากเมื่อ msgid ยาว)

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.