Conas a oibríonn sé¶
Níl aon rud ar an leathanach seo riachtanach chun an leabharlann a úsáid — clúdaíonn an rang teagaisc agus an treoir é sin. Ina áit sin, atógann an leathanach seo an leabharlann ó na bunphrionsabail: cad is t-string ann i ndáiríre, conas a thiteann msgid amach as, cad a fhágann aistriúchán bailí, agus conas a fhágann an cur i bhfeidhm nach gcosnaíonn an tseiceáil sin ar fad ach deichiúna de mhicreashoicind. Léigh é má tá fiosracht ort, más mian leat cur leis, nó má tá sé i gceist agat an coinbhinsiún a chur i bhfeidhm tú féin.
Cad is t-string ann i ndáiríre¶
Táirgeann f-string str, agus táirgeann sé láithreach é — faoin am a
bhfaigheann feidhm ar bith é, tá an luach idirshuite agus tá an abairt
séalaithe. Tá an chomhréir chéanna agus an mheastóireacht fhonnmhar chéanna ar
a chuid sloinn ag t-string (PEP 750), ach táirgeann sé cineál difriúil:
>>> name = "Ada"
>>> f"Hello {name}!"
'Hello Ada!'
>>> t"Hello {name}!"
Template(strings=('Hello ', '!'), interpolations=(Interpolation('Ada', 'name', None, ''),))
Coinníonn an oibiacht Template sin na codanna a theastaíonn ó phíblíne
catalóige, scartha fós:
>>> template = t"Total: {amount:,.2f}"
>>> template.strings
('Total: ', '')
>>> template.interpolations[0].expression
'amount'
>>> template.interpolations[0].value
1234.5
>>> template.interpolations[0].format_spec
',.2f'
strings— an téacs litriúil timpeall ar na hidirshuímh, in ord.- I gcás gach idirshuímh: an slonn mar théacs foinseach (
'amount'), a luach measúnaithe (1234.5), agus aon tiontú (!r) agus sonrú formáide (,.2f) — á n-iompar ar leithligh in ionad iad a chur i bhfeidhm.
Níl i ngach rud a dhéanann an leabharlann seo ach ídiú disciplínithe ar an struchtúr sin. Rinne an teanga cheana an t-aon deighilt a theastaíonn ó i18n — téacs statach scartha ó luachanna — mar sin ní pharsálann an leabharlann do chód foinseach riamh agus ní thugann sí buille faoi thuairim riamh faoin áit a suíonn luach laistigh d'abairt. Is é atá fágtha ná trí chinneadh: conas a éiríonn eochair chatalóige as an struchtúr, cad is féidir le haistriúchán ar an eochair sin a rá, agus conas a rindreáileann an dá cheann le chéile arís.
Ón teimpléad go dtí an msgid¶
Díorthaítear msgid — an eochair a n-innéacsaítear catalóg léi — ó chodanna
statacha an teimpléid amháin. Siúil trí strings agus interpolations in
ord na foinse; éalaigh na lúibíní i ngach mír litriúil (éiríonn {{ as {);
i gcás gach idirshuímh, astaigh comhartha {name} amháin, áit arb é name
téacs an tsloinn agus an spás bán timpeall air bainte de. Ó
t"Total: {amount:,.2f}":
strings ('Total: ', '')
interpolations expression 'amount' conversion None format_spec ',.2f'
msgid 'Total: {amount}'
Tá cúis le gach cuid den riail sin:
- Caithfidh an slonn a bheith ina ainm lom — tá
str.isidentifier()fíor agus ní eochairfhocal Python é. Diúltaítear dot"Hello {user.name}"ag láthair an ghlao. Is eochair é msgid: caithfidh sé teacht amach mar an gcéanna ag gach rith agus ag gach eastóscadh, agus léann aistritheoirí é, mar sin caithfidh an sealbhóir ionaid a bheith ina fhocal cobhsaí fiúntach — ní ina bhlúire cóid a thugann cuireadh don chatalóg éirí ina teanga sloinn. - Ní théann an tiontú ná an sonrú formáide isteach sa msgid riamh. Níor
cheart go mbeadh ar aistritheoirí
:,.2fa léamh, agus níor cheart go bhféadfadh aon aistriúchán é a athrú. Is fiú an iarmhairt a bheith ar eolas agat: ní athraíonn:,.2fa theannadh go:,.0fi do chód aon msgid, mar sin ní chuireann sé aistriúchán ar bith ó bhail in aon teanga. Rianaíonn eochair na catalóige an méid a deir an abairt, ní an chaoi a bhformáidítear an luach. - Caithfidh ainm athdhéanta a fhormáidiú a athdhéanamh go beacht.
Diúltaítear do
t"{x:.2f} vs {x:.3f}", mar go dtiteann an dá tharlú isteach sa chomhartha{x}céanna agus nach bhféadfadh an msgid a rá a thuilleadh cén formáidiú ar cheart do rindreáil a úsáid. - Ní lorgaítear an msgid folamh riamh, mar go gcoinníonn gettext é do
cheanntásc meiteashonraí na catalóige féin. Rindreáileann
t""mar""gan lámh a leagan ar an gcatalóg.
Tá an tacar iomlán rialacha, na cásanna imill a scipeálann an leathanach seo san áireamh, in SPEC §2.
Cad is féidir le haistriúchán a rá¶
Parsáiltear patrún a fhilleann ó chatalóg le string.Formatter — an parsálaí
céanna a úsáideann str.format. Tá an ghramadach ar iasacht d'aon ghnó
seachas í a cheapadh: is patrún é ceann a nglacann an leabharlann seo leis a
thuigeann an t-éiceachóras níos leithne cheana. Ansin cuirtear dhá sheiceáil i
bhfeidhm.
Cruth: caithfidh gach réimse a bheith ina {name} lom. Diúltaítear do
thiontú nó do shonrú formáide — an {name:} atá folamh go follasach san
áireamh — mar aon le réimsí suímh ({0}, {}) agus le hainmneacha a bhfuil
spás bán stuáilte iontu ({ name }). Tá tábhacht níos mó leis an gceann
deireanach ná mar a fheictear: diúltaíonn str.format agus msgfmt GNU araon
do { name }, mar sin dá nglacfaí leis anseo tháirgfí catalóga nach
bhféadfadh aon uirlis eile sa slabhra iad a bhailíochtú.
Ainmneacha: cuirtear tacar sealbhóirí ionaid an phatrúin i gcomparáid le tacar na foinse. I gcás teachtaireachta uatha tá gach ainm foinseach riachtanach agus níl aon rud eile ceadaithe. I gcás teachtaireachta iolra cumasctar an dá bhrainse:
- ceadaithe = aontas ainmneacha an dá bhrainse
- riachtanach = a dtrasnú
Mar sin i gcoinne t"One file" / t"{n} files", tá an t-ainm n ceadaithe in
aistriúchán ar cheachtar foirm ach níl sé riachtanach do cheachtar acu. Is í an
neamhshiméadracht sin a ligeann do chóras iolra na sprioctheanga bheith
difriúil le córas na foinse — aistríonn an tSeapáinis an dá bhrainse le foirm
amháin a úsáideann {n} is dócha; d'fhéadfadh go dteastódh {n} ó theanga a
bhfuil níos mó foirmeacha aici ná an Béarla i bhfoirm nach bhfuil ceann ar
bith ag an mBéarla.
Níl aon chuid de sin hipitéiseach: iompraíonn catalóg chróm an tsuímh seo féin
an teachtaireacht iolra Built {n} localized page / Built {n} localized
pages — dhá bhrainse Béarla — agus aistríonn eagráin an tsuímh an
teachtaireacht amháin sin go dtí idir foirm amháin agus sé cinn.
Naoi gcinn de na heagráin sin, in ord na bhfoirmeacha
| Catalóg | Foirmeacha | Na haistriúcháin, in ord na bhfoirmeacha |
|---|---|---|
| Seapáinis | 1 | ローカライズ済みページを{n}件ビルドしました |
| Tuircis | 2 | {n} yerelleştirilmiş sayfa oluşturuldu — faoi dhó, mar an gcéanna: fanann ainmfhocail na Tuircise san uatha i ndiaidh uimhreach |
| Iodáilis | 2 | Generata {n} pagina localizzata · Generate {n} pagine localizzate — réitíonn an rangabháil in inscne agus in uimhir |
| Laitvis | 3 | Izveidota {n} lokalizēta lapa · Izveidotas {n} lokalizētas lapas · Izveidots {n} lokalizētu lapu — níl an tríú foirm ann ach do nialas amháin |
| Rúisis | 3 | Собрана {n} локализованная страница · Собраны {n} локализованные страницы · Собрано {n} локализованных страниц |
| Polainnis | 3 | Zbudowano {n} zlokalizowaną stronę · Zbudowano {n} zlokalizowane strony · Zbudowano {n} zlokalizowanych stron |
| Slóivéinis | 4 | Zgrajena {n} lokalizirana stran · Zgrajeni {n} lokalizirani strani · Zgrajene {n} lokalizirane strani · Zgrajenih {n} lokaliziranih strani — is déach í an dara ceann, do dhá cheann go beacht |
| Gaeilge | 5 | Tógadh {n} leathanach logánaithe · Tógadh {n} leathanaigh logánaithe — a haon, a dó, 3–6, 7–10, agus an chuid eile; malartaíonn an gas, ach tosaíonn leathanach le l, litir nach scríobhtar aon athrú tosaigh Gaeilge uirthi, agus mar sin tagann roinnt foirmeacha le chéile |
| Araibis | 6 | ina measc تم إنشاء صفحة مترجمة واحدة ({n}) do cheann amháin go beacht agus تم إنشاء {n} صفحات مترجمة do bheagán |
Is iontráil bheo é gach ró in i18n/*/LC_MESSAGES/site.po na stórlainne seo,
rindreáilte ag an tógáil ilteangach ag gach eisiúint — agus
greamaíonn tástáil an tábla seo do na catalóga sin, mar sin ní féidir leis an
dá cheann imeacht óna chéile.
Laistigh de na teorainneacha sin, tá an t-athordú agus an t-athdhéanamh gan
srian d'aon ghnó. Tá an dá rud riachtanach ó thaobh na gramadaí de i
bhfíortheangacha, agus dá gcuirfí srian ar líon na dtarluithe dhiúltófaí
d'aistriúcháin chearta gan buntáiste slándála ar bith: ní féidir le
haistriúchán aon rud a mheas fós, mar nach bhfuil aon chosán meastóireachta
ann — lorgaítear sealbhóirí ionaid de réir ainm i luachanna an teimpléid atá
ríofa cheana, agus ní chuirtear go dtí eval, getattr ná str.format féin
riamh iad.
Rindreáil¶
Is siúlóid thar a chodanna í patrún bailíochtaithe a rindreáil: astaigh gach
cuid litriúil, agus i gcás gach sealbhóra ionaid, tóg luach gafa an idirshuímh
agus cuir an tiontú agus an sonrú formáide ar thaobh na foinse i bhfeidhm —
format(convert(value, conversion), format_spec). Coinnítear dhá ráthaíocht
agus é sin á dhéanamh:
- Ní fhormáidítear gach luach ar leith ach uair amháin ar a mhéad in aghaidh
na rindreála, fiú nuair a athdhéanann an t-aistriúchán sealbhóir ionaid.
Athraíonn an t-athdhéanamh cé chomh minic a chuirtear an toradh isteach, ní
cé chomh minic a ritheann do
__format__. - I gcás iolraí, léann sealbhóir ionaid an brainse a shainigh é. Léann
ainm atá sa dá bhrainse an luach a ghabh an brainse a roghnaíonn an teanga
fhoinseach (
singularnuair isn == 1,pluralseachas sin); léann ainm a bhaineann le brainse ar leith a bhrainse féin i gcónaí, fiú nuair a chuir rialacha iolra na sprioctheanga ar fáil i bhfoirm eile é.
Nuair a theipeann ar an mbailíochtú ag am rindreála, roinntear an freagra de
réir cé a sholáthair an patrún. Téann patrún a tháinig as catalóg in olcas:
logáil rabhadh amháin agus rindreáil an téacs foinseach, agus coinnigh conradh
gettext nach leagann catalóg lochtach an feidhmchlár riamh
(taispeánann an treoir an dá mhód).
Ardaíonn patrún a chuir an glaoiteoir isteach go díreach —
CompiledTemplate.render — eisceacht i gcónaí, mar nach bhfuil aon téacs
foinseach ann le dul in olcas uaidh; tá an bhoige ann do chuardaigh
chatalóige, ní d'argóintí.
Is cuid den dearadh iad na diagnóisicí¶
Is os comhair aistritheora seachas programmer a thagann earráid sealbhóra
ionaid de ghnáth, agus is minic i gcomhad ina bhfuil an fhadhb dofheicthe. Is
bóthar caoch é {name} is missing a rá le duine a fheiceann na carachtair
chruinne sin ina eagarthóir, mar sin ríomhtar na teachtaireachtaí de réir trí
riail:
- Priontáiltear ainm ina bhfuil carachtar dofheicthe — spás gan bhriseadh
a chruthaigh modh ionchuir, spás nialas-leithid — agus pointe cóid an
charachtair sin curtha ina áit, san áit chéanna:
{<U+00A0>name}. Tá gá ag an léitheoir an áit a fheiceáil. - Taispeántar ainm a bhfuil córais scríbhneoireachta measctha ina
litreacha, cás na homaghlifeanna, faoi dhó — uair amháin go hinléite, uair
amháin éalaithe — mar nach féidir
{nаme}leаCoireallach a idirdhealú ó{name}i gcló, agus is í an fhoirm éalaithe(nаme)an t-aon litriú a aithníonn óna chéile iad. - Taispeántar gach rud eile mar a scríobhadh é. Is gnáthainmneacha iad
{名前}agus{café}; dá n-éalófaí iad d'fhágfaí an léitheoir gan a bheith in ann teacht ar an rud a bhí i gceist.
Ar an bprionsabal céanna, mínítear easpa sealbhóra ionaid atá "ar iarraidh"
ach a bhfuil an chuma air go bhfuil sé ann — lúibíní lánleithid ó mhodh
ionchuir Oirthear na hÁise, {{name}} dúblaithe ó thuras éalaithe, an t-ainm
lasmuigh d'aon lúibíní. Taispeánann
tábla léite na dteipeanna a
scríobhadh d'aistritheoirí gach ceann de na teachtaireachtaí seo focal ar
fhocal.
An cosán te¶
Tarlaíonn a bhfuil thuas ar gach teaghrán aistrithe a rindreáileann feidhmchlár, mar sin tá an cur i bhfeidhm tógtha timpeall ar smaoineamh amháin: ní scipeáiltear an bailíochtú riamh, mar sin caithfidh gurb é an bailíochtú a chuirtear i dtaisce.
flowchart LR
T["t-string"] --> S{"an bhfacthas an<br>struchtúr cheana?"}
S -- "aimsithe" --> G["cuardach catalóige<br>de réir msgid sa taisce"]
S -- "ar iarraidh" --> D["díorthaigh msgid,<br>cuir an plean i dtaisce"] --> G
G --> V{"an bhfacthas an<br>patrún cheana?"}
V -- "aimsithe" --> R["rindreáil"]
V -- "ar iarraidh" --> C["bailíochtaigh,<br>cuir an bhreith i dtaisce"] --> R
Trí thaisce, ceann in aghaidh na céime:
- Plean in aghaidh struchtúr láthair glao. Is é an codach
stringsde chuid an teimpléid — oibiacht a thóg an léirmhínitheoir cheana — eochair na taisce, mar sin ní leithdháileann cuardach faic. Nuair a aimsítear ceann, déantar slonn, tiontú agus sonrú formáide gach idirshuímh a chur i gcomparáid leis na cinn taifeadta fós: níor cheart do dhá láthair ghlao a roinneann téacs litriúil ach a bhfuil formáidiú difriúil acu (t"{x:.2f}"i gcoinnet"{x:.3f}") imbhualadh, agus is í an chomparáid sin an praghas ar eochair a úsáid a shíneann an léirmhínitheoir chugat saor in aisce. - Breith in aghaidh an phatrúin. An chéad uair a fhreagraíonn catalóg le patrún ar leith, parsáiltear agus bailíochtaítear é; coinnítear an toradh — plean rindreála tiomsaithe, nó taifead ar neamhbhailíocht — ar an bplean. Sroicheann gach rindreáil níos déanaí ar an teachtaireacht sin é in aon chuardach foclóra amháin. Coinnítear cuimhne ar phatrúin neamhbhailí freisin, agus sin an fáth a dtugann iontráil chatalóige lochtach rabhadh uair amháin seachas ag gach rindreáil.
- Plean cumaiscthe in aghaidh gach péire iolra, ina bhfuil na tacair aontais/trasnaithe ionas nach dtarlaíonn uimhríocht na mbrainsí ach uair amháin in aghaidh na teachtaireachta, ní uair amháin in aghaidh an ghlao.
Tá teorainn le gach taisce, agus ní choinníonn ceann ar bith luachanna
idirshuite — níl ann ach struchtúr statach agus téacs patrúin. An toradh, arna
thomhas ag
benchmarks/runtime.py
ar CPython 3.14.6, macOS 26 ar ríomhaire glúine arm64: thart ar 0.4 µs do
theachtaireacht a bhfuil réimse amháin inti, tógáil an t-string féin san
áireamh, thart ar 2.7× gnáth-gettext(...).format(...) nach seiceálann faic.
Is iad sin figiúirí meaisín amháin — priontálann an script a léirmhínitheoir
agus a hardán ina ceanntásc, mar sin rith ar an gcrua-earra a n-imscarann tú
air i ndáiríre í sula nglacfaidh tú le cóimheas ar bith mar cheann s'agatsa.
Taifeadann an tráchtaireacht ag barr
core.py
na tomhais aonair atá taobh thiar den chruth sin.
É a athchur i bhfeidhm¶
Níl aon chuid de sin sainiúil don chur i bhfeidhm seo: tá an coinbhinsiún scríofa síos mar shonraíocht v1, agus ligeann a sraith comhréireachta atá inléite ag meaisín d'eastóscóir, do bhreiseán IDE, nó do chur i bhfeidhm i dteanga eile é féin a sheiceáil i gcoinne gach rialach a mhínigh an leathanach seo. Ritheann an cur i bhfeidhm seo an tsraith ina thástálacha féin, agus sin an rud a choinníonn an leathanach seo, an tsonraíocht agus an cód ó imeacht óna chéile ina dtost.