ฉันกำลังสร้างแอปพลิเคชันหลายภาษาใน PHP + CodeIgniter ฉันตัดสินใจใช้ gettext สำหรับการแปลข้อความ UI แล้ว และจนถึงตอนนี้ก็ได้รับการพิสูจน์แล้วว่ามีประสิทธิภาพและใช้งานง่าย
แต่ตอนนี้ฉันกำลังเผชิญกับสิ่งที่น่ารำคาญจริงๆ: ฟังก์ชัน gettext()
ยอมรับเพียงหนึ่งพารามิเตอร์เท่านั้น ในขณะที่ฉันต้องการพฤติกรรมที่เหมือน printf ที่ฉันได้รับจากอะแดปเตอร์ gettext ของ Zend Framework ซึ่งฉันสามารถใช้ %1$s
, %2$s
ฯลฯ เป็นตัวยึดตำแหน่ง จากนั้นระบุ สตริงการแทนที่เป็นพารามิเตอร์เพิ่มเติมสำหรับฟังก์ชัน translate()
ของ Zend view
ฉันไม่ต้องการละทิ้ง gettext เนื่องจากการจัดการการแปลที่ง่ายดายด้วยไฟล์ .po และ poEdit (ฉันสามารถอัปเดตได้ด้วยคลิกเดียว) ฉันมีตัวเลือกอะไรบ้าง?
ฉันได้ลองเขียนตัวช่วยเพื่อโต้ตอบกับ gettext แล้ว: เรียกใช้อาร์กิวเมนต์แรกผ่าน gettext จากนั้นเรียกใช้ strtr บนสตริงผลลัพธ์ มีวิธีอื่น/ดีกว่าที่คุณอยากจะแนะนำหรือไม่?
.mo
ได้ ฉันไม่แน่ใจว่าสิ่งเหล่านั้นแตกต่างจากไฟล์.po
อย่างไร ดังนั้นเหตุผลที่ฉันโพสต์สิ่งนี้เป็นความคิดเห็นแทนที่จะเป็นคำตอบ คู่มือบอกว่า POEdit ใช้งานได้กับรูปแบบนั้น - person Charles   schedule 27.03.2011.mo
คือสิ่งที่.po
เกิดขึ้นหลังจากคอมไพล์แล้ว Gettext อ่าน.mo
แต่.po
นั้นมนุษย์สามารถอ่านได้ และนั่นคือสิ่งที่คุณแก้ไข :) ใช่ การใช้ Zend_Translate เป็นตัวเลือกที่ต้องพิจารณาอย่างแน่นอน - person mingos   schedule 27.03.2011