Di 14 dari 42 bahasa kami, bentuk jamak yang disebut "one" tidak hanya untuk angka 1

Bahasa

String aplikasi "One habit left today" memiliki pasangan jamak, "%d habits left today". Android memilih di antara keduanya berdasarkan kategori: bahasa Inggris menggunakan "one" untuk 1 dan "other" untuk sisanya. Dalam bahasa Rusia, kategori "one" digunakan untuk 1, 21, 31, 41, dan seterusnya. Pemeriksaan terjemahan kami salah dua kali pada hari yang sama, sekali ke setiap arah.

Terjemahan yang benar yang ditolaknya

Pada 2 November, kami menjalankan Paket Kit terjemahan kami pada aplikasi contohnya lagi. Untuk "one" dalam bahasa Rusia, model menulis "Осталась %d привычка на сегодня": "%d habit left today", dengan angkanya. Pemeriksaan kami membandingkannya dengan bentuk "one" dalam bahasa Inggris, menemukan %d yang tidak ada dalam bahasa Inggris, dan menolaknya sebagai placeholder yang dibuat-buat. Model tersebut benar. Pengguna dengan 21 kebiasaan yang tersisa mendapatkan bentuk ini, jadi angka tersebut harus ditampilkan. Kami mengubah pemeriksaan: sebuah bentuk boleh menambahkan jumlah yang digunakan oleh bentuk "other" dalam bahasa Inggris. Jalankan berikutnya menulis semua 350 string dari contoh tersebut.

Terjemahan yang salah yang seharusnya lolos

Pemeriksaan yang sama membiarkan kebalikannya lolos. Jika model menulis "Осталась одна привычка" ("one habit left"), tidak ada yang hilang dari string tersebut, jadi lolos, dan pengguna dengan 21 kebiasaan yang tersisa akan diberi tahu bahwa mereka memiliki satu. Aturan lama mengizinkan bentuk "one" apa pun untuk menghilangkan angka, karena dalam bahasa Inggris "one" hanya untuk 1.

Sekarang pemeriksaan tahu angka mana yang dicakup oleh setiap kategori, dari CLDR, aturan jamak Unicode yang digunakan oleh Android dan ICU. Bentuk untuk kategori yang mencakup beberapa angka harus menampilkan angka tersebut. Bentuk untuk satu angka boleh menghilangkannya: "one" dalam bahasa Jerman hanya untuk 1, jadi "Noch eine Gewohnheit" sudah benar di sana.

Di mana "one" bukan hanya 1

Di 14 dari 41 bahasa target yang diketahui oleh data CLDR di Babel 2.10, "one" mencakup lebih dari angka 1:

Dalam pesan ICU, cabang tersendiri mengubah hal ini. Dengan =0{…} dalam pesan, "one" dalam bahasa Prancis hanya tersisa untuk 1, dan pemeriksaan memperhitungkan hal itu.

Diperiksa terhadap string Android sendiri

Sebelum mengirim aturan tersebut, kami menjalankannya pada pesan jamak dalam string framework Android: 897 terjemahan dalam 39 bahasa kami. Tidak ada yang ditandai. Penerjemah Google menempatkan angka di setiap cabang yang mencakup beberapa angka, termasuk "satu" dalam bahasa Rusia, bahkan di mana bahasa Inggris memberikan cabang tersendiri untuk angka 1. Ketika kami mengeluarkan angka dari satu cabang "satu" dalam bahasa Rusia secara manual, pemeriksaan tersebut menyatakan bahwa bentuk itu juga digunakan untuk 21, 31, 41 dan 51.

Aturan tersebut tersedia di translation-checks 1.2.0, gratis di GitHub, untuk pesan ICU, dan di Polyglot 1.2.0 untuk jamak Android maupun pesan ICU. Pemeriksaan lain yang kami tambahkan minggu ini ada di catatan tentang huruf dari skrip lain.

Diperbarui: