Σε 14 από τις 42 γλώσσες μας, ο πληθυντικός τύπος που ονομάζεται "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 που δεν υπήρχε στα αγγλικά και το απέρριψε ως εφευρεθείσα θέση κράτησης. Το μοντέλο είχε δίκιο. Ένας χρήστης με 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 ένα δικό του κλαδί αλλάζει αυτό. Με =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. Οι υπόλοιποι έλεγχοι που προσθέσαμε αυτή την εβδομάδα βρίσκονται στην σημείωση σχετικά με γράμματα από άλλο αλφάβητο.

Ενημερώθηκε: