Útdráttur¶
Útdráttur er skrefið sem safnar hverjum merktum skilaboðum úr frumkóðanum
þínum í .pot-sniðmát fyrir þýðendur — skref 3 í hringrás
kennsluefnisins. Þessi síða er uppflettiritið um það skref:
stillingar, eigin fallanöfn, strangur CI-hamur og athuganirnar sem gæta
þýðingaskránna þinna á eftir.
Útdráttur þarf babel-aukapakkann:
Hringrásin¶
Búðu til babel.cfg:
Notaðu svo venjulegu Babel-skipanirnar:
pybabel extract -F babel.cfg -c "Translators:" -o locales/messages.pot .
pybabel init -i locales/messages.pot -d locales -l ja
pybabel compile -d locales
init keyrir einu sinni fyrir hvert tungumál; eftir það fellir
pybabel update hvert nýtt sniðmát inn í þýðingaskrárnar sem fyrir eru. Það
endurtekna ferli — og hvað fuzzy-færslur þess þýða fyrir útgáfu — er gengið
gegnum í Í rekstri.
Útdráttartólið gettext_tstrings ræður líka við venjuleg köll á _(),
gettext() og ngettext(), svo ein vörpun dugar fyrir blandaðan kóðagrunn.
Það þekkir _(), gettext-nöfnin fjögur, samheitin tr() / ntr() og
frestuðu lazy_gettext() / lazy_pgettext().
Kveiktu á athugasemdum til þýðenda með -c
pybabel extract safnar athugasemdum til þýðenda aðeins þegar þú gefur
-c "Translators:", nákvæmlega eins og það gerir fyrir venjuleg
gettext-köll. Sleppirðu því virkar útdrátturinn eftir sem áður —
athugasemdirnar rata einfaldlega aldrei í þýðingaskrána, þar sem þær eru
ódýrasta gæðastillingin
í allri hringrásinni.
Að skrá þín eigin fallanöfn¶
Ini-skrá gefur einn streng, TOML-vörpun gefur lista, og innan strengs skilja annaðhvort bil eða kommur nöfnin að. Allar fjórar ritmyndirnar virka.
Valkostirnir eru tr_functions, ntr_functions, gettext_functions,
ngettext_functions, pgettext_functions og npgettext_functions.
-k nær ekki til t-strengs
Eigin hjálparfall á borð við mytr(t"…") verður að nefna í einum
valkostanna hér að ofan. --keyword-vélbúnaður Babel getur ekki lesið
t-strengsfasta, svo pybabel extract -k mytr finnur ekkert og segir
ekkert — skilaboðin eru einfaldlega fjarverandi úr POT-skránni. -k
virkar áfram fyrir venjulegu gettext-köllin sem eru dregin út samhliða.
Aðeins staðlaða viðfangaröðin er studd: skilaboð fyrst, samhengi og svo
skilaboð fyrir pgettext, samhengi og svo eintala og svo fleirtala
fyrir npgettext.
Eftirgefanlegt staðbundið, strangt í CI¶
Sjálfgefið bindur ein léleg skrá ekki enda á keyrsluna:
- t-strengur sem útdráttartólið hafnar — aðgangur að eigindi, segð, rangt viðfang — er tilkynntur sem viðvörun og honum sleppt.
- Skrá sem lætur ekki þátta sig fær sömu meðferð.
- Sömuleiðis skrá sem aðeins
tokenizehafnar meðanasttekur við henni, en á henni myndi eigin yfirferð Babel annars stöðvast.
Það er þægilegt meðan þú ert að breyta og hættulegt þegar svo er ekki:
skilaboð sem sleppt er eru einfaldlega fjarverandi úr POT-skránni, svo þau
eru aldrei þýdd og ekkert segir frá því. Settu strict = true í valkosti
vörpunarinnar hvar sem manneskja fylgist ekki með útdrættinum:
Hver viðvörun hér að ofan verður þá að harðri bilun. Líttu á þetta sem stillinguna fyrir rekstur og sjálfgefna gildið sem þá staðbundnu.
Tólakeðjan sem þú átt fyrir staðfestir þessar þýðingaskrár¶
Babel merkir hver útdregin skilaboð með stöðluðu flaggi, og sú eina lína er það sem virkjar athugun staðgengla í tólunum sem þú keyrir nú þegar:
Þýddu það sem こんにちは {nombre} og mistökin nást án nokkurra stillinga:
$ msgfmt --check-format -o /dev/null locales/ja/LC_MESSAGES/messages.po
locales/ja/LC_MESSAGES/messages.po:25: a format specification for argument
'name' doesn't exist in 'msgstr'
msgfmt: found 1 fatal error
Weblate skjalfestir sömu athugun sem Python brace format, og viðskiptavettvangarnir eru með sína eigin gæðaathugun á staðgenglum sem er lyklað á sama flagg. Hegðun hvers vettvangs er hans eigin mál; tólin tvö hér að neðan eru þau sem hafa verið staðfest hér.
Ofan á það skráir pakkinn athugara hjá Babel, svo að pybabel compile
beitir reglum forskriftarinnar á hver þau skilaboð sem bera
gettext-tstrings-merkiathugasemdina:
$ pybabel compile -d locales -l ja
error: locales/ja/LC_MESSAGES/messages.po:24: translation does not match the
source placeholders: {name} is missing; {nombre} is not in the source message
1 errors encountered.
Fyrir fleirtöluskilaboð nefnir vísirinn myndina, því línunúmerið sem Babel
tilkynnir er línunúmer msgid-sins og rússnesk blokk hefur þrjú msgstr þar
fyrir neðan:
error: locales/ru/LC_MESSAGES/messages.po:31: msgstr[1]: translation does not
match the source placeholders: {n} is missing
pybabel compile skrifar .mo-skrána eftir sem áður
Villan hér að ofan er tilkynnt, lokastaðan er 1 — og bilaða
þýðingaskráin er vistþýdd hvort eð er. Aðeins sú lokastaða getur stöðvað
keðju frá því að senda hana frá sér;
Hvað CI stöðvar sýnir byggingarskrefið sem
leyfir það.
Athuganirnar tvær eru ekki óþarfa endurtekning. Athugari pakkans er strangari í að minnsta kosti tveimur tilvikum:
- Msgid þar sem einu slaufusvigarnir eru escape-ritaðir
(
Config {{raw}} only) fær aldreipython-brace-format-flaggið, svo að ekkert utanaðkomandi tól staðfestir það yfirleitt. - Fleirtölumyndir eru athugaðar hver fyrir sig.
msgfmt --check-formatles einmitt skrána hér að ofan og lýkur með0; mynd sem sleppir staðgengli sem systkini hennar halda er samþykkt þar og hafnað hér.
msgfmt athugar aðeins nöfn staðgengla sem það getur þáttað sem
brace-snið Pythons, svo að ASCII-nöfn halda hverju tóli í keðjunni færu um að
staðfesta skilaboðin. Safnið sjálft tekur við hvaða nafni sem er þar sem
str.isidentifier() er satt.
Sniðmát og önnur tól¶
t-strengir eru málskipan Pythons, svo þetta safn nær yfir Python-frumkóða.
Sniðmátsmál nota áfram sína eigin i18n — {% trans %} í Jinja2, sniðmátsmerki
Django — og útdráttartól Babel fyrir þau. Allt rennur í sömu PO-þýðingaskrána,
svo ein þýðingahringrás nær áfram yfir blandaðan kóðagrunn.
pygettext getur ekki þáttað t-strengi í dag, og þess vegna fer útdráttur
gegnum Babel. Venjan er skrifuð niður í forskriftinni svo að annað
útdráttartól, eða pygettext framtíðarinnar, geti miðað við hana.