i18n είναι ένα πακέτο που στοχεύει στην απλοποίηση της ροής εργασίας και την ανάπτυξη της διεθνοποιημένης εφαρμογών & nbsp?. Είναι ένα λεπτό περίβλημα γύρω από τα υπάρχοντα εργαλεία, ιδίως gettext και Βαβέλ.
Βασική χρήση
# Demo.py
#
από i18n.translator εισαγωγής Μεταφραστής
supported_languages = ['it_IT »,« fr_FR »,« de_DE »]
# Activate ιταλικά μεταφράσεις
tr = Μεταφραστής ('/ path / to / root », supported_languages,« it_IT »)
TR εκτύπωσης ._ ('Hello World! »)
όπου / path / to / root / είναι ο κατάλογος ρίζας του έργου σας. Όταν αρχικοποιείται, η κατηγορία Μεταφραστής δημιουργεί αυτόματα ένα κατάλογο με το όνομα / path / to / root / γλώσσες στις οποίες αποθηκεύονται οι μεταφράσεις.
Εξαγωγή μηνύματα
Πριν κάνετε την πραγματική μετάφραση, θα πρέπει να εξαγάγετε τα μηνύματα από τα αρχεία προέλευσης, επικαλούμενος την εντολή απόσπασμα της μονάδας i18n, το οποίο είναι ένα περίβλημα γύρω από εκχύλισμα pybabel και ενημέρωση pybabel:
& Nbsp? Πύθωνα -m i18n --root = / path / to / root --languages = it_IT, fr_FR, de_DE εκχύλισμα
εκχύλισμα αναζητά όλα τα μηνύματα που αναδιπλώνεται μέσα σε καλεί να _ (), gettext () ή ngettext () και παράγει ένα αρχείο που ονομάζεται γλώσσες / template.pot. Αυτό είναι ένα πρότυπο gettext po file` το οποίο περιέχει όλα τα μηνύματα που βρίσκονται στην αίτηση.
Επιπλέον, εκχύλισμα () δημιουργεί επίσης ένα αρχείο καταλόγου μήνυμα για κάθε μία από τις υποστηριζόμενες γλώσσες ως γλώσσες / $ / κωδικό LC_MESSAGES / messages.po, όπου $ CODE είναι μία από τις γλώσσες που αναφέρονται στο supported_languages (it_IT, fr_FR και de_DE στο παραπάνω παράδειγμα ).
Τα αρχεία καταλόγου είναι τώρα έτοιμη να μεταφραστεί χρησιμοποιώντας ένα από τα πολλά υφιστάμενα εργαλεία, για παράδειγμα QT Γλωσσολόγος ή Poedit. Για τη σωστή λειτουργία της εφαρμογής, ολόκληρη η γλώσσα / ιεραρχία πρέπει να διατηρηθεί. Σας προτείνουμε να παρακολουθήσετε τις διάφορες messages.po αρχεία στο σύστημα ελέγχου εκδόσεων μαζί με τα άλλα αρχεία που ανήκουν στην εφαρμογή.
Ενημέρωση μηνύματα
Κατά την ανάπτυξη της εφαρμογής, σίγουρα θα προσθέσει νέα μηνύματα προς μετάφραση. Η εντολή εκχύλισμα χειρίζονται αυτόματα αυτήν την περίπτωση: αν διαπιστώσει υπάρχοντα αρχεία καταλόγου, το περιεχόμενό τους (συμπεριλαμβανομένων των υφιστάμενων μεταφράσεις) συγχωνεύεται με τα πρόσφατα μηνύματα εξάγεται.
Χτίσιμο καταλόγους
Είναι αναγκαίο να καταρτιστούν τα αρχεία καταλόγου πριν από τη χρήση τους με gettext. Από προεπιλογή, το αντικείμενο Μεταφραστής μας συγκεντρώνει αυτόματα όλους τους καταλόγους που βρέθηκαν σε γλώσσες /, που παράγουν τα αντίστοιχα .mo αρχεία. Η συλλογή γίνεται μόνο όταν το αρχείο καταλόγου έχει τροποποιηθεί. Αυτό σημαίνει ότι στις περισσότερες περιπτώσεις, δεν έχετε να ανησυχείτε για την κατάρτιση των καταλόγων.
Αν προτιμάτε να έχετε περισσότερο έλεγχο σε αυτό το βήμα, μπορείτε να περάσετε autocompile = False με τον κατασκευαστή Μεταφραστής και την κατάρτισή τους με το χέρι από τη γραμμή εντολών:
& Nbsp? Πύθωνα -m i18n --root = / path / to / root --languages = it_IT, fr_FR, de_DE συγκεντρώνουν
Αποθήκευση μεταφράσεων σε μια βάση δεδομένων
Για ορισμένες εφαρμογές, είναι χρήσιμο να αφήσουμε το χρήστη να ορίσει νέες μεταφράσεις και / ή να παρακάμψουν τις προκαθορισμένες. i18n υποστηρίζει αυτή τη περίπτωση χρήσης με την κατηγορία DBTranslator, η οποία είναι μια υποκατηγορία του μεταφραστή. Κατά τη μετάφραση, DBTranslator φαίνεται πρώτα στη βάση δεδομένων: αν το μήνυμα δεν έχει βρεθεί, μεταβιβάζει με το πρότυπο συμπεριφοράς gettext.
DBTranslator βασίζεται σε sqlalchemy. Κατασκευαστή του παίρνει μια επιπλέον παράμετρο του κινητήρα:
από i18n.dbtranslator DBTranslator εισαγωγής
από sqlalchemy create_engine εισαγωγής
κινητήρα = create_engine («SQLite: ///db.sqlite»)
Root = "/ path / to / ρίζα»
ΓΛΩΣΣΕΣ = ['it_IT »,« fr_FR »]
DEST_LANGUAGE = 'it_IT »
tr = DBTranslator (ρίζα, ΓΛΩΣΣΕΣ, DEST_LANGUAGE, κινητήρα = κινητήρα)
TR εκτύπωσης ._ ("hello world")
DBTranslator δημιουργεί αυτόματα τα επιτραπέζια translation_entries στο ΣΠ. Στη συνέχεια, εναπόκειται στην εφαρμογή να παρέχει μια διεπαφή χρήστη να χειρίζεται τον πίνακα. Για τη δοκιμή, μπορείτε να χρησιμοποιήσετε τη μέθοδο add_translation () για να εισαγάγετε μια νέα μετάφραση του ΣΠ:
tr.add_translation ("it_IT", "hello world", "ciao mondo")
TR εκτύπωσης ._ ("Hello World") # τυπώνει "ciao mondo"
Πώς να χρησιμοποιήσετε ένα παγκόσμιο Μεταφραστής
Από τη σχεδίαση, i18n προσπαθεί να αποφύγει εντελώς οποιαδήποτε παγκόσμια κατάσταση. Αυτό σημαίνει ότι μπορείτε να υπόσταση σε όσες Μεταφραστής και DBTranslator όπως θέλετε, το καθένα αναφέρεται σε διαφορετικό κατάλογο ή / και βάσης δεδομένων. Αυτό είναι ιδιαίτερα χρήσιμο για τη δοκιμή.
Ωστόσο, στην πράξη, τα περισσότερα έργα θέλετε να χρησιμοποιήσετε ένα παγκόσμιο μεταφραστή που γνωρίζει σχετικά με τα μηνύματα όλων των στοιχείων του σχεδίου. Η εφαρμογή επίδειξη δείχνει έναν τρόπο για να το κάνει στην ενότητα translate.py:
py εισαγωγής
από i18n.translator εισαγωγής Μεταφραστής
# Ρυθμίσετε τη ρίζα του έργου στον κατάλογο που περιέχει το αρχείο
Root = py.path.local (__ __ αρχείο). Dirpath ()
ΓΛΩΣΣΕΣ = ['it_IT »,« fr_FR »,« de_DE »]
tr = Μεταφραστής (ρίζα, ΓΛΩΣΣΕΣ, «it_IT»)
_ = Tr._
ngettext = tr.ngettext
αν __name__ == «__main__»:
& Nbsp? Tr.cmdline (sys.argv)
Με αυτό τον τρόπο, το υπόλοιπο της αίτησης μπορεί απλά να εισάγουν και να χρησιμοποιούν _ () και ngettext () από translate.py. Ή, κατά την προτίμησή σας, εισάγουν απευθείας το αντικείμενο TR και χρήση tr ._ () και tr.ngettext () για να μεταφράσει τα μηνύματα.
Οι δύο τελευταίες γραμμές του κώδικα επιτρέπει σε ένα βολικό τρόπο για να καλέσετε απόσπασμα και να συγκεντρώσει από τη γραμμή εντολών χωρίς να καθορίσετε χειροκίνητα το dir ρίζα και τις γλώσσες που υποστηρίζονται. Απλά τρέξτε:
& Nbsp? Εκχύλισμα python translate.py # ... ή καταρτίζουν
Απαιτήσεις :
- Python
Τα σχόλια δεν βρέθηκε