Tulkojiet pilnus ziņojumus
ar Python t-virknēm¶
gettext-tstrings savieno Python 3.14+ t-virknes ar standarta gettext
katalogiem un Babel rīkiem. Vērtības un formatējums paliek lietotnes kodā;
tulkotāji strādā ar pilniem ziņojumiem un vienkāršiem {name} vietturiem:
import gettext
from gettext_tstrings import Translator
_ = Translator(gettext.translation("messages", localedir="locales"))
name = "Ada"
print(_(t"Hello {name}")) # with a Japanese catalog: こんにちは Ada
Katalogs satur Hello {name}. Tulkojums drīkst {name} pārvietot vai
atkārtot. Ja tas vietturi nomet, pārdēvē vai pārformatē, katalogu validācija
ziņo par kļūdu. Ja nederīgs ieraksts tomēr nonāk produkcijā, bibliotēka
ieraksta brīdinājumu un renderē avota ziņojumu, nevis avarē.
Sākt piecu minūšu pamācību Salīdziniet alternatīvas
Alfa · Python 3.14+ · standarta PO/MO katalogi · nav trešo pušu izpildlaika atkarību
Šī vietne praktizē to, ko dokumentē: katrs valodas izdevums — navigācija,
uzraksti un daudzskaitli ievērojošā būvējuma atskaite — tiek renderēts no PO
katalogiem ar
paša gettext-tstrings palīdzību.
Vai tas ir domāts jums?¶
Piemērots jau šodien, ja jūsu lietotne darbojas uz Python 3.14 vai jaunāka; jūs jau lietojat gettext un Babel vai gribat pārņemt to PO/MO darbplūsmu; un jūs gribat t-virkņu sintaksi ar nosauktiem vietturiem, kas tiek pārbaudīti pirms renderēšanas.
Vēl nav piemērots, ja jums vajadzīgs Python 3.13 vai vecāks; jums nepieciešams stabils Python API — šī ir alfa versija, un specifikācija ir tā daļa, kas ir nostabilizējusies; vai gandrīz viss jūsu tulkojamais teksts atrodas veidņu valodā, nevis Python pirmkodā.
Jums jau ir katalogi? Tie turpina strādāt. _("Hello {name}").format(name=name)
un tr(t"Hello {name}") rada vienu un to pašu msgid, tāpēc esošie tulkojumi
pārmaiņu pārdzīvo — Migrācija izstaigā visu pāreju.
Ko katalogs drīkst pateikt¶
Tulkojums nespēj mainīt tā ziņojuma struktūru, kuru tas tulko. Tāds ir viss
solījums, un no tā izriet viss pārējais šajā vietnē. Tulkojums drīkst {name}
pārkārtot vai atkārtot un drīkst pārrakstīt katru citu vārdu tam apkārt. Tas
nedrīkst vietturi nomest, izdomāt jaunu, caur to sniegties jūsu objektos vai
pievienot tam savu formatējumu.
Bibliotēka to pārbauda ceļā iekšā — kad katalogi tiek kompilēti — un vēlreiz renderēšanas brīdī, un tieši tā ir atšķirība starp kļūdu, kas atrasta pārskatīšanā, un kļūdu, ko atrod lietotājs.
Vai gettext jums ir jaunums? Visa darbplūsma četros teikumos
gettext ir standarta veids, kā programmatūra tiek tulkota — gan
Python, gan tālu aiz tā. Jūsu kods atzīmē tulkojamos ziņojumus;
ekstraktors savāc tās veidnes failā (.pot); tulkotājs — parasti nevis
programmētājs — aizpilda vienu kataloga failu (.po) katrai valodai, kas
tiek kompilēts binārā .mo failā, ko jūsu lietotne ielādē izpildlaikā.
Tulkošanas funkcijas ierastais nosaukums ir _, tāpēc _(t"Hello {name}")
lasās kā “iztulko šo ziņojumu”. Pamācība izstaigā visu
ceļu — atzīmēt, ekstrahēt, iztulkot, kompilēt, palaist — aptuveni piecās
minūtēs.
Problēma, ko tas risina¶
F-virkne ir jau interpolēta brīdī, kad to ierauga kāda bibliotēka —
f"Hello {name}" ir kļuvis par "Hello Ada", un fragmentu tulkošana ap
vērtību lauž gramatiku lielākajā daļā valodu. T-virkne (PEP 750) tur
statisko tekstu, aprēķinātās vērtības, avota izteiksmes, konversijas un
formāta specifikācijas atsevišķi — un tieši tāds dalījums ir vajadzīgs
ziņojumu katalogam.
Ko tas maina, salīdzinot ar %(name)s, .format() un
$-virknēm.
Tomēr ne gettext, ne Babel nepasaka, kā t-virkne kļūst par ziņojumu. Šī bibliotēka izdara šo izvēli, pieraksta to kā versionētu specifikāciju un piegādā atbilstības komplektu, lai to pārbaudītu.
Dizaina noteikumi¶
- Tulkot pilnus ziņojumus, nekad ne teikumu fragmentus.
- Pieņemt tikai vienkāršus mainīgo nosaukumus, tādus kā
{name}. - Paturēt
!run:.2flietotnes kontrolē, ārpus kataloga. - Ļaut tulkojumiem pārkārtot un atkārtot zināmos vietturus, vienlaikus liedzot tiem sniegties pie atribūtiem vai pievienot formatējumu.
- Izmantot parastos POT, PO un MO failus un rīkus, kas tos jau lasa.
Un tam atbilstošais saraksts ar to, ko tas apzināti atstāj mierā: tas nelokalizē skaitļus, valūtas vai datumus — noformatējiet tos vispirms ar Babel; tas neekranē renderēto izvadi HTML, čaulai vai terminālim; un tas nespēj spriest, vai tulkojums ir pareizs, tikai to, vai tā vietturi ir neskarti.
Instalēšana¶
Python 3.14 vai jaunāks. Renderēšanai nav atkarību — tā izmanto standarta
bibliotēkas gettext un neko citu.
Ekstrakcija un katalogu validācija notiek caur Babel, tāpēc instalējiet šo
papildinājumu visur, kur darbojas pybabel, kas parasti ir izstrādes vai CI
vide, nevis produkcijas attēls:
Kurp doties tālāk¶
Sāciet šeit — pieredze ar gettext netiek prasīta:
- Pamācība — no tukša direktorija līdz strādājošam tulkojumam japāņu valodā piecos soļos, katra komanda parādīta kopā ar tās izvadi.
- Kāpēc t-virknes — viens un tas pats ziņojums, uzrakstīts
četros veidos, un tas, ko katalogam pasniedz
%(name)s,.format()un$-virknes.
Lietojiet — darba uzziņas:
- Ceļvedis — izpildlaika API: kuru ieejas punktu lietot, daudzskaitļi, valodas katram pieprasījumam, atliktās virknes un tas, kas notiek, kad katalogs ir kļūdains.
- Ekstrakcija —
pybabeluzziņa: konfigurācija, pielāgoti funkciju nosaukumi un tas, kā jau esošie rīki validē šos katalogus bez papildu pūlēm. - Produkcijā — cikls tā, kā to izpilda komanda: atjaunināšanas cikls, fuzzy ieraksti, CI vārti, tulkošanas platformas un piegāde.
- Migrācija — šī pārņemšana projektā, kuram jau ir katalogi, pa vienai izsaukuma vietai.
- Tulkotājiem — viena lapa, ko iedot tam, kurš rediģē
.pofailus.
Izprotiet — no vēstures līdz implementācijai:
- Priekšvēsture — kāpēc šī bibliotēka pastāv: trīsdesmit gadi gettext, divi PEP un standarta bibliotēkas diskusija, kas noslēdzās bez atbildes.
- Kļūmes — ko šīs vietnes tulkošana trīsdesmit piecās valodās patiešām salauza un kuru pusi no tā rīks spēj noķert.
- Kā tas darbojas — no PEP 750 šablona objekta līdz renderētai virknei un kešatmiņām, kas padara pārbaudi lētu.
Atsauce — kontrakti:
- API — viss, ko pakotne eksportē, vienā lapā.
- Specifikācija — konvencija t-virkne ↔ msgid kā stabils, versionēts kontrakts ar mašīnlasāmu atbilstības komplektu.
Statuss¶
| Pakotnes versija | 0.1.0a8 |
| API stabilitāte | alfa — Python API vēl var mainīties |
| Specifikācija | v1 ar atbilstības komplektu |
| Python | 3.14 un jaunāks; testēts ar 3.14, 3.14t (brīvpavedienu) un 3.15 |
| Babel | 2.18 vai jaunāks, un tikai tur, kur darbojas pybabel |
| Izpildlaika atkarības | nav — standarta bibliotēkas gettext |
| Katalogu formāts | parastie POT, PO un MO |
| Izmaiņas | CHANGELOG |
Alfa versija. Kontrakts ir apzināti mazs, un specifikācija ir tā stabilā daļa; Python API vēl var mainīties. Pirms stabila laidiena tam nepieciešami plašāki valodu fixture komplekti, ilgstoša veiktspējas uzraudzība, API pārskats no cilvēkiem, kuri gettext un Babel lieto nopietni, un savietojamības testi visos atbalstītajos Python un Babel laidienos.
Problēmziņojumi un pull request ir gaidīti — alfa ir tieši tas brīdis, kad par saskarni vēl ir vērts strīdēties.
Pievienojieties kopienai¶
- Izvēlieties good first issue kā ierobežotu pirmo ieguldījumu.
- Uzdodiet jautājumus par lietošanu Q&A diskusijās.
- Atnesiet produkcijas gettext darbplūsmas un API idejas uz Ideas diskusijām.
- Izlasiet ieguldījuma ceļvedi, pirms atverat pull request.