Ruka hadi kwenye maudhui

Tafsiri jumbe kamili
kwa t-strings za Python

gettext-tstrings huunganisha t-strings za Python 3.14+ na katalogi sanifu za gettext na zana za Babel. Thamani na uumbizaji hubaki ndani ya msimbo wa programu; watafsiri hushughulika na jumbe kamili na vishika nafasi rahisi vya {name}:

import gettext

from gettext_tstrings import Translator

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

Katalogi hushikilia Hello {name}. Tafsiri inaweza kuhamisha au kurudia {name}. Ikiwa itakiondoa kishika nafasi, kukipa jina jingine, au kukiumbiza upya, uthibitishaji wa katalogi huripoti hitilafu. Ikiwa ingizo batili litafikia uzalishaji hata hivyo, maktaba huandika onyo na huonyesha ujumbe chanzo badala ya kuanguka.

Anza mafunzo ya dakika tano Linganisha mbadala

Alpha · Python 3.14+ · katalogi sanifu za PO/MO · hakuna vitegemezi vya wakati wa utekelezaji kutoka kwa watu wa tatu

Tovuti hii hutekeleza kile inachoandika: kila toleo la lugha — urambazaji, lebo, na ripoti ya ujenzi inayotambua wingi — huonyeshwa kutoka katalogi za PO na gettext-tstrings yenyewe.

Je, hii ni kwa ajili yako?

Inafaa leo ikiwa programu yako huendeshwa kwenye Python 3.14 au mpya zaidi; tayari unatumia gettext na Babel, au unataka kuanza kutumia mtiririko wao wa PO/MO; nawe unataka sintaksia ya t-string yenye vishika nafasi vyenye majina vinavyokaguliwa kabla ya kuonyeshwa.

Bado haifai ikiwa unahitaji Python 3.13 au ya zamani zaidi; unahitaji API thabiti ya Python — hii ni alpha, na ainisho ndiyo sehemu yake iliyotulia; au takribani maandishi yako yote yanayotafsirika hukaa ndani ya lugha ya violezo badala ya msimbo chanzo wa Python.

Tayari una katalogi? Zitaendelea kufanya kazi. _("Hello {name}").format(name=name) na tr(t"Hello {name}") huzalisha msgid ileile, hivyo tafsiri zilizopo hunusurika mabadiliko — Uhamiaji hupitia hatua nzima.

Kile katalogi inachoruhusiwa kusema

Tafsiri haiwezi kubadilisha muundo wa ujumbe inaoutafsiri. Hiyo ndiyo ahadi nzima, na kila kitu kingine kwenye tovuti hii hufuata kutoka hapo. Tafsiri inaweza kupanga upya au kurudia {name}, nayo inaweza kuandika upya kila neno jingine linalokizunguka. Haiwezi kukiondoa kishika nafasi, kubuni kipya, kufikia vitu vyako kupitia kishika nafasi, wala kuambatisha umbizo lake yenyewe.

Maktaba hukagua hilo wakati wa kuingia — katalogi zinapokusanywa — na tena wakati wa kuonyesha, na hapo ndipo tofauti ilipo kati ya kosa linalogunduliwa kwenye mapitio na kosa linalogunduliwa na mtumiaji.

Mgeni kwa gettext? Mtiririko mzima wa kazi kwa sentensi nne

gettext ndiyo njia ya kawaida ambayo programu hutafsiriwa, ndani ya Python na mbali zaidi. Msimbo wako huweka alama kwenye jumbe zinazotafsirika; kitoaji huzikusanya katika faili la kiolezo (.pot); mfasiri — mara nyingi si mtayarishaji programu — hujaza faili moja la katalogi (.po) kwa kila lugha, ambalo hukusanywa kuwa .mo ya mfumo-jozi ambayo programu yako hupakia wakati wa utekelezaji. Jina la kawaida la kitendakazi cha kutafsiri ni _, hivyo _(t"Hello {name}") husomeka kama "tafsiri ujumbe huu". Mafunzo hupitia njia nzima — weka alama, toa, tafsiri, kusanya, endesha — kwa takribani dakika tano.

Tatizo linalotatuliwa

f-string huwa tayari imeingizwa thamani kabla maktaba yoyote haijaiona — f"Hello {name}" tayari imekuwa "Hello Ada", na kutafsiri vipande vinavyozunguka thamani huvunja sarufi ya lugha nyingi. t-string (PEP 750) hutunza maandishi tuli, thamani zilizokokotolewa, misemo chanzo, ubadilishaji, na maainisho ya umbizo kila kimoja peke yake — nayo ndiyo hasa mgawanyo ambao katalogi ya jumbe inauhitaji. Kinachobadilika, ikilinganishwa na %(name)s, .format(), na $-strings.

Hata hivyo, hakuna chochote ndani ya gettext au Babel kinachosema jinsi t-string inavyokuwa ujumbe. Maktaba hii hufanya uamuzi huo, huuandika kama ainisho lenye matoleo, na husambaza seti ya utiifu ya kuukagua.

Kanuni za muundo

  • Tafsiri jumbe kamili, kamwe si vipande vya sentensi.
  • Kubali majina rahisi tu ya vigezo kama {name}.
  • Weka !r na :.2f chini ya udhibiti wa programu, nje ya katalogi.
  • Ruhusu tafsiri kupanga upya na kurudia vishika nafasi vinavyojulikana, huku ukizizuia kufikia sifa za vitu au kuongeza uumbizaji.
  • Tumia tena mafaili ya kawaida ya POT, PO, na MO, pamoja na zana ambazo tayari huyasoma.

Na orodha inayolingana ya kile inachokiacha kwa makusudi: haitafsirii nambari, sarafu, wala tarehe kwa eneo — ziumbize kwanza, kwa Babel; haikwepeshi matokeo yaliyoonyeshwa kwa ajili ya HTML, ganda, au kituo; nayo haiwezi kuhukumu kama tafsiri ni sahihi, bali tu kama vishika nafasi vyake vipo kamili.

Usakinishaji

python -m pip install gettext-tstrings

Python 3.14 au mpya zaidi. Uonyeshaji hauna vitegemezi — hutumia gettext ya maktaba sanifu na hakuna kingine.

Utoaji na uthibitishaji wa katalogi hupitia Babel, hivyo sakinisha nyongeza hiyo popote pybabel inapoendeshwa, ambako mara nyingi ni mazingira ya usanidi au CI badala ya taswira ya uzalishaji:

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

Wapi pa kwenda

Anza hapa — hakuna uzoefu wa gettext unaohitajika:

  • Mafunzo — kutoka saraka tupu hadi tafsiri ya Kijapani inayofanya kazi kwa hatua tano, kila amri ikionyeshwa na matokeo yake.
  • Kwa nini t-strings — ujumbe uleule ulioandikwa kwa njia nne, na kile ambacho %(name)s, .format(), na $-strings kila kimoja hukikabidhi katalogi.

Itumie — marejeo ya kazi:

  • Mwongozo — API ya wakati wa utekelezaji: sehemu ipi ya kuingilia kutumia, wingi, lugha kwa kila ombi, mifuatano iliyoahirishwa, na kinachotokea katalogi inapokuwa na kasoro.
  • Utoaji — marejeo ya pybabel: usanidi, majina maalum ya vitendakazi, na jinsi zana zilizopo zinavyothibitisha katalogi hizi bure.
  • Katika uzalishaji — mzunguko kama timu inavyouendesha: mzunguko wa masasisho, maingizo ya fuzzy, vizuizi vya CI, majukwaa ya tafsiri, na usafirishaji.
  • Uhamiaji — kuanza kutumia hii katika mradi ambao tayari una katalogi, sehemu moja ya wito baada ya nyingine.
  • Kwa watafsiri — ukurasa mmoja wa kumkabidhi yeyote anayehariri mafaili ya .po.

Ielewe — kutoka historia hadi utekelezaji:

  • Usuli — kwa nini maktaba hii ipo: miaka thelathini ya gettext, PEP mbili, na mjadala wa stdlib uliofungwa bila jibu.
  • Mitego — kile ambacho kutafsiri tovuti hii katika lugha thelathini na tano kulivunja kwelikweli, na ni nusu ipi ambayo zana inaweza kuinasa.
  • Jinsi inavyofanya kazi — kutoka kwenye kitu cha kiolezo cha PEP 750 hadi mfuatano ulioonyeshwa, na akiba zinazofanya ukaguzi kuwa wa bei rahisi.

Marejeleo — mikataba:

  • API — kila kitu ambacho kifurushi hukitoa nje, kwenye ukurasa mmoja.
  • Ainisho — makubaliano ya t-string ↔ msgid kama mkataba thabiti wenye matoleo, pamoja na seti ya utiifu inayosomeka na mashine.

Hali

Toleo la kifurushi 0.1.0a8
Uthabiti wa API alpha — API ya Python bado inaweza kubadilika
Ainisho v1, pamoja na seti ya utiifu
Python 3.14 na mpya zaidi; imejaribiwa kwenye 3.14, 3.14t (nyuzi huru), na 3.15
Babel 2.18 au mpya zaidi, na pale tu ambapo pybabel huendeshwa
Vitegemezi vya wakati wa utekelezaji hakuna — gettext ya maktaba sanifu
Muundo wa katalogi POT, PO, na MO za kawaida
Mabadiliko CHANGELOG

Ni alpha. Mkataba ni mdogo kwa makusudi na ainisho ndilo sehemu yake thabiti; API ya Python bado inaweza kubadilika. Kabla ya toleo thabiti, hii inahitaji vifaa vya majaribio vya lugha nyingi zaidi, ufuatiliaji endelevu wa utendaji, mapitio ya API kutoka kwa watu wanaotumia gettext na Babel kwa dhati, na majaribio ya uoanifu katika kila toleo linalotegemezwa la Python na Babel.

Masuala na maombi ya kuunganisha yanakaribishwa — alpha ndiyo wakati hasa ambapo kiolesura bado kinastahili kujadiliwa.

Jiunge na jumuiya