จะแปลปลั๊กอินหลังจากการอัพเดทได้อย่างไร?


9

http://wordpress.org/extend/plugins/bbpress/ โฟลเดอร์ภาษาของ bbpress (wp-content / plugins / bbpress / bbp-languages) มีคำเตือนดังกล่าว:

/**
 * Do not put custom translations here. They will be deleted on bbPress updates.
 *
 * Keep custom bbPress translations in /wp-content/languages/
 */

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

โดยทั่วไปฉันแปล bbpress และสร้างไฟล์. po และ. mo ไฟล์ทำงานหากฉันวางไว้ในโฟลเดอร์ wp-content / plugins / bbpress / bbp-languages ​​ปกติ แต่ดังคำเตือนข้างต้นบอกว่าจะลบเมื่ออัพเดท แต่ปัญหาคือการแปลไม่ทำงานหากฉันใส่ไว้ใน wp-content / languages ​​/ โฟลเดอร์ตามที่แนะนำใน bbpress

ฉันคิดว่าต้องมีเบ็ดหรือสิ่งที่ฉันสามารถเปิดใช้งานได้ แต่สิ่งที่เป็นทางออกที่ดีที่สุดสำหรับมัน? ฉันต้องการเก็บไฟล์ภาษาของปลั๊กอินไว้ใน wp-content / languages ​​/


ดี .. หลังจากฉันตรวจสอบรหัส bbpress .. ดูเหมือนว่าฉันต้องใส่ไฟล์ใน / wp-content / languages ​​/ bbpress / ไม่ตรง / wp-content / languages ​​/ ตอนนี้มันใช้งานได้สำหรับ bbpress แต่คำถามยังต้องได้รับคำตอบ สำหรับปลั๊กอินอื่น ๆ imo
Ünsal Korkmaz

คำตอบ:


3

คุณต้องแทนที่การโทรไปยังไฟล์ภาษาของ BBpress

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

BBPress ไม่ใช้ฟังก์ชันload_plugin_textdomainแต่ใช้load_textdomainแทน คุณสามารถค้นหาตัวกรองได้ที่นี่:

$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

ดังนั้นในไฟล์ภาษา php ของคุณเพียงเพิ่มตัวกรองเพื่อเปลี่ยนเส้นทาง:

function load_bbpress_tr_mofile( $mofile, $domain )
{
    if ( 'bbpress' == $domain )
    {
        // replace this. :)
        return 'FULL_PATH_TO_YOUR_FILE';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'load_bbpress_tr_mofile', 10, 2 );

ดูเหมือนว่ามีข้อผิดพลาด .. bbpress.trac.wordpress.org/ticket/1647มองหา .. ฉันจะใช้โฟลเดอร์ภาษาเริ่มต้น wp-content / languages ​​/ ดังนั้นคำแนะนำของคุณสำหรับ 'FULL_PATH_TO_YOUR_FILE' คืออะไร?
Ünsal Korkmaz

เส้นทางไปยังไดเรกทอรีภาษาของคุณ ( WP_LANG_DIR) รวมถึงไฟล์ mo ของคุณ
fuxia

1
คำตอบที่ดี. หมายเหตุสำหรับนักพัฒนาปลั๊กอิน: ทำการload_plugin_textdomain()โทรระหว่างการดำเนินการ "init" มิฉะนั้นเราไม่สามารถขอตัวกรอง "load_textdomain_mofile" ได้ มันจะสายเกินไปแล้ว
Geert

2

สิ่งที่คุณต้องทำคือการสร้างปลั๊กอินง่ายๆที่จะจัดการ text_domain ของปลั๊กอินที่ติดตั้ง หากคุณไม่ต้องการโซลูชันระดับโลกคุณสามารถเพิ่มรหัสลงใน functions.php ของคุณในธีมของคุณ

ความคิดคือการแนะนำ wordpress ในการค้นหาคำแปล ภายในปลั๊กอินทั้งหมดนี้จะทำโดยใช้สิ่งที่คล้ายกับ

load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' );

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

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

load_plugin_textdomain('bbpress', false, '../../languages/bbpress');

สิ่งนี้จะแนะนำให้ wordpress โหลดไฟล์แปลที่กำหนดเองของคุณจากโฟลเดอร์ถัดจากpluginsโฟลเดอร์ที่มีชื่อโฟลเดอร์bbpressที่มีไฟล์แปลโดยใช้การตั้งชื่อแบบตรงทั้งหมดเหมือนกับที่ใช้กับปลั๊กอินแต่ละตัว

วิธีการของคุณที่สั่งให้ textdomains สำหรับปลั๊กอินทั้งหมดควรรันในinitเฟสดังนี้

function set_myplugins_languages() {
     .... your code here.....
}
add_action('init', 'set_myplugins_languages');

(อย่าลืมทำเครื่องหมายว่าเป็นคำตอบหากคุณเห็นว่ามีประโยชน์)


0

เพื่อให้สิ่งนี้ใช้งานได้คุณต้องมีไฟล์การแปลเวิร์ดเพรสใน WP_LANG_DIR แล้วและตั้งค่าโลแคลโกลบอลเป็นภาษานั้น หากคุณเพียงรวมถึงการแปลสำหรับ bbPress โดยไม่ต้องเปลี่ยนภาษาหรือมีไฟล์การแปลหลักของ WordPress ปรากฏอยู่จะไม่มีอะไรแปลแม้คุณจะโหลดก็ตาม

หากคุณต้องการแทนที่โลแคลสำหรับ bbPress เพียงอย่างเดียวคุณต้องเพิ่มตัวกรองใน 'bbpress_locale' ซึ่งช่วยให้คุณสามารถแทนที่ไฟล์ bbPress mo

ในขณะที่มันเป็นความจริงที่ bbPress 2.0 ใช้ฟังก์ชั่น load_textdomain () load_plugin_textdomain () เป็นเพียง wrapper สำหรับ load_textdomain () ต่อไป วิธี bbPress 2.0 นั้นมีประสิทธิภาพมากขึ้นและช่วยให้สามารถจัดวางไฟล์การแปลทั่วโลกได้ดังนั้นคุณจะไม่สูญเสียสิ่งเหล่านั้นในระหว่างการอัปเดตปลั๊กอิน


-1

ในกรณีของฉันการสร้างการแปลที่กำหนดเองถาวรสำหรับปลั๊กอินต้องใช้ขั้นตอนต่อไปนี้ (ตัวอย่างสำหรับการแปลปลั๊กอิน ACF):

  1. สร้างwp-content/languages/plugins/ไดเรกทอรี
  2. คัดลอกไฟล์แปลที่เลือก.poจากlang/โฟลเดอร์ปลั๊กอิน(หรืออื่น ๆ ที่มีการแปล) เพื่อสร้างwp-content/languages/plugins/(เช่นจากlang/acf-pl_PL.poไปwp-content/languages/plugins/acf-pl_PL.po)
  3. ปรับแต่งการแปลด้วยเช่น Poedit หรือโปรแกรมอื่น ๆ สำหรับแก้ไข.poไฟล์จากนั้นสร้าง.moและบันทึกwp-content/languages/plugins/(เช่นwp-content/languages/plugins/acf-pl_PL.mo)

วิธีนี้ควรรักษาการแปลไว้แม้จะมีการอัพเดทปลั๊กอิน

ฉันไม่แน่ใจว่ากลยุทธ์นี้ใช้ได้กับปลั๊กอินทั้งหมดหรือไม่ แต่นี่ก็คุ้มค่าที่จะลอง

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