Python -lokalisointi (L10N) on helpompaa kuin luuletkaan. Pythonin sisäänrakennettu GetText-moduuli tarjoaa tavallisen tavan erottaa sovelluksesi koodi käyttäjälle suunnatusta tekstistä.
Tässä oppaassa käymme läpi yksinkertaisen esimerkin siitä, kuinka tehdä perustiedot Python -sovelluksesta puhumaan useampaa kuin yhtä kieltä.
Vaihe 1: Yksikielinen sovellus
Mainos
Älä halua missata parastaTekneivit?
Aseta meidät ensisijaisena lähteenä Google -haussa
Ja varmista, ettet koskaan unohda uusinta.
Aloitetaan yksinkertaisella komentorivisovelluksella, jota käytämme demoamme. Se on hyvin perusohjelma, joka tervehtii käyttäjää ja pyytää heidän nimeään. Huomaa, että kaikki käyttäjälle kohdistuvat jouset koodataan suoraan tulostus- () ja input () -lausekkeissa.
# app.py
defrun_app():
print("Welcome to the multilingual demo!")
name =input("Please enter your name: ")
print(f"Hello, {name}! How are you today?")
if __name__ =="__main__":
run_app()Tämä koodi toimii täysin hyvin, mutta sillä on yksi merkittävä rajoitus: se toimii vain englanninkielisille. Tavoitteenamme on tehdä siitä riittävän joustava näyttääkseen nämä jouset espanjaksi, ranskaksi tai muulle kielelle muuttamatta ydinlogiikkaa.
Vaihe 2: Käännösjonojen merkitseminen
Ensimmäinen askel GetText -käyttämisessä on kertoa Pythonille, mitkä koodisi jouset on käännettävä. Teemme tämän käärimällä ne erityistoimintoon. GetText -moduuli tarjoaa tähän funktion, mutta se on yleinen yleissopimus, jonka avulla se on yhdelle alaviivalle _ () lyhyydelle.
Mainos
Nyt kävelemme läpi aPython gettext -esimerkkiNäyttää kuinka valmistella koodisi käännökseen. Tämä yksinkertainen muutos on prosessin tärkein osa.
Päivitämme sovelluksemme App.py -komentosarjamme käyttääksesi tätä toimintoa.
# app.py
import gettext
# Set up a placeholder for the gettext function.
# This makes it easy to replace with a real translation
# function later, as you'll see.
_ = gettext.gettext
defrun_app():
print(_("Welcome to the multilingual demo!"))
name =input(_("Please enter your name: "))
print(_(f"Hello, {name}! How are you today?"))
if __name__ =="__main__":
run_app()Olet nyt merkinnyt jouset käännökseen. Emme ole vielä lisänneet uusia kieliä; Olemme juuri laatineet hakemuksemme niiden käsittelemiseksi.
Vaihe 3: Käännöstiedostojen luominen ja hallinta
Seuraavaksi meidän on poistettava merkitimme jouset ja saatava ne muotoon, jonka ihminen voi kääntää. Tämä on monivaiheinen prosessi, joka sisältää pari komentorivityökalua.
Mainos
Ensimmäinen asia, joka sinun on tehtävä, on luoda käännöksillemme vakiohakemistorakenne, joka näyttää tältä:
└── my_app/
├── app.py
└── locales/
├── en_US/
│ └── LC_MESSAGES/
│ └── base.po
└── es_ES/
└── LC_MESSAGES/
└── base.poNyt käytämme komentorivityökalua, kuten Pybabel tai XGettext, skannataksesi koodimme ja luodaksesi .POT (Portable Object Template) -tiedoston. Tämä tiedosto on suunnitelma, joka sisältää kaikki merkinnät alkuperäiset jouset. Nimeämme ensisijaisen käännöstiedostommeBase.potarkoittaa, että se pitää sovelluksemme ydinjonot. Tämä on yleinen käytäntö, joka auttaa järjestämään suurempia projekteja, joissa sinulla voi olla erillisiä tiedostoja sovelluksen eri osioille (esim. Forms.PO, virheet.po jne.).
# We'll use xgettext, which is part of the gettext-tools package
# Note: You may need to install this system-wide on your machine.
xgettext --language=Python --keyword=_ --output=locale/base.pot app.pyTämä komento skannaa app.py _ () -kierroksille ja tallentaa ne locale/viestiin.pot.
Seuraavaksi luomme todelliset käännöstiedostot tästä mallista. Jokainen kieli saa oman .po (kannettava objekti) tiedosto.
# Create a .po file for Spanish (es_ES)
msginit --locale=es_ES --input=locales/base.pot --output-file=locales/es_ES/LC_MESSAGES/base.po
# You can also create one for English to be explicit
msginit --locale=en_US --input=locales/base.pot --output-file=locales/en_US/LC_MESSAGES/base.poVaihe 4: Käännösten lisääminen
.Po -tiedosto on selkeä tekstitiedosto, jonka kanssa kääntäjät ovat helppo työskennellä. Se on järjestetty lohkoiksi, missämsgidon alkuperäinen merkkijono koodistasi jamsgstron käännös. Kaikki kääntäjän on tehtävä. Avaa .po -tiedosto heidän kohdekielelleen ja täyttämään MSGSTR -kentät.
Katsotaanpa, mitä espanjankielistämme .PO -tiedostomme (paikalliset/es_es/lc_messages/base.po) näyttäisivät kääntäjän jälkeen, kun se on työskennellyt sen parissa:
Mainos
Liittyvät:Kuinka korjata Apple Translate -sovellus ei toimi iPhonessa, iPadissa
# This file is for Spanish translations.
#
msgid ""
msgstr ""
"Project-Id-Version: Multilingual Demon"
"Content-Type: text/plain; charset=UTF-8n"
"Content-Transfer-Encoding: 8bitn"
"Language: es_ESn"
msgid "Welcome to the multilingual demo!"
msgstr "¡Bienvenido a la demostración multilingüe!"
msgid "Please enter your name: "
msgstr "Por favor, introduce tu nombre: "
msgid "Hello, {name}! How are you today?"
msgstr "¡Hola, {name}! ¿Cómo estás hoy?"Huomaa muoto: Jokaista MSGID: tä seuraa sen vastaava MSGSTR. Kääntäjä muokkaa vain MSGSTR -linjaa jättäen alkuperäisen MSGID: n koskemattomaksi. Tämä lähteen ja käännöksen selkeä erottaminen on GetText -järjestelmän ydinhyöty.
Vaihe 5: Sovelluksen laatiminen ja käyttäminen
Kun käännökset ovat valmiita, on vain yksi viimeinen vaihe: .po -tiedostojen kokoaminen binaarimuotoon, jonka Python voi lukea tehokkaasti. Näitä kutsutaan.Mo(Koneobjekti) tiedostot. MSGFMT-komento vie ihmisen luettavan .po-tiedoston ja muuntaa sen koneen luettavaksi .mo-muotoon.
# Compile the Spanish .po file into a .mo file
msgfmt -o locales/es_ES/LC_MESSAGES/base.mo locales/es_ES/LC_MESSAGES/base.poNyt sovelluksemme on valmis olemaan monikielinen! Meidän on vain päivitettävä Python -komentosarjamme käyttääksesi oikeaa .mo -tiedostoa käyttäjän sijainnin perusteella. Tähän sisältyy muutama avainvaihe:
- Määritä hakemisto:Kerro GetTextistä, mistä löytää .mo -tiedostot.
- Lataa käännös:Käytä GetText.Translation () -sovellusta oikean tiedoston ladata käyttäjän kielen asetuksen perusteella.
- Asenna käännös:Käytä Translation.InStall () uuden käännöksen "asenna", joten _ () -toimintomme osoittaa nyt oikean kielen.
Tässä on lopullinen, täydellinen versio sovelluksemme.py -skripti:
# app.py
import gettext
import os
# Define the root directory for our translation files
LOCALE_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)),'locales')
defsetup_language(lang_code):
try:
# Load the translation from the locale directory
translation = gettext.translation('base',localedir=LOCALE_DIR,languages=[lang_code])
# Install the translation globally so gettext can find it
translation.install()
exceptFileNotFoundError:
# Fallback to a default language (e.g., English) if translation isn't found
print(f"Warning: Translation for '{lang_code}' not found. Using default language.")
gettext.install('base', LOCALE_DIR,names=['ngettext'])
if __name__ =="__main__":
# Simulate setting the user's language environment.
# On a real system, you might read this from a user setting or system locale.
# Try running the app in Spanish
setup_language('es_ES')
print(_("Welcome to the multilingual demo!"))
# Now, let's switch to English for the rest of the app's flow
setup_language('en_US')
name =input(_("Please enter your name: "))
print(_(f"Hello, {name}! How are you today?"))Jos suoritat tämän viimeisen komentosarjan, näet ensimmäisen tulostuslinjan espanjaksi, kun taas seuraava kehote ja lähtö pysyvät englanniksi osoittaen, että käännökset toimivat oikein ja ne voidaan kytkeä dynaamisesti.
Viimeiset sanat
Käyttämälläsaada, olemme puhtaasti erottaneet sovelluksemme koodin sen ihmisen luettavista jousista, mikä tekee koko projektista paljon helpompaa ylläpitää, kääntää ja mittakaava.
Mainos
Mutta tämä on vasta alku. GetText-moduuli käsittelee myös monimutkaisempia piirteitä, kuten moniarvoista ja kontekstitietoisia käännöksiä, joiden avulla voit rakentaa edistyneitä monikielisiä sovelluksia. Nyt kun ymmärrät perusteet, olet hyvin varusteltu tekemään omia Python-projekteja puhumaan useita kieliä.












