Þý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
!rog:.2fundir 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 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:
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áttur —
pybabel-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:
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ð¶
- Veldu þér good first issue fyrir afmarkað framlag.
- Spurðu um notkun í Q&A Discussions.
- Komdu með gettext-hringrásir úr rekstri og API-hugmyndir í Ideas Discussions.
- Lestu leiðbeiningar um framlög áður en þú opnar breytingabeiðni.