จาก 42 ภาษาของเรา มี 14 ภาษาที่รูปพหูพจน์ที่เรียกว่า "one" ไม่ได้ใช้เฉพาะกับเลข 1

ภาษา

สตริงของแอป "One habit left today" มีคู่พหูพจน์คือ "%d habits left today" Android จะเลือกระหว่างสองรูปนี้ตามหมวดหมู่: ภาษาอังกฤษใช้ "one" สำหรับเลข 1 และ "other" สำหรับเลขอื่นทั้งหมด ในภาษารัสเซีย หมวดหมู่ "one" ใช้กับเลข 1, 21, 31, 41 และอื่นๆ การตรวจสอบการแปลของเราเคยผิดพลาดเรื่องนี้สองครั้งในวันเดียวกัน โดยผิดคนละทิศทาง

การแปลที่ถูกต้องซึ่งระบบปฏิเสธ

เมื่อวันที่ 2 พฤศจิกายน เราได้รันชุดเครื่องมือแปลภาษาของเราบนแอปตัวอย่างอีกครั้ง สำหรับหมวด "one" ของภาษารัสเซีย โมเดลเขียนว่า "Осталась %d привычка на сегодня" ซึ่งแปลว่า "%d habit left today" พร้อมตัวเลข การตรวจสอบของเราเปรียบเทียบกับรูป "one" ของภาษาอังกฤษ พบว่ามี %d ที่ภาษาอังกฤษไม่มี จึงปฏิเสธโดยมองว่าเป็น placeholder ที่โมเดลสร้างขึ้นเอง ทั้งที่โมเดลถูกต้อง ผู้ใช้ที่มีนิสัยเหลืออยู่ 21 อย่างจะได้รับรูปนี้ ดังนั้นจึงต้องแสดงตัวเลข เราจึงเปลี่ยนการตรวจสอบ: รูปพหูพจน์สามารถเพิ่มตัวเลขที่ใช้ในรูป "other" ของภาษาอังกฤษได้ การรันครั้งถัดไปจึงเขียนครบทั้ง 350 สตริงของแอปตัวอย่าง

การแปลที่ผิดซึ่งระบบจะยอมรับ

การตรวจสอบแบบเดิมยอมให้กรณีตรงข้ามผ่านได้ หากโมเดลเขียนว่า "Осталась одна привычка" (แปลว่า "one habit left") จะไม่มีข้อมูลในสตริงหายไป จึงผ่านการตรวจสอบ แต่ผู้ใช้ที่มีนิสัยเหลืออยู่ 21 อย่างจะได้รับข้อความว่ามีเหลืออยู่หนึ่งอย่าง กฎเดิมยอมให้รูป "one" ตัดตัวเลขออกได้ เพราะในภาษาอังกฤษ "one" ใช้กับเลข 1 เท่านั้น

ตอนนี้การตรวจสอบรู้ว่าแต่ละหมวดหมู่ครอบคลุมเลขใดบ้าง โดยอ้างอิงจาก CLDR ซึ่งเป็นกฎพหูพจน์ของ Unicode ที่ Android และ ICU ใช้ รูปพหูพจน์ของหมวดหมู่ที่ครอบคลุมหลายเลขต้องแสดงตัวเลข ส่วนรูปพหูพจน์ของเลขเดียวอาจละไว้ได้ เช่น "one" ของภาษาเยอรมันใช้กับเลข 1 เท่านั้น ดังนั้น "Noch eine Gewohnheit" จึงใช้ได้

ตำแหน่งที่ "one" ไม่ได้ใช้กับเลข 1 เท่านั้น

ใน 14 จาก 41 ภาษาเป้าหมายที่ข้อมูล CLDR ใน Babel 2.10 รองรับ หมวดหมู่ "one" ครอบคลุมมากกว่าเลข 1:

ใน ICU messages การมีสาขาของตัวเองเปลี่ยนพฤติกรรมนี้ เมื่อมี =0{…} ในข้อความ หมวดหมู่ "one" ของภาษาฝรั่งเศสจะเหลือเฉพาะเลข 1 และการตรวจสอบจะคำนึงถึงข้อนี้ด้วย

ตรวจสอบเทียบกับสตริงของ Android เอง

ก่อนส่งมอบกฎ เราได้รันกับข้อความพหูพจน์ในสตริงเฟรมเวิร์กของ Android: 897 การแปลใน 39 ภาษาของเรา ระบบไม่พบข้อผิดพลาด นักแปลของ Google ใส่ตัวเลขไว้ในทุกสาขาที่ครอบคลุมหลายตัวเลข รวมถึงสาขา "one" ของภาษารัสเซีย แม้ภาษาอังกฤษจะมีสาขาเฉพาะสำหรับเลข 1 ก็ตาม เมื่อเราลบตัวเลขออกจากสาขา "one" ของภาษารัสเซียหนึ่งสาขาด้วยตนเอง ระบบตรวจสอบระบุว่ารูปแบบนี้ยังใช้กับเลข 21, 31, 41 และ 51 ด้วย

กฎนี้อยู่ใน translation-checks เวอร์ชัน 1.2.0 ให้ใช้งานฟรีบน GitHub สำหรับข้อความ ICU และอยู่ใน Polyglot เวอร์ชัน 1.2.0 สำหรับพหูพจน์ของ Android และข้อความ ICU ส่วนการตรวจสอบอื่น ๆ ที่เราเพิ่มในสัปดาห์นี้อยู่ใน บันทึกเกี่ยวกับตัวอักษรจากสคริปต์อื่น

อัปเดตแล้ว: