Hoppa yfir í efnið

Þýddu heil skilaboð
með t-strengjum í Python

gettext-tstrings tengir t-strengi í Python 3.14+ við staðlaðar gettext-þýðingaskrár og Babel-tólakeðjuna. Gildi og snið haldast í forritskóðanum; þýðendur vinna með heil skilaboð og einfalda {name}-staðgengla:

import gettext

from gettext_tstrings import Translator

_ = Translator(gettext.translation("messages", localedir="locales"))
name = "Ada"
print(_(t"Hello {name}"))  # with a Japanese catalog: こんにちは Ada

Þýðingaskráin geymir Hello {name}. Þýðing má færa {name} til eða endurtaka hann. Fjarlægi hún staðgengilinn, endurnefni hann eða breyti sniði hans, tilkynnir athugun þýðingaskrárinnar villuna. Komist ógild færsla engu að síður í rekstur skráir safnið viðvörun og birtir frumtextaskilaboðin í stað þess að hrynja.

Byrjaðu á fimm mínútna kennsluefninu Berðu saman valkostina

Alfa · Python 3.14+ · staðlaðar PO/MO-þýðingaskrár · engar háðar einingar frá þriðja aðila á keyrslutíma

Þessi vefur fer sjálfur eftir því sem hann kennir: hver einasta tungumálaútgáfa — leiðarkerfi, merkingar og byggingarskýrslan sem kann fleirtölu — er birt úr PO-þýðingaskrám af gettext-tstrings sjálfu.

Er þetta fyrir þig?

Það passar í dag þegar forritið þitt keyrir á Python 3.14 eða nýrri; þú notar nú þegar gettext og Babel, eða vilt taka upp PO/MO-hringrás þeirra; og þú vilt t-strengjamálskipan með nefndum staðgenglum sem eru athugaðir áður en þeir birtast.

Það passar ekki enn þegar þú þarft Python 3.13 eða eldri; þú krefst stöðugs Python-viðmóts — þetta er alfa og forskriftin er sá hluti þess sem hefur sest; eða nánast allur þýðanlegur texti þinn býr í sniðmátsmáli fremur en í Python-frumkóða.

Áttu þýðingaskrár nú þegar? Þær halda áfram að virka. _("Hello {name}").format(name=name) og tr(t"Hello {name}") framleiða sama msgid, svo að núverandi þýðingar lifa skiptin af — Yfirfærsla gengur gegnum alla færsluna.

Hvað þýðingaskráin má segja

Þýðing getur ekki breytt gerð þeirra skilaboða sem hún þýðir. Það er allt loforðið, og allt annað á þessum vef leiðir af því. Þýðing má víxla {name} til eða endurtaka hann, og má umskrifa hvert annað orð í kringum hann. Hún má ekki sleppa staðgenglinum, búa til nýjan, seilast gegnum hann inn í hlutina þína eða hengja við sitt eigið snið.

Safnið athugar það á leiðinni inn — þegar þýðingaskrár eru vistþýddar — og aftur við birtingu, sem er munurinn á mistökum sem finnast við yfirlestur og mistökum sem notandi finnur.

Nýliði í gettext? Öll hringrásin í fjórum setningum

gettext er staðlaða leiðin til að þýða hugbúnað, í Python og langt þar út fyrir. Kóðinn þinn merkir þýðanleg skilaboð; útdráttartól safnar þeim í sniðmátsskrá (.pot); þýðandi — sjaldnast forritari — fyllir út eina þýðingaskrá (.po) fyrir hvert tungumál, sem er vistþýdd í tvíundar- .mo sem forritið þitt les inn á keyrslutíma. Venjubundna nafnið á þýðingarfallinu er _, svo _(t"Hello {name}") les sem „þýddu þessi skilaboð“. Kennsluefnið gengur alla leiðina — merkja, draga út, þýða, vistþýða, keyra — á um það bil fimm mínútum.

Vandinn sem það leysir

f-strengur er þegar innskeyttur um leið og nokkurt safn fær að sjá hann — f"Hello {name}" er orðinn "Hello Ada", og að þýða bútana kringum gildi brýtur málfræði flestra tungumála. t-strengur (PEP 750) heldur föstum textanum, útreiknuðum gildum, frumsegðunum, umbreytingunum og sniðlýsingunum aðskildum — sem er einmitt sú skipting sem skilaboðaskrá þarf. Hverju það breytir, borið saman við %(name)s, .format() og $-strengi.

Ekkert í gettext eða Babel segir samt hvernig t-strengur verður að skilaboðum. Þetta safn tekur þá ákvörðun, skrifar hana niður sem útgáfumerkta forskrift og lætur samræmisprófin fylgja með til að athuga hana.

Hönnunarreglurnar

  • Þýða heil skilaboð, aldrei setningarbúta.
  • Taka aðeins við einföldum breytunöfnum á borð við {name}.
  • Halda !r og :.2f undir stjórn forritsins, utan þýðingaskrárinnar.
  • Leyfa þýðingum að víxla og endurtaka þekkta staðgengla, en koma um leið í veg fyrir að þær nái til eiginda eða bæti við sniði.
  • Endurnýta venjulegar POT-, PO- og MO-skrár, og tólin sem lesa þær nú þegar.

Og samsvarandi listi yfir það sem það lætur af ásettu ráði í friði: það staðfærir ekki tölur, gjaldmiðla eða dagsetningar — sníddu þau fyrst, með Babel; það escape-ritar ekki birt úttak fyrir HTML, skel eða skjáhermi; og það getur ekki dæmt um hvort þýðing sé rétt, aðeins hvort staðgenglar hennar séu heilir.

Uppsetning

python -m pip install gettext-tstrings

Python 3.14 eða nýrri. Birting hefur engar háðar einingar — hún notar gettext úr staðalsafninu og ekkert annað.

Útdráttur og athugun þýðingaskráa fer gegnum Babel, svo settu þann aukapakka upp alls staðar þar sem pybabel keyrir, sem er yfirleitt þróunar- eða CI-umhverfi fremur en rekstrarímynd:

python -m pip install "gettext-tstrings[babel]"

Hvert skal halda næst

Byrjaðu hér — engrar gettext-reynslu krafist:

  • Kennsluefni — úr tómri möppu í keyrandi japanska þýðingu í fimm skrefum, hver skipun sýnd með úttaki sínu.
  • Hvers vegna t-strings — sömu skilaboðin rituð á fjóra vegu, og hvað %(name)s, .format() og $-strengir rétta hver um sig þýðingaskránni.

Notaðu það — vinnuheimildirnar:

  • Handbók — keyrslutíma-API-ið: hvaða aðgangsstað skal nota, fleirtala, tungumál eftir beiðni, frestaðir strengir, og hvað gerist þegar þýðingaskrá er röng.
  • Útdrátturpybabel-heimildin: stillingar, eigin fallanöfn, og hvernig tólin sem þegar eru til staðfesta þessar þýðingaskrár án nokkurs aukakostnaðar.
  • Í rekstri — hringrásin eins og teymi keyrir hana: uppfærsluferlið, fuzzy-færslur, CI-hlið, þýðingavettvangar og útgáfa.
  • Yfirfærsla — að taka þetta upp í verkefni sem hefur nú þegar þýðingaskrár, einn köllunarstað í einu.
  • Fyrir þýðendur — ein síða til að rétta þeim sem ritstýrir .po-skránum.

Skildu það — frá sögunni að útfærslunni:

  • Bakgrunnur — hvers vegna þetta safn er til: þrjátíu ár af gettext, tveir PEP-ar og umræðan í staðalsafninu sem lokaðist án svars.
  • Fallgryfjur — hvað brotnaði í raun við að þýða þennan vef á þrjátíu og fimm tungumál, og hvorn helminginn tól getur gripið.
  • Hvernig þetta virkar — frá sniðmátshlutnum í PEP 750 að birta strengnum, og skyndiminnunum sem gera athugunina ódýra.

Uppflettirit — samningarnir:

  • API — allt sem pakkinn flytur út, á einni síðu.
  • Forskrift — venjan t-strengur ↔ msgid sem stöðugur, útgáfumerktur samningur, með vélleseinlegum samræmisprófum.

Staða

Útgáfa pakkans 0.1.0a8
Stöðugleiki API alfa — Python-API-ið gæti enn breyst
Forskrift v1, með samræmisprófum
Python 3.14 og nýrra; prófað á 3.14, 3.14t (free-threaded) og 3.15
Babel 2.18 eða nýrra, og aðeins þar sem pybabel keyrir
Keyrsluháðir pakkar engir — gettext úr staðalsafninu
Snið þýðingaskráa venjulegar POT-, PO- og MO-skrár
Breytingar CHANGELOG

Alfa-útgáfa. Samningurinn er lítill af ásettu ráði og forskriftin er stöðugi hluti hans; Python-API-ið gæti enn hreyfst. Fyrir stöðuga útgáfu þarf þetta breiðari tungumálagögn, samfellda mælingu á afköstum, API-yfirlestur frá fólki sem notar gettext og Babel í alvöru, og samhæfnisprófanir yfir hverja studda Python- og Babel-útgáfu.

Mál og breytingabeiðnir eru vel þegnar — alfa er einmitt tíminn þegar viðmótið er enn þess virði að deila um.

Gakktu í samfélagið