i18n er en pakke som prøver å forenkle arbeidsflyten og utvikling av internasjonaliserte programmer. & Nbsp; Det er en tynn wrapper rundt eksisterende verktøy, spesielt gettext og babel.
Grunnleggende bruk
# Demo.py
#
fra i18n.translator import Overs
supported_languages = ['it_IT', 'fr_FR', 'de_DE']
# Aktivere italienske oversettelser
tr = Overs ('/ sti / til / root', supported_languages, 'it_IT')
print tr ._ ('Hei verden!')
hvor / sti / til / root / er rotkatalogen på prosjektet. Når startes, skaper Overs klassen automatisk en katalog som heter / sti / til / root / språk der oversettelsene er lagret.
Trekke ut meldinger
Før du gjør selve oversettelsen, må du trekke ut meldinger fra kildefiler, ved å påberope utpakkingskommandoen på i18n-modulen, som er en wrapper rundt pybabel ekstrakt og pybabel oppdatering:
& Nbsp; python -m i18n --root = / sti / til / root --languages = it_IT, fr_FR, de_DE ekstrakt
ekstrakt ser for alle meldingene innpakket inne samtaler til _ (), gettext () eller ngettext () og produserer en fil som heter språk / template.pot. Dette er en standard gettext po file` som inneholder alle meldingene som finnes i programmet.
Videre ekstrakt () skaper også en melding katalogfilen for hver av de støttede språkene som språk / $ CODE / LC_MESSAGES / messages.po, der $ KODE er et av språkene som er oppført i supported_languages (it_IT, fr_FR og de_DE i eksempelet ovenfor ).
Katalogfilene er nå klare til å bli oversatt ved hjelp av en av de mange eksisterende verktøy, for eksempel QT Lingvist eller Poedit. For riktig funksjon av programmet, må hele språk / hierarki skal bevares. Vi foreslår å spore de ulike messages.po filer i Version Control System sammen med de andre filene som hører til applikasjonen.
Oppdatere meldinger
Under utviklingen av programmet, vil du sikkert legge nye meldinger som skal oversettes. Utpakkingskommandoen håndtere automatisk dette tilfelle: hvis den finner eksisterende katalogfiler, deres innhold (inkludert eksisterende oversettelser) slås sammen med de nylig hentet meldinger.
Kompilere kataloger
Det er nødvendig å kompilere katalogfilene før du bruker dem med gettext. Som standard, sammenstiller vår Overs objekt automatisk alle katalogene som finnes i språk /, produserer de tilsvarende .mo filer. Sammenstillingen er gjort bare når katalogfilen er blitt endret. Dette betyr at i de fleste tilfeller trenger du ikke å bekymre deg for sammenstillingen av katalogene.
Hvis du foretrekker å ha mer kontroll på dette trinnet, kan du passere autocompile = False til konstruktøren av Overs og samle dem manuelt fra kommandolinjen:
& Nbsp; python -m i18n --root = / sti / til / root --languages = it_IT, fr_FR, de_DE kompilere
Lagring oversettelser i en database
For enkelte programmer er det nyttig å la brukeren å definere nye oversettelser og / eller overstyre standard seg. i18n støtter denne brukstilfelle med DBTranslator klasse, som er en underklasse av Overs. Ved omregning, DBTranslator først ser i databasen: hvis meldingen ikke blir funnet, det delegater til standard gettext atferd.
DBTranslator er basert på sqlalchemy. Sin konstruktør tar en ekstra motor parameter:
fra i18n.dbtranslator import DBTranslator
fra sqlalchemy import create_engine
motor = create_engine ('sqlite: ///db.sqlite')
ROOT = '/ sti / til / root'
SPRÅK = ['it_IT', 'fr_FR']
DEST_LANGUAGE = 'it_IT'
tr = DBTranslator (ROOT, SPRÅK, DEST_LANGUAGE, motor = motor)
print tr ._ ("hello world")
DBTranslator oppretter automatisk tabellen translation_entries i DB. Deretter er det opp til at programmet skal gi et brukergrensesnitt for å manipulere tabellen. For testing, kan du bruke add_translation () metode for å sette inn en ny oversettelse i DB:
tr.add_translation ("it_IT", "hello world", "ciao mondo")
print tr ._ ("Hello World") # utskrifter "ciao mondo"
Hvordan bruke en global Overs
Ved design, prøver i18n å fullstendig unngå global tilstand. Dette betyr at du kan instantiate så mange Overs og DBTranslator som du vil, hver og en henvisning til en annen katalog og / eller database. Dette er spesielt anvendelig for testing.
Men i praksis de fleste prosjekter vil bruke en global overs som vet om meldinger av alle komponentene i prosjektet. Demoprogrammet viser en måte å gjøre det på den translate.py modul:
import py
fra i18n.translator import Overs
# Sette root av prosjektet til katalogen som inneholder denne filen
ROOT = py.path.local (__ fil __). Dirpath ()
SPRÅK = ['it_IT', 'fr_FR', 'de_DE']
tr = Overs (ROOT, SPRÅK, 'it_IT')
_ = Tr._
ngettext = tr.ngettext
hvis __name__ == '__main__':
& Nbsp; tr.cmdline (sys.argv)
På denne måten kan resten av programmet bare importere og bruke _ () og ngettext () fra translate.py. Eller, hvis du har behov, import direkte tr objekt og bruk tr ._ () og tr.ngettext () for å oversette meldinger.
De to siste linjene i koden muliggjør en praktisk måte å ringe ekstrakt og kompilere fra kommandolinjen uten å måtte manuelt spesifisere roten dir og de støttede språkene. Bare kjør:
& Nbsp; python translate.py ekstrakt # ... eller kompilere
Krav :
- Python
Kommentarer ikke funnet