วิธีที่ดีที่สุดในการสร้างปลั๊กอินที่พร้อมแปลคืออะไร?
มันไม่จำเป็นต้องแปลจากจุดเริ่มต้น แต่ต้องแปลได้อย่างง่ายดายดังนั้นนักพัฒนาเพื่อนจากวัฒนธรรมที่แตกต่างสามารถมีส่วนร่วมกับกระบวนการแปลของปลั๊กอิน
วิธีที่ดีที่สุดในการสร้างปลั๊กอินที่พร้อมแปลคืออะไร?
มันไม่จำเป็นต้องแปลจากจุดเริ่มต้น แต่ต้องแปลได้อย่างง่ายดายดังนั้นนักพัฒนาเพื่อนจากวัฒนธรรมที่แตกต่างสามารถมีส่วนร่วมกับกระบวนการแปลของปลั๊กอิน
คำตอบ:
อย่าใช้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 ว่าข้อความที่ให้เป็นพารามิเตอร์แรกเป็นของปลั๊กอินนี้คุณสามารถใช้ชื่อใดก็ได้ที่คุณต้องการ แต่ฉันชอบที่จะใช้ชื่อเดียวกับที่ฉันใช้กับปลั๊กอิน ไฟล์ของไดเรกทอรีฉันพบว่ามันใช้งานง่ายมากขึ้น
ด้วย__()
และ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;
คำนิยาม
เปิด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ไฟล์
ที่ใดที่หนึ่งในปลั๊กอินของคุณคุณต้องบอกให้ 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
ฟังก์ชั่น
เหตุผลบางอย่างอาจไม่ทำงาน:
_e('my text')
ด้วย_e('my text', 'my-plugin')
)คำตอบของ Nabil ค่อนข้างสมบูรณ์ แต่มีรูปแบบที่ง่ายให้:
ปลั๊กอินของคุณอยู่ในที่เก็บปลั๊กอิน WordPress.org
คุณยินดีที่จะให้ปลั๊กอินของคุณใช้งานได้กับ WordPress 4.6 หรือสูงกว่าเท่านั้น
ขั้นตอนเหล่านี้:
ในปลั๊กอินของไฟล์ readme.txt
Requires at least: 4.6
เพิ่ม ดูhttps://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/
หากยังไม่ได้อัปโหลดปลั๊กอินของคุณไปยังที่เก็บปลั๊กอิน WordPress ดูhttps://wordpress.org/plugins/developers/add/
ค้นหาปลั๊กอิน / โดเมนข้อความปลั๊กอินของคุณ ในการทำเช่นนั้นไปที่หน้าปลั๊กอินของคุณบนที่เก็บปลั๊กอิน WordPress URL จะเป็นเช่นhttps://wordpress.org/plugins/your-plugin-slug/ ส่วนสุดท้ายของ URL“ your-plugin-slug” นั้นเป็นส่วนเสริมของปลั๊กอิน นั่นคือสิ่งที่คุณใช้สำหรับโดเมนข้อความของฟังก์ชันการแปล
ใช้ฟังก์ชั่นการแปลของ WordPress ในปลั๊กอินของคุณ (เช่น__e(‘hello’, ‘my-plugin-domain’);
) เพียงให้แน่ใจว่าใช้โดเมนข้อความปลั๊กอินที่ถูกต้องซึ่งได้มาในขั้นตอนก่อนหน้า ดูhttps://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/สำหรับข้อมูลเพิ่มเติม
หากคุณทำตามขั้นตอนข้างต้น WordPress จะดูแล:
(คำตอบจากโพสต์บล็อกของฉันที่นี่: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )