Aistriú anonn¶
Má úsáideann do thionscadal gettext cheana féin, is ceisteanna cúnga iad na cinn a shocraíonn an féidir glacadh leis an leabharlann seo: an gcuireann sí na catalóga atá agat ó bhail, an féidir léi maireachtáil taobh leis an gcód nach bhfuil tú réidh lena athrú, agus cé mhéad den bhogadh a chaithfidh tarlú ag an am céanna. Na freagraí, an ceann is giorra ar dtús:
| Ceist | Freagra |
|---|---|
An oibríonn na comhaid .po agus .mo atá ann cheana fós? |
Oibríonn. Na comhaid chéanna, na huirlisí céanna. |
| An féidir le seanghlaonna agus glaonna nua maireachtáil in aon chomhad amháin? | Is féidir, agus clúdaíonn mapáil eastóscóra amháin an dá cheann. |
| An athraíonn an msgid? | Ní athraíonn ó .format(). Athraíonn ó %-format. |
| An gcaithfidh an tionscadal ar fad bogadh ag an am céanna? | Ní chaithfidh. Is athrú bailí é láithreán glaonna amháin. |
| Cad faoi Jinja, teimpléid Django, JavaScript? | Gan teagmháil, na catalóga céanna. |
Is é an chuid eile den leathanach seo an mionsonra taobh thiar de gach ceann díobh sin.
Ó .format(): ní athraíonn an msgid¶
Seo an cás nach gcosnaíonn an t-aistriú beagnach faic. Díorthaíonn
teachtaireacht str.format agus teachtaireacht t-string an eochair chatalóige
chéanna, mar gurb é an téacs agus {name} fágtha ann atá san eochair sa dá
chás:
# Before
_("Hello {name}").format(name=name)
# After — the msgid is still "Hello {name}"
tr(t"Hello {name}")
Mar sin fanann an t-aistriúchán atá ann ceangailte leis. Ag tosú ó chatalóg ina bhfuil
athraigh an glao, ath-eastósc, agus nuashonraigh:
$ pybabel extract -F babel.cfg -o locales/messages.pot .
extracting messages from app.py (encoding="utf-8")
writing PO template file to locales/messages.pot
$ pybabel update -i locales/messages.pot -d locales
updating catalog locales/ja/LC_MESSAGES/messages.po based on locales/messages.pot
Níl an iontráil a thagann ar ais difriúil ach in dhá líne meiteashonraí agus faic eile — nóta tráchta marcála a aithníonn í mar theachtaireacht t-string, agus uimhir líne foinse:
Gan bhratach fuzzy, gan athaistriúchán, in aon teanga. Rindreáiltear an
teachtaireacht láithreach:
$ pybabel compile -d locales
compiling catalog locales/ja/LC_MESSAGES/messages.po to locales/ja/LC_MESSAGES/messages.mo
$ python app.py
こんにちは Ada
Tuairisceoidh update --check na catalóga mar chinn atá as dáta
Is leor an nóta tráchta marcála sin agus na huimhreacha líne a bhog le go
ndéarfadh pybabel update --check go bhfuil catalóg le hathghiniúint,
mar go gcuireann sé an iontráil iomlán i gcomparáid agus ní hé an
t-aistriúchán amháin. Rith an fíor-pybabel update sa tiomantas céanna
leis an athrú cóid, agus tiomantaigh na catalóga leis — an nós céanna a
iarrann an geata CI cheana féin.
Ó %-format: athraíonn an msgid, mar sin téann na haistriúcháin fuzzy¶
Tá comhréir printf ina cónaí taobh istigh den teachtaireacht, mar sin
athscríobhann é a ionadú eochair na catalóige. Níl aon bhealach timpeall air
sin, agus is é costas macánta %(name)s a fhágáil i do dhiaidh é:
Aithníonn pybabel update gur gaol gairid don cheann a baineadh amach an
teachtaireacht nua agus iompraíonn sé an seanaistriúchán trasna, marcáilte
fuzzy:
#. gettext-tstrings
#: app.py:4
#, fuzzy, python-brace-format, python-format
msgid "Hello {name}"
msgstr "こんにちは %(name)s"
Trí rud is fiú a bheith ar eolas faoin staid sin:
- Ní bhriseann faic ag am rite. Fágtar iontrálacha fuzzy amach as an
.mothiomsaithe, mar sin rindreáileann an feidhmchlár an teachtaireacht fhoinseach go dtí go ndeimhníonn duine an péire — an dul in olcas céanna a théann aon teachtaireacht athfhoclaithe tríd. - Fanann CI glas fad is atá siad fuzzy. Scipeálann seiceálaí na
sealbhóirí ionaid iontrálacha fuzzy, díreach mar a dhéanann
msgfmt --check-format, mar nár cheart d'iontráil nach féidir léi an t-am rite a shroicheadh teip a chur ar thógáil. An nóiméad a ghlanann aistritheoir an bhratach, seiceáiltear an iontráil mar aon cheann eile — mar sin beirtear ansin ar%(name)sa fágadh in aistriúchán deimhnithe, agus sin an pointe ag a dtosódh sé ag rindreáil murach sin. - Marcálann an seanbhratach
python-formatleis agus ba chóir í a scriosadh in éineacht leis an mbratachfuzzy, nó leanfaidhmsgfmt --check-formatde rialacha printf a chur i bhfeidhm ar theachtaireacht i bhformáid lúibíní.
I gcás sealbhóirí ionaid printf a bhfuil ainm orthu is eagarthóireacht
mheicniúil atá ann — éiríonn {name} as %(name)s agus ní bhogann faic eile
— mar sin is pas scriptithe agus athbhreithniú aistritheora ina dhiaidh atá i
gcatalóg mhór, seachas athaistriúchán. Níl %s suímh meicniúil: níl ainm
aige le hiompar trasna, agus is é ceann a roghnú pointe an athraithe.
Is féidir leis an aistriú dul ar aghaidh dá bhrí sin ar cibé luas a cheadaíonn an t-athbhreithniú: is píosa oibre atá le feiceáil sa chatalóg í iontráil fuzzy nach bhfuil tiontaithe, ní tógáil bhriste.
Maireann seanghlaonna agus glaonna nua le chéile¶
Léann an t-eastóscóir a léann t-strings gnáthghlaonna gettext freisin, mar sin clúdaíonn mapáil amháin comhad atá i lár an aistrithe:
from gettext_tstrings import tr
from myapp.i18n import _
name = "Ada"
print(_("Save changes"))
print(tr(t"Hello {name}"))
Tuirlingíonn an dá theachtaireacht sa teimpléad céanna, agus níl an nóta tráchta marcála a chuireann seiceáil bhreise na leabharlainne seo ar siúl ach ar cheann an t-string:
#: app.py:5
msgid "Save changes"
msgstr ""
#. gettext-tstrings
#: app.py:6
#, python-brace-format
msgid "Hello {name}"
msgstr ""
Aithníonn sé _(), na ceithre ainm chaighdeánacha gettext, na leasainmneacha
tr() / ntr(), agus na cinn iarchurtha lazy_gettext() /
lazy_pgettext(). Caithfear cúntóir de do chuid féin a
ainmniú sa mhapáil.
Ag am rite tá an dá stíl chomh neamhspleách céanna: filleann
gettext.translation() oibiacht aistriúchán amháin, agus léann _ agus
pointí iontrála na leabharlainne seo araon uaithi.
Cad nach mbogann¶
- Teangacha teimpléid. Leanann
{% trans %}Jinja2, clibeanna teimpléid Django, agus a n-eastóscóirí Babel ag obair gan athrú agus ag beathú na gcatalóg PO céanna. Is comhréir Python iad na t-strings; baineann siad le foinse Python. - Do chomhaid chatalóige. Gan athrú formáide, gan chomhad nua, gan chéim tiontaithe.
- D'ardán aistriúcháin. Tá an malartú
.pomar an gcéanna, agus is í an bhratachpython-brace-formata iompraíonn teachtaireacht t-string an bhratach chéanna a iompraíonn teachtaireacht.format()— mar sin leanann dearbhú cáilíochta na sealbhóirí ionaid ag obair. - Cód nach Python é. Ní chuirtear isteach ar chatalóg JavaScript ná C sa tionscadal céanna.
Seicliosta aistrithe¶
- Cuir an breiseán
babelleis san áit a ritheannpybabel, agus athraigh an mhapáilpythoninbabel.cfggo dtí an modhgettext_tstrings— clúdaíonn mapáil amháin an dá stíl ansin, agus leanann-kag obair do na gnáthghlaonna. - Tiontaigh láithreáin ghlaonna
.format()ar dtús. Ath-eastósc, rithpybabel update, agus tiomantaigh na catalóga leis an gcód; ná bíodh coinne agat le hiontrálacha fuzzy. - Tiontaigh láithreáin ghlaonna
%-format i mbaisceanna is féidir leat a chur faoi athbhreithniú, agus athscríobh na sealbhóirí ionaid a iompraíodh trasna agus glan na bratachafuzzyaguspython-format. - Ceartaigh an rud a ndiúltaíonn an srian dó: caithfidh idirshuíomh a bheith
ina ainm lom, mar sin éiríonn athróg áitiúil as
t"Hello {user.name}"ar dtús. Is eagarthóireacht láithreáin ghlaonna é seo, ní ceann catalóige. - Cuir
strict = truear siúl i mapáil an eastóscóra a luaithe is atá an scuabadh déanta, ionas go gcuirfeadh teachtaireacht nach féidir a eastóscadh teip ar an tógáil seachas imeacht as an teimpléad. - Cuir an tseiceáil ama rite ó I dtáirgeadh
leis: rindreáil teachtaireacht amháin in aghaidh gach teanga a sheoltar trí
Translatordian.
Is gnáth-thiomantais iad céimeanna 2 agus 3. Níl lá brataí ag teastáil ó aon rud ar an liosta seo.