42 dilimizin 14'ünde "one" (tekil) olarak adlandırılan çoğul biçimi yalnızca 1 için değildir

Diller

Bir uygulamanın "One habit left today" metninin "%d habits left today" adında bir çoğul ortağı vardır. Android, bunlar arasında kategoriye göre seçim yapar: İngilizce 1 için "one", diğer her şey için "other" kullanır. Rusçada "one" kategorisi 1, 21, 31, 41 ve benzeri sayılar için kullanılır. Çeviri kontrolümüz aynı gün, birer kez her iki yönde olmak üzere bunu iki kez yanlış yaptı.

Doğru çeviriyi reddetti

2 Kasım'da çeviri Paketimizi örnek uygulaması üzerinde tekrar çalıştırdık. Rusça "one" için model "Осталась %d привычка на сегодня" yazdı: "%d habit left today", sayıyla birlikte. Kontrolümüz bunu İngilizce "one" biçimiyle karşılaştırdı, İngilizcede olmayan bir %d buldu ve uydurulmuş bir yer tutucu olarak reddetti. Model haklıydı. 21 alışkanlığı kalan bir kullanıcı bu biçimi alır, bu yüzden sayıyı göstermesi gerekir. Kontrolü değiştirdik: Bir biçim, İngilizce "other" biçiminin kullandığı sayıyı ekleyebilir. Sonraki çalıştırma, örneğin 350 metninin tamamını yazdı.

Geçireceği yanlış çeviri

Aynı kontrol tersini geçmesine izin verdi. Model "Осталась одна привычка" ("one habit left") yazsaydı, metinde hiçbir şey kaybolmadığı için geçerdi ve 21 alışkanlığı kalan kullanıcıya bir tane kaldığı söylenirdi. Eski kural, İngilizcede "one" yalnızca 1 olduğu için herhangi bir "one" biçiminin sayıyı düşürmesine izin veriyordu.

Artık kontrol, Android ve ICU'nun kullandığı Unicode çoğul kuralları olan CLDR'den her kategorinin hangi sayıları kapsadığını biliyor. Birden fazla sayıyı kapsayan bir kategori için biçim, sayıyı göstermelidir. Tek bir sayı için biçim onu atlayabilir: Almanca "one" yalnızca 1'dir, bu yüzden "Noch eine Gewohnheit" orada uygundur.

"One" yalnızca 1 olmadığında

Babel 2.10'daki CLDR verilerinin bildiği 41 hedef dilin 14'ünde, "one" 1 sayısından fazlasını kapsar:

ICU mesajlarında kendi dalı bunu değiştirir. Mesajda =0{…} ile, Fransızca "one" yalnızca 1 ile bırakılır ve kontrol bunu dikkate alır.

Android'in kendi metinlerine karşı kontrol edildi

Kuralı yayınlamadan önce Android framework dizelerindeki çoğul mesajlarda denedik: Dillerimizden 39'unda 897 çeviri. Hiçbirini işaretlememişti. Google'ın çevirmenleri, İngilizce'nin 1 için ayrı bir dal oluşturduğu yerler de dahil olmak üzere, birden fazla sayıyı kapsayan her dala sayıyı yerleştirmişti; Rusça "one" (tekil) dalı dahil. Bir Rusça "one" dalından sayıyı elle çıkardığımızda, kontrol bu biçimin 21, 31, 41 ve 51 için de kullanıldığını söyledi.

Kural, ICU mesajları için GitHub'da ücretsiz olarak sunulan translation-checks 1.2.0 sürümünde ve Android çoğulları ile ICU mesajları için Polyglot 1.2.0 sürümünde yer alıyor. Bu hafta eklediğimiz diğer kontroller başka bir alfabe harfleri hakkındaki notta bulunuyor.

Güncellendi: