ฉันสามารถละทิ้งปลั๊กอินข้อความสำหรับคำที่ใช้ในแกนได้หรือไม่


10

ฉันมีปลั๊กอินที่ทำให้สถานะโพสต์ลงในเมนูผู้ดูแลระบบประเภทโพสต์ ฉันกำลังอยู่ระหว่างการทำให้เป็นสากลและฉันสงสัยว่าจะจัดการกับสถานการณ์นี้ได้อย่างไร

ปลั๊กอินใช้สตริงที่ไม่ซ้ำกันซึ่งจะได้รับโดเมนข้อความเช่นนี้:

__( 'Select the post statuses to <strong>exclude</strong> from post type admin menus', 'csmpmsi' )

__( 'Pages' )แต่แล้วนอกจากนี้ยังมีกรณีที่ผมใช้คำหลักที่เกี่ยวข้องกับหลักความหมายที่เกี่ยวข้องกับพวกเขาเช่นนี้ ในสถานการณ์เช่นนี้ดูเหมือนว่าเหมาะสมแล้วที่ฉันจะยกเว้นโดเมนข้อความและใช้ประโยชน์จากข้อกำหนดที่มีการแปลเป็นภาษาหลักแล้ว อย่างไรก็ตาม Codex ดูเหมือนชัดเจนมาก:

หากคุณพยายามแปลปลั๊กอินคำแนะนำแบบเดียวกับข้างต้นจะนำไปใช้ยกเว้นว่า

  • คุณต้องใช้โดเมนซึ่งโหลดในเบ็ดของปลั๊กอินของคุณ

  • การเรียกใช้การแปลทุกครั้งต้องกลายเป็น __ ('ข้อความ', 'ชื่อโดเมน')

ดังนั้น WP-kosher นี้หรือไม่


1
ขอบคุณที่ถามคำถามที่กระตุ้นความคิดคำตอบ (จาก toscho และ Mark Kaplun จนถึงตอนนี้) น่าสนใจและมีประโยชน์สำหรับฉัน!
webaware

คำตอบ:


14

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

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

ดูการสนทนาการสนทนานี้เรามีบางวันที่ผ่านมาเกี่ยวกับหัวข้อนี้


โปรดทราบว่าสตริงจะยังคงปรากฏในไฟล์ POT ของคุณแม้ว่าจะไม่มีโดเมนข้อความ
scribu

@ Subsu ขึ้นอยู่กับโปรแกรมแยกวิเคราะห์ ปลั๊กอินแปลโลคอลไลเซชั่นจะไม่สนใจ
fuxia

ดูเหมือนว่ามีความไม่ลงรอยกันระหว่างคำตอบนี้กับคำตอบนี้สำหรับคำถามที่เหมือนกัน ...
mrwweb

4

ใช่ แต่โปรดอย่า นี่เป็นเหมือนมาตรฐานการเขียนโค้ดให้ปฏิบัติตามได้ดียิ่งขึ้นแม้ว่าคุณจะได้รับประโยชน์เพียงเล็กน้อยโดยการข้ามมัน

เหตุผลที่ดีกว่า:

  1. ในเวอร์ชั่น 3.5 WordPress ไม่มีไฟล์แปลที่มีขนาดใหญ่มากแบ่งออกเป็น 3 ส่วนเพื่อเหตุผลด้านประสิทธิภาพ หากแนวโน้มนี้ยังคงคุณสามารถมั่นใจได้ว่าโดเมนเริ่มต้นจะถูกโหลดที่ทุกคนเมื่อคุณพยายามที่จะใช้ใน__('Pages')?

  2. คุณไม่บันทึกงานลงใน Localizer - เครื่องมือแปลเช่น poedit ไม่ทราบวิธีจัดการกับสองโดเมนการแปลในไฟล์เดียวและในตัวอย่างของคุณพวกเขาจะสร้างไฟล์. po ซึ่งมีคำว่า 'หน้า' แม้ว่าคุณจะ ใช้โดเมนเริ่มต้นสำหรับมัน Localizer ไม่ตรวจสอบการใช้งานจริงของสตริงที่เขาแปลเว้นแต่เขาจะต้องเข้าใจบริบทดังนั้นเขาจะไม่สังเกตเห็นโดเมนที่แตกต่างและจะแปลคำนั้น นอกจากนี้หาก Localizer รู้จักเครื่องมือของเขาเขาจะมีฐานข้อมูลการแปลตามไฟล์การแปลหลักของ WordPress ในลักษณะที่ทำให้ poedit สามารถแปลคำโดยอัตโนมัติเช่น 'หน้า'


0

คุณสามารถลอง

add_action('wp',function(){
    load_default_textdomain();
    _e('Settings');
});

หรือ

add_action('wp',function(){
    $locale = is_admin() ? get_user_locale() : get_locale();
    load_textdomain( 'default', WP_LANG_DIR . "/$locale.mo" );
    load_textdomain( 'default', WP_LANG_DIR . "/admin-$locale.mo" );

    // WPMU
    //load_textdomain( 'default', WP_LANG_DIR . "/ms-$locale.mo" );
    //load_textdomain( 'default', WP_LANG_DIR . "/admin-network-$locale.mo" );

    _e('Settings');
    _e('First Name');
    _e('Last Name');
});

การอ้างอิง: https://v123.tw/use-wordpress-core-translation/

โชคดี!!

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