วิธีทำให้การแปลปลั๊กอิน WordPress พร้อมหรือยัง?


19

วิธีที่ดีที่สุดในการสร้างปลั๊กอินที่พร้อมแปลคืออะไร?

มันไม่จำเป็นต้องแปลจากจุดเริ่มต้น แต่ต้องแปลได้อย่างง่ายดายดังนั้นนักพัฒนาเพื่อนจากวัฒนธรรมที่แตกต่างสามารถมีส่วนร่วมกับกระบวนการแปลของปลั๊กอิน

คำตอบ:


38

1. เขียนด้วยใจของการแปล

อย่าใช้echoหรือprint()สร้างข้อความแทนใช้ฟังก์ชัน WordPress __()และ_e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()และ__()จะให้การแปล - ในภาษาปัจจุบัน - ของข้อความที่ให้ไว้เป็นพารามิเตอร์แรก _e()จะส่งออกข้อความในขณะที่__()จะกลับมา

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

วิธีการแสดงผลข้อความแบบไดนามิกเช่น: "Hello <username>"?

ด้วย__()และsprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. เตรียมไฟล์. pot / .po / .mo

คำนิยาม

  • ไฟล์. pot : ได้รับการพัฒนาโดยผู้พัฒนาโปรแกรมเสริมและมันถูกใช้เป็นจุดเริ่มต้นในการสร้างงานแปลใหม่ WordPress ไม่ได้ใช้งาน
  • ไฟล์. po : เป็นไฟล์แปลที่คุณหรือคนอื่น ๆ เริ่มและอาจเสร็จสมบูรณ์ WordPress ไม่ได้ใช้
  • ไฟล์ A.mo : ถูกสร้างขึ้นโดยอัตโนมัติโดย Poedit ทุกครั้งที่คุณบันทึกไฟล์. po สิ่งที่คุณสามารถทำได้กับไฟล์เหล่านี้คือการอัปโหลดหรืออัปโหลดใหม่ทุกครั้งที่คุณสร้างหรืออัปเดตไฟล์. po WordPress ได้รับการแปลจากไฟล์ . mo

เปิดPoeditและสร้างแคตตาล็อกใหม่ (ไฟล์› Catallog ใหม่ ... )ด้วยการตั้งค่าเหล่านี้:

  • ข้อมูลโครงการ: ใช้ข้อมูล (หรือทีมของคุณ) ภาษาและประเทศควรตรงกับภาษาเริ่มต้นปลั๊กอินของคุณ
  • เส้นทาง:
    • เส้นทางพื้นฐาน: .
    • เส้นทาง: ลบทั้งหมด & เพิ่ม..(เราจะเก็บไฟล์ภาษาในไดเรกทอรีย่อยปลั๊กอินที่เรียกว่าภาษา)
  • คำหลัก: ลบทั้งหมด & เพิ่ม__และ_e

บันทึกแคตตาล็อกและสแกนไฟล์ปลั๊กอินเพื่อหาข้อความที่แปลได้โดยกดปุ่มอัปเดต เมื่อการอัปเดตเสร็จสิ้นใกล้แคตตาล็อกคุณไม่จำเป็นต้องอัปเดตไฟล์นั้นจนกว่าคุณจะเพิ่มสตริงที่สามารถแปลได้ใหม่ (เช่นล้อมรอบหรือ) ลงในปลั๊กอินของคุณ/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

ตอนนี้มาสร้างการแปลครั้งแรก (ฉันจะใช้ fr_FR):

ใช้Podeit , สร้างแคตตาล็อกจากไฟล์หม้อ (ไฟล์> แคตตาล็อกใหม่จากไฟล์ทพอท ... ) :

  • ข้อมูลโครงการ: ใช้ข้อมูล (หรือทีมของคุณ) เปลี่ยนภาษาและประเทศฉันจะใช้ภาษาฝรั่งเศสและฝรั่งเศส
  • เส้นทาง: อย่าเปลี่ยน
  • คำสำคัญ: อย่าแชท

บันทึกแคตตาล็อกเป็น แปลสตริงบางส่วนหรือทั้งหมดบันทึกไฟล์. po อีกครั้งอัปโหลดไฟล์. po และ. mo/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

โปรดทราบว่าเมื่อใดก็ตามที่คุณบันทึกไฟล์. po ไฟล์. mo จะถูกสร้างขึ้นด้วยชื่อเดียวกันชื่อไฟล์ของไฟล์. po นั้นมีความสำคัญอย่างยิ่งประกอบด้วยการต่อโดเมนโดเมนข้อความปลั๊กอิน (my-plugin) และโลแคลภาษา fr_FR) ให้ตั้งชื่อไฟล์. po สำหรับปลั๊กอินดังนี้: [textdomain] - [locale] .po ต่อไปนี้เป็นตัวอย่าง:

  • อิตาลี / อิตาลี: wpcf7-it_IT.po
  • โปรตุเกส / บราซิล: wpcf7-pt_BR.po
  • อาหรับ: wpcf7-ar.po... ใช่!

เมื่อใดก็ตามที่ปลั๊กอินที่มีการปรับปรุงที่มีข้อความใหม่อัปเดตไฟล์ PO ที่แปลสตริงใหม่และอัปโหลด .po และ .moไฟล์

3. สั่งให้ปลั๊กอินโหลดข้อความที่แปลแล้วสำหรับภาษาปัจจุบัน

ที่ใดที่หนึ่งในปลั๊กอินของคุณคุณต้องบอกให้ WordPress ใช้ไฟล์. mo ของคุณคุณสามารถทำได้โดยใช้รหัสนี้ในตอนต้นของไฟล์ปลั๊กอินของคุณ:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

แทนที่my-pluginด้วยชื่อปลั๊กอินของคุณในพารามิเตอร์ที่ 1 และ 3 ของload_plugin_textdomainฟังก์ชั่น

4. ทดสอบและแก้ไขปัญหา

เหตุผลบางอย่างอาจไม่ทำงาน:

  • สตริงจะไม่ถูกนำเข้าไปยังไฟล์. pot หรือ. po
    • →การตั้งค่าแคตตาล็อกผิด (พา ธ หรือคำหลักหรือทั้งสองอย่าง)
  • ข้อความไม่ได้รับการแปลในเว็บไซต์ WordPress
    • →. ไฟล์ mo สำหรับภาษานั้นหายไปหรือมีชื่อไฟล์ผิด
    • →โดเมนข้อความที่ไม่ได้ใช้ (แทนที่_e('my text')ด้วย_e('my text', 'my-plugin'))
    • →โดเมนข้อความไม่โหลด (ใช้ตัวอย่างด้านบนด้วยพารามิเตอร์ที่ถูกต้อง WP จะไม่เตือนคุณเกี่ยวกับข้อผิดพลาด)

3
+1 เขียนดี :) ลองดูที่บทความนี้: การโหลดไฟล์ภาษา WordPress อย่างถูกต้อง " แนวทางปฏิบัติสำหรับลดความเจ็บปวดจากการโหลดไฟล์ภาษาใน WordPress " :::::: กลุ่มGlotpressและกลุ่มPolyglotsอาจจะพูดถึงเช่นกัน
brasofilo

ขอบคุณสำหรับคำแนะนำที่ดีนี้! เป็นมูลค่าการกล่าวขวัญว่าต้องโหลด load_plugin_textdomain () ในทุกวิธีที่คุณใช้ _e () และ __ ()
Andreas

2

คำตอบของ Nabil ค่อนข้างสมบูรณ์ แต่มีรูปแบบที่ง่ายให้:

  1. ปลั๊กอินของคุณอยู่ในที่เก็บปลั๊กอิน WordPress.org

  2. คุณยินดีที่จะให้ปลั๊กอินของคุณใช้งานได้กับ WordPress 4.6 หรือสูงกว่าเท่านั้น

ขั้นตอนเหล่านี้:

  1. ในปลั๊กอินของไฟล์ readme.txt Requires at least: 4.6เพิ่ม ดูhttps://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. หากยังไม่ได้อัปโหลดปลั๊กอินของคุณไปยังที่เก็บปลั๊กอิน WordPress ดูhttps://wordpress.org/plugins/developers/add/

  3. ค้นหาปลั๊กอิน / โดเมนข้อความปลั๊กอินของคุณ ในการทำเช่นนั้นไปที่หน้าปลั๊กอินของคุณบนที่เก็บปลั๊กอิน WordPress URL จะเป็นเช่นhttps://wordpress.org/plugins/your-plugin-slug/ ส่วนสุดท้ายของ URL“ your-plugin-slug” นั้นเป็นส่วนเสริมของปลั๊กอิน นั่นคือสิ่งที่คุณใช้สำหรับโดเมนข้อความของฟังก์ชันการแปล

  4. ใช้ฟังก์ชั่นการแปลของ WordPress ในปลั๊กอินของคุณ (เช่น__e(‘hello’, ‘my-plugin-domain’);) เพียงให้แน่ใจว่าใช้โดเมนข้อความปลั๊กอินที่ถูกต้องซึ่งได้มาในขั้นตอนก่อนหน้า ดูhttps://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/สำหรับข้อมูลเพิ่มเติม

หากคุณทำตามขั้นตอนข้างต้น WordPress จะดูแล:

  • แยกวิเคราะห์ปลั๊กอินของคุณสำหรับสตริงที่แปลได้ทั้งหมด (ไม่จำเป็นต้องติดตั้งและเรียกใช้ Poedit หรืออะไรก็ได้)
  • ทำให้ง่ายสำหรับทุกคนที่จะมีส่วนร่วมในการแปลปลั๊กอินของคุณใน translate.wordpress.org (ไม่จำเป็นต้องมีเว็บไซต์ของคุณเองโดยเฉพาะเพื่อแปลปลั๊กอินของคุณหรือมีกระบวนการที่กำหนดเองสำหรับนักแปลเพื่อส่งการแปลของพวกเขา)
  • เมื่อมีคนใช้ปลั๊กอินของคุณ WordPress จะดูแลการตรวจสอบว่ามันแปลเป็นภาษาของพวกเขาหรือไม่และถ้าเป็นเช่นนั้นแสดงเป็นภาษาของพวกเขา (ไม่จำเป็นสำหรับพวกเขาหรือคุณเพื่อโหลดไฟล์แปลลงบนเว็บไซต์ของพวกเขา)

(คำตอบจากโพสต์บล็อกของฉันที่นี่: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )


ฉันไม่แน่ใจว่าทำไมสิ่งนี้จึงถูกลดระดับลง มันเป็นสิ่งที่ฉันทำเพื่อสร้างwordpress.org/plugins/print-my-blog การแปลพร้อม (และปลั๊กอินได้รับการแปลเรียบร้อยแล้ว)
thespacecamel

หมายความว่าหากปลั๊กอิน / ชุดรูปแบบไม่ได้อยู่ในที่เก็บปลั๊กอินของ WordPress แต่ใช้โดเมนข้อความของปลั๊กอินในนั้น Wordpress จะโหลดไฟล์แปลผิดหรือไม่?
bodo

เป็นคำถามที่ดี @bodo หากปลั๊กอินระบุว่าใช้โดเมนข้อความของปลั๊กอินอื่นที่อยู่ใน wp.org repo ฉันคิดว่า WordPress จะใช้ไฟล์แปลของปลั๊กอิน wp.org อย่างมีความสุข แต่ฉันไม่แน่ใจ
thespacecamel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.