DedSec Project

Διεθνοποίηση και ελληνική υποστήριξη — DedSec Project

Δίγλωσση διεπαφή — σταθερά κλειδιά και ελληνικός πληθυντικός Σενάριο και κριτήρια επιτυχίας Μία τοπική εφαρμογή εμφανίζει πόσα αρχεία βρέθηκαν σε ελληνικά και αγγλικά. Χρησιμοποίησε ένα…

Δίγλωσση διεπαφή — σταθερά κλειδιά και ελληνικός πληθυντικός

Σενάριο και κριτήρια επιτυχίας

Μία τοπική εφαρμογή εμφανίζει πόσα αρχεία βρέθηκαν σε ελληνικά και αγγλικά. Χρησιμοποίησε ένα σταθερό κλειδί μηνύματος με ενικό και πληθυντικό αντί για πρόχειρα κείμενα μέσα στον κώδικα της σελίδας. Οι δύο μεταφράσεις πρέπει να περιέχουν την ίδια μεταβλητή count και μία άγνωστη γλώσσα πρέπει να απορρίπτεται καθαρά αντί να εμφανίζει μισή μετάφραση.

Εκτελέσιμο εργαστήριο

Αποθήκευσε ως 17_localization.py και εκτέλεσε με Python 3 και την ενσωματωμένη βιβλιοθήκη. Τα δεδομένα είναι τεχνητά, χωρίς πρόσβαση σε προσωπικά αρχεία ή δίκτυο.

from string import Formatter
MESSAGES = {
  "en": {"one":"Found {count} file","many":"Found {count} files"},
  "el": {"one":"Βρέθηκε {count} αρχείο","many":"Βρέθηκαν {count} αρχεία"},
}
def placeholders(value):
    return {name for _,name,_,_ in Formatter().parse(value) if name}
def message(locale, count):
    if locale not in MESSAGES or type(count) is not int or count < 0:
        raise ValueError("invalid locale or count")
    form = "one" if count == 1 else "many"
    template = MESSAGES[locale][form]
    if placeholders(template) != {"count"}:
        raise ValueError("translation placeholders differ")
    return template.format(count=count)
assert message("en",1) == "Found 1 file"
assert message("el",2) == "Βρέθηκαν 2 αρχεία"
assert message("el",0) == "Βρέθηκαν 0 αρχεία"
try: message("xx",1)
except ValueError: pass
else: raise AssertionError("unknown locale accepted")
print("PASS bilingual plural and placeholder checks")

Τεχνική ερμηνεία

Η μετάφραση απαιτεί γραμματική προσαρμογή: το ένα αρχείο είναι 'αρχείο', ενώ τα δύο 'αρχεία'. Η άσκηση χρησιμοποιεί μόνο έναν απλό κανόνα ενικού και πληθυντικού· πραγματικές διεθνείς εφαρμογές χρειάζονται τους κανόνες CLDR, επειδή ορισμένες γλώσσες έχουν περισσότερες κατηγορίες. Οι αριθμητικές τιμές παραμένουν χωριστές από το μεταφρασμένο πρότυπο. Όταν εμφανίζεις το μήνυμα σε HTML, εξακολουθούν να ισχύουν οι κανόνες ασφαλούς εξόδου και προσβασιμότητας.

Περιορισμένες δοκιμές

Πρόσθεσε γλώσσα με περισσότερες κατηγορίες πληθυντικού και εξήγησε γιατί απαιτείται βιβλιοθήκη διεθνοποίησης. Αφαίρεσε το count από μία ελληνική μετάφραση και βεβαιώσου ότι ο έλεγχος εντοπίζει την ασυμφωνία. Δοκίμασε ελληνικούς τόνους, UTF-8, δεξιόστροφες γλώσσες και μεγάλες μεταφράσεις στην πραγματική διεπαφή.

Διάγνωση

Αν κατά την εναλλαγή γλώσσας εμφανίζονται μικτά κείμενα, έλεγξε τα ελλείποντα κλειδιά και τυχόν παλιά αρχεία που κρατά ο browser. Οι αριθμοί και οι ημερομηνίες χρειάζονται δική τους τοπική μορφοποίηση· το παράδειγμα καλύπτει μόνο κείμενα πληθυντικού. Μετάφρασε και τις ετικέτες προσβασιμότητας.