มีทางเลือกอื่นสำหรับวิธีการ i18n ที่ยุ่งยาก โซลูชันนี้เรียกว่า Tr8n
รหัสข้างต้นของคุณจะเป็น:
<%= tr("You have {num || kid}", num: 1) %>
แค่นั้นแหละ. ไม่จำเป็นต้องดึงคีย์ของคุณออกจากโค้ดของคุณและเก็บรักษาไว้ในรีซอร์สบันเดิลไม่จำเป็นต้องใช้กฎหลายภาษาสำหรับแต่ละภาษา Tr8n มาพร้อมกับกฎบริบทตัวเลขสำหรับทุกภาษา นอกจากนี้ยังมาพร้อมกับกฎทางเพศกฎรายการและกรณีภาษา
คำจำกัดความที่สมบูรณ์ของคีย์การแปลข้างต้นจะมีลักษณะดังนี้:
<%= tr("You have {num:number || one: kid, other: kids}", num: 1) %>
แต่เนื่องจากเราต้องการประหยัดพื้นที่และเวลา num จึงถูกจับคู่กับกฎตัวเลขโดยอัตโนมัติและไม่จำเป็นต้องระบุตัวเลือกทั้งหมดสำหรับค่ากฎ Tr8n มาพร้อมกับพหูพจน์และอินฟิลเตอร์ที่จะทำงานให้คุณได้ทันที
คำแปลสำหรับคีย์ของคุณในภาษารัสเซียจะเป็น:
"У вас есть {num || ребенок, ребенка, детей}"
อย่างไรก็ตามการแปลของคุณอาจไม่ถูกต้องในภาษาที่มีกฎเฉพาะทางเพศ ตัวอย่างเช่นในภาษาฮิบรูคุณจะต้องระบุคำแปลอย่างน้อย 2 คำสำหรับตัวอย่างของคุณเนื่องจาก "คุณ" จะแตกต่างกันไปตามเพศของผู้ใช้ที่ดู Tr8n จัดการได้ดีมาก นี่คือการทับศัพท์ของการแปลภาษาฮีบรู:
"Yesh leha yeled ahad" with {context: {viewing_user: male, num: one}}
"Yesh leha {num} yeladim" with {context: {viewing_user: male, num: other}}
"Yesh lah yeled ahad" with {context: {viewing_user: female, num: one}}
"Yesh lah {num} yeladim" with {context: {viewing_user: female, num: other}}
ดังนั้นในกรณีนี้คีย์ภาษาอังกฤษเดียวของคุณต้องมีการแปล 4 ครั้ง การแปลทั้งหมดเสร็จสิ้นในบริบท - คุณไม่จำเป็นต้องทำลายประโยค Tr8n มีกลไกในการแมปคีย์เดียวกับการแปลหลาย ๆ คำตามภาษาและบริบทซึ่งทำได้ทันที
สิ่งสุดท้าย. จะเกิดอะไรขึ้นถ้าคุณต้องทำให้ส่วนการนับเป็นตัวหนา? มันจะเป็น:
<%= tr("You have [bold: {num || kid}]", num: 1, bold: "<strong>{$0}</strong>") %>
ในกรณีที่คุณต้องการกำหนด "ตัวหนา" ของคุณใหม่ในภายหลัง - มันจะง่ายมาก - คุณไม่ต้องไปถึงไฟล์ YAML ทั้งหมดของคุณและเปลี่ยนไฟล์ - คุณทำได้ในที่เดียว
หากต้องการเรียนรู้เพิ่มเติมโปรดดูที่นี่:
https://github.com/tr8n/tr8n_rails_clientsdk
การเปิดเผยข้อมูล: ฉันเป็นผู้พัฒนาและเป็นผู้ดูแล Tr8n framework และไลบรารีทั้งหมด
"#{....}"
ไม่จำเป็นต้องใช้ "interpolator" และเครื่องหมายคำพูดในโค้ดด้านบน