PHP Gettext ไม่ทำงาน

นี่คือไฟล์ ./locale/fr/LC_MESSAGES/messages.po ของฉัน:

msgid "NO GOOD"
msgstr "IT WORKED!"

คำสั่งที่ใช้สร้างไฟล์ .mo:

$ msgfmt -o locale/fr/LC_MESSAGES/messages.mo locale/fr/LC_MESSAGES/messages.po

ไฟล์ PHP ของฉัน (ทำงานผ่าน CLI เพื่อการทดสอบในฐานะรูท)

<?php 
    bindtextdomain('messages','./locale');
    textdomain('messages');
    setlocale(LC_MESSAGES, 'fr');
    echo gettext("NO GOOD");

นี่คือผลลัพธ์ของฉัน:

$ NO GOOD

ข้อมูล PHP:

GetText Support => enabled

มีความคิดเห็นใดบ้างว่าทำไมสิ่งนี้ถึงใช้งานไม่ได้


person Ian    schedule 30.09.2012    source แหล่งที่มา
comment
คำแนะนำเมื่อทำงานกับ gettext ให้ตรวจสอบค่าที่ส่งคืนของฟังก์ชันเสมอ   -  person Ja͢ck    schedule 01.10.2012
comment
มีสาเหตุสองประการที่ทำให้สิ่งนี้อาจไม่ทำงาน สำหรับผู้เริ่มต้น คุณจะต้องระบุชุดอักขระของไฟล์ MO ของคุณโดยใช้ bind_textdomain_codeset() นอกจากนี้ คุณจะต้องตรวจสอบให้แน่ใจด้วยว่ามีการติดตั้งไฟล์ภาษาที่เหมาะสมในระบบของคุณ (สมมติว่าคุณใช้เซิร์ฟเวอร์ที่ใช้ Linux) และไฟล์ภาษานี้มีชุดอักขระที่ถูกต้อง ดูบทความนี้เพื่อดูรายละเอียดเพิ่มเติม: blog.terresquall.com/2020 /09/การแก้ไขปัญหา-php-gettext   -  person John Doe    schedule 06.09.2020


คำตอบ (2)


ปรากฎว่าสาเหตุที่ใช้งานไม่ได้คือสถานที่ที่ฉันเลือกจะต้องเป็นสถานที่ที่ระบบรู้จัก

ในกรณีของฉัน fr ไม่ใช่สถานที่ที่ถูกต้อง ฉันต้องเลือก fr_FR.UTF-8 ที่ระบบรู้จัก...

person Ian    schedule 30.09.2012
comment
โปรดทราบว่าฟังก์ชัน setlocale() จะส่งกลับ false หากระบบไม่รู้จักสถานที่ที่คุณระบุ Returns the new current locale, or FALSE if the locale functionality is not implemented on your platform, the specified locale does not exist or the category name is invalid. - person Gavin; 23.02.2014

  1. ตรวจสอบให้แน่ใจว่ารองรับภาษา
  2. ติดตั้ง gettext และเปิดใช้งานใน php.ini
  3. ตรวจสอบรูปแบบที่ถูกต้องของ po (ควรมีส่วนหัว)
  4. ตรวจสอบให้แน่ใจว่า mbstring.internalcoding ถูกตั้งค่าเป็น UTF-8 () ไม่แสดงข้อคิดเห็นสำหรับ utf8 ใน php.ini)
  5. รีสตาร์ท php และเว็บเซิร์ฟเวอร์
person Maskipaps    schedule 05.10.2015