Neidio i'r cynnwys

Cyfieithwch negeseuon cyflawn
â llinynnau-t Python

Mae gettext-tstrings yn cysylltu llinynnau-t Python 3.14+ â chatalogau gettext safonol ac offer Babel. Mae gwerthoedd a fformatio'n aros yng nghod y rhaglen; mae cyfieithwyr yn gweithio â negeseuon cyflawn a dalwyr lle {name} syml:

import gettext

from gettext_tstrings import Translator

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

Mae'r catalog yn cynnwys Hello {name}. Caiff cyfieithiad symud neu ailadrodd {name}. Os yw'n ei ddileu, yn ei ailenwi, neu'n ei ailfformatio, mae dilysu'r catalog yn adrodd y gwall. Os yw cofnod annilys yn cyrraedd cynhyrchu beth bynnag, mae'r llyfrgell yn cofnodi rhybudd ac yn rendro'r neges ffynhonnell yn lle chwalu.

Dechrau'r tiwtorial pum munud Cymharwch y dewisiadau eraill

Alffa · Python 3.14+ · catalogau PO/MO safonol · dim dibyniaethau rhedeg trydydd parti

Mae'r wefan hon yn ymarfer yr hyn y mae'n ei ddogfennu: mae pob argraffiad iaith — y llywio, y labeli, a'r adroddiad adeiladu sy'n ymwybodol o ffurfiau lluosog — yn cael ei rendro o gatalogau PO gan gettext-tstrings ei hun.

Ai ar eich cyfer chi y mae hyn?

Yn addas heddiw pan fo eich rhaglen yn rhedeg ar Python 3.14 neu fwy newydd; eich bod eisoes yn defnyddio gettext a Babel, neu am fabwysiadu eu llif gwaith PO/MO; a'ch bod am gystrawen llinyn-t â dalwyr lle wedi'u henwi sy'n cael eu gwirio cyn iddynt rendro.

Ddim yn addas eto pan fo angen Python 3.13 neu hŷn arnoch; pan fo angen API Python sefydlog arnoch — alffa yw hwn, a'r fanyleb yw'r rhan ohono sydd wedi setlo; neu pan fo bron yr holl destun cyfieithadwy sydd gennych yn byw mewn iaith dempledu yn hytrach nag mewn ffynhonnell Python.

Catalogau gennych eisoes? Maent yn dal i weithio. Mae _("Hello {name}").format(name=name) a tr(t"Hello {name}") yn cynhyrchu'r un msgid, felly mae'r cyfieithiadau sy'n bodoli'n goroesi'r newid — mae Mudo yn cerdded y symud cyfan.

Yr hyn y caiff y catalog ei ddweud

Ni all cyfieithiad newid strwythur y neges y mae'n ei chyfieithu. Dyna'r addewid cyfan, ac o hynny y daw gweddill y wefan hon. Caiff cyfieithiad aildrefnu neu ailadrodd {name}, a chaiff ailysgrifennu pob gair arall o'i amgylch. Ni chaiff ollwng y daliwr lle, dyfeisio un newydd, estyn drwyddo i mewn i'ch gwrthrychau, na chysylltu fformatio o'i ben a'i bastwn ei hun.

Mae'r llyfrgell yn gwirio hynny ar y ffordd i mewn — pan grynhoir catalogau — ac eto adeg rendro, sef y gwahaniaeth rhwng camgymeriad a ganfyddir mewn adolygiad a chamgymeriad a ganfyddir gan ddefnyddiwr.

Gettext yn newydd i chi? Y llif gwaith cyfan mewn pedair brawddeg

gettext yw'r ffordd safonol y caiff meddalwedd ei chyfieithu, yn Python a thu hwnt o lawer. Mae eich cod yn nodi'r negeseuon cyfieithadwy; mae echdynnwr yn eu casglu i ffeil dempled (.pot); mae cyfieithydd — nad yw fel arfer yn rhaglennydd — yn llenwi un ffeil gatalog (.po) fesul iaith, sy'n cael ei chrynhoi'n ffeil ddeuaidd .mo y mae eich rhaglen yn ei llwytho wrth redeg. Yr enw confensiynol ar y ffwythiant cyfieithu yw _, felly mae _(t"Hello {name}") yn darllen fel "cyfieitha'r neges hon". Mae'r tiwtorial yn cerdded y llwybr cyfan — nodi, echdynnu, cyfieithu, crynhoi, rhedeg — mewn tua phum munud.

Y broblem y mae'n ei datrys

Mae llinyn-f eisoes wedi'i ryngosod erbyn i unrhyw lyfrgell ei weld — mae f"Hello {name}" wedi troi'n "Hello Ada", ac mae cyfieithu'r darnau o amgylch gwerth yn torri gramadeg y rhan fwyaf o ieithoedd. Mae llinyn-t (PEP 750) yn cadw'r testun statig, y gwerthoedd a gyfrifwyd, yr ymadroddion ffynhonnell, y trawsnewidiadau a'r manylebau fformat ar wahân — sef yn union y rhaniad y mae catalog negeseuon ei angen. Beth mae hynny'n ei newid, o'i gymharu â %(name)s, .format() a llinynnau $.

Nid oes dim yn gettext nac yn Babel yn dweud sut y daw llinyn-t yn neges, serch hynny. Mae'r llyfrgell hon yn gwneud y dewis hwnnw, yn ei ysgrifennu i lawr yn fanyleb â fersiwn, ac yn cludo'r gyfres gydymffurfio i'w wirio.

Y rheolau cynllunio

  • Cyfieithu negeseuon cyflawn, byth darnau o frawddegau.
  • Derbyn enwau newidynnau syml yn unig, megis {name}.
  • Cadw !r a :.2f dan reolaeth y rhaglen, allan o'r catalog.
  • Caniatáu i gyfieithiadau aildrefnu ac ailadrodd dalwyr lle hysbys, gan eu hatal rhag cyrraedd priodoleddau neu ychwanegu fformatio.
  • Ailddefnyddio ffeiliau POT, PO ac MO cyffredin, a'r offer sydd eisoes yn eu darllen.

A'r rhestr gyfatebol o'r hyn y mae'n ei adael llonydd yn fwriadol: nid yw'n lleoleiddio rhifau, arian, na dyddiadau — fformatiwch y rheini'n gyntaf, gyda Babel; nid yw'n dianc allbwn wedi'i rendro ar gyfer HTML, cragen, na therfynell; ac ni all farnu a yw cyfieithiad yn gywir, dim ond a yw ei ddalwyr lle'n gyfan.

Gosod

python -m pip install gettext-tstrings

Python 3.14 neu fwy newydd. Nid oes gan y rendro unrhyw ddibyniaethau — mae'n defnyddio gettext y llyfrgell safonol a dim byd arall.

Mae'r echdynnu a dilysu catalogau'n rhedeg drwy Babel, felly gosodwch yr ychwanegyn hwnnw ple bynnag y mae pybabel yn rhedeg, sef amgylchedd datblygu neu CI fel arfer yn hytrach nag delwedd gynhyrchu:

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

I ble nesaf

Dechreuwch yma — heb dybio unrhyw brofiad o gettext:

  • Tiwtorial — o gyfeiriadur gwag i gyfieithiad Japaneg sy'n rhedeg mewn pum cam, pob gorchymyn wedi'i ddangos gyda'i allbwn.
  • Pam llinynnau-t — yr un neges wedi'i hysgrifennu mewn pedair ffordd, a'r hyn y mae %(name)s, .format() a llinynnau $ yn ei drosglwyddo i'r catalog.

Ei ddefnyddio — y cyfeirlyfrau gwaith:

  • Canllaw — yr API rhedeg: pa bwynt mynediad i'w ddefnyddio, ffurfiau lluosog, ieithoedd fesul cais, llinynnau gohiriedig, a beth sy'n digwydd pan fo catalog yn anghywir.
  • Echdynnu — y cyfeirlyfr pybabel: ffurfweddu, enwau ffwythiannau pwrpasol, a sut y mae offer sy'n bodoli eisoes yn dilysu'r catalogau hyn am ddim.
  • Mewn cynhyrchu — y ddolen fel y mae tîm yn ei rhedeg: y cylch diweddaru, cofnodion fuzzy, gatiau CI, llwyfannau cyfieithu, a chludo.
  • Mudo — mabwysiadu hwn mewn prosiect sydd eisoes â chatalogau, un safle galw ar y tro.
  • I gyfieithwyr — un dudalen i'w rhoi i bwy bynnag sy'n golygu'r ffeiliau .po.

Ei ddeall — o'r hanes at y gweithredu:

  • Cefndir — pam y mae'r llyfrgell hon yn bodoli: deng mlynedd ar hugain o gettext, dau PEP, a'r drafodaeth am y llyfrgell safonol a gaeodd heb ateb.
  • Peryglon — beth a dorrodd cyfieithu'r wefan hon i bymtheg ar hugain o ieithoedd mewn gwirionedd, a pha hanner y gall offeryn ei ddal.
  • Sut mae'n gweithio — o wrthrych templed PEP 750 at y llinyn wedi'i rendro, a'r cachau sy'n gwneud y gwirio'n rhad.

Cyfeirlyfr — y contractau:

  • API — popeth y mae'r pecyn yn ei allforio, ar un dudalen.
  • Manyleb — y confensiwn llinyn-t ↔ msgid fel contract sefydlog â fersiwn, gyda chyfres gydymffurfio y gall peiriant ei darllen.

Statws

Fersiwn y pecyn 0.1.0a8
Sefydlogrwydd yr API alffa — efallai y bydd yr API Python yn newid eto
Manyleb v1, gyda chyfres gydymffurfio
Python 3.14 a mwy newydd; wedi'i brofi ar 3.14, 3.14t (di-edau) a 3.15
Babel 2.18 neu fwy newydd, a dim ond ple mae pybabel yn rhedeg
Dibyniaethau rhedeg dim — gettext y llyfrgell safonol
Fformat catalog POT, PO ac MO cyffredin
Newidiadau CHANGELOG

Alffa. Mae'r contract yn fach yn fwriadol a'r fanyleb yw'r rhan sefydlog ohono; efallai y bydd yr API Python yn symud eto. Cyn rhyddhad sefydlog mae angen ffurfweddiadau iaith ehangach, olrhain perfformiad cyson, adolygiad API gan bobl sy'n defnyddio gettext a Babel o ddifrif, a phrofi cydnawsedd ar draws pob rhyddhad Python a Babel a gefnogir.

Mae materion a chynigion tynnu yn cael croeso — alffa yw'r union adeg y mae'n dal yn werth dadlau am y rhyngwyneb.

Ymunwch â'r gymuned