Preglasitve prevodov PMIS
V enem repozitoriju vzdržujte prevode več jezikov za Odoo 18 / OCB. Začetno sta
nastavljeni slovenščina (sl) in italijanščina (it). Urejajte popolne kataloge
PO; orodje uskladi izvorne posodobitve, ustvari redke preglasitve in jih razdeli
v mape i18n_extra izvirnih modulov. Ovoji dodatkov in spremembe izvorne kode
Python/XML niso potrebni.
Struktura
i18n-extra.json Izvorni repozitorij, poti dodatkov, jeziki, izbor modulov
translations/
upstream/<module>/ Skupni template.pot in posnetki PO po jezikih
working/<module>/<lang>.po Popolni uredljivi katalogi (sl.po, it.po, ...)
state.json Izvorna revizija in prstni odtisi vsebine
report.json Spori in opuščene preglasitve
generated/<module>/<lang>.po Ustvarjene redke preglasitve (potrjene v Git)
generated/manifest.json Zgoščene vrednosti in lastništvo datotek
generated/build.json Prenosljivi prstni odtisi vhodov izgradnje
tools/i18n_extra.py Odkrivanje, sinhronizacija, izgradnja, uvedba
tools/i18n-extra Zaganjalnik ukazov lupine
tools/completion/ Dopolnjevanje Bash
tests/ Preizkusi z izmišljenimi katalogi in repozitoriji Git
LICENSE vsebuje obstoječo licenco repozitorija. Izvorni posnetki katalogov izhajajo
iz izbranega OCB; ohranite njegove veljavne licenčne pogoje.
Zahteve in nastavitve
Uporabite Python 3.12 ali novejši, polib iz requirements.txt, Git in za izgradnjo
GNU gettext msgfmt. Uvedba potrebuje Python, polib in Git, ne izvaja pa gettext.
Obstoječi interpreter PMIS Odoo že zagotavlja polib; uvoz Odoo, strežnik,
povezava s podatkovno zbirko ali dodaten paket Python niso potrebni.
Spodnji ukazi se izvajajo iz repozitorija z lokalnim interpreterjem zbirke:
I18N_PYTHON=/srv/pmiverse/_pmisuite18/venv/bin/python
"$I18N_PYTHON" tools/i18n_extra.py discover
Potrjene nastavitve začetno izberejo base, web in sale. Za vse dodatke na
nastavljenih poteh spremenite modules v ["*"] ali podajte seznam tehničnih
imen. Izbor modulov je nastavitev, ne ločen korak namestitve vsakega modula.
Ta različica ne poizveduje po nameščenih modulih v zbirki.
source je relativen temu repozitoriju; addon_paths so relativne izbranemu
repozitoriju Git. Vključeni sta odoo/addons in addons. Podvojena imena modulov
se zavrnejo brez tihega izbora.
Jezike nastavite s seznamom v i18n-extra.json:
{
"languages": ["sl", "it"]
}
Vsi ukazi obdelajo vse nastavljene jezike vseh izbranih modulov. Za nov jezik dodajte
kodo PO in zaženite sync; obstoječi popravki ostanejo. Če izvorni PO manjka, nov
katalog začne z neprevedenimi vnosi predloge. Kode morajo biti različne; vrstni
red seznama ne vpliva na rezultat. sync nadgradi staro enojezično stanje brez
premikanja obstoječih PO.
Odstranitev jezika ohrani delovne kataloge in posnetke. Po sync ukaz build
opusti ustvarjene datoteke, deploy pa predogleda odstranitev lastnih uvedenih
datotek. Ponovna vključitev nadaljuje z ohranjeno osnovo. Opustitev v zbirki še
zahteva spodnjo uskladitev.
Privzeta sl in it se ujemata z izvornima katalogoma. Za natančnejšo jezikovno
različico z lastnim izvornim PO nastavite npr. sl_SI: orodje združi osnovne in
lokalne prevode ter preglasitev zapiše pod natančno kodo. Španske različice po
potrebi uporabljajo tudi nadomestno es_419. Sicer lahko Odoo naloži natančnejši
katalog po preglasitvi osnovnega jezika.
Bližnjica Bash in dopolnjevanje
Zaganjalnik i18n-extra in dopolnjevanje sledita vzorcu _pmiconfig. Za trenutno
lupino iz repozitorija omogočite:
export I18N_PYTHON=/srv/pmiverse/_pmisuite18/venv/bin/python
export PATH="$PWD/tools:$PATH"
source /usr/share/bash-completion/bash_completion
source tools/completion/i18n-extra.bash
Potreben je paket bash-completion. Če je že naložen, zadošča vključitev datoteke
repozitorija. Za prihodnje terminale dodajte ukaze v profil Bash z absolutnimi
potmi namesto $PWD in relativnih poti. Orodja ne spreminjajo profila ali sistemskih datotek.
i18n-extra sy<TAB> → sync
i18n-extra deploy --a<TAB> → --apply
i18n-extra --root <TAB> → directories
Dopolnjevanje ponuja štiri podukaze, zastavice in poti map za --root, tudi
--root=.... Korenske možnosti so pred podukazom. Dopolnjevanje ne zaganja Python,
ne pregleduje katalogov in ne uvaja datotek.
Zaganjalnik uporablja izvoženi I18N_PYTHON ali python3 iz PATH; še zahteva
Python 3.12+ in polib. Deluje iz vsake mape, tudi prek simbolne povezave v PATH.
Dopolnjevanje podpira bližnjico in neposredni tools/i18n-extra; izrecni ukazi
Python ostanejo na voljo.
Zaganjalnik in vsi podukazi sprejmejo --help ali -h:
i18n-extra --help
i18n-extra discover --help
i18n-extra sync --help
i18n-extra build --help
i18n-extra deploy --help
Pomoč vsebuje opise, možnosti in primere. Ne nalaga nastavitev projekta in ne izvaja sinhronizacije, ustvarjanja ali uvedbe.
Začetna priprava in urejanje
"$I18N_PYTHON" tools/i18n_extra.py sync
To ustvari popolne kataloge v translations/working z obstoječimi prevodi in
neprevedenimi vnosi. Urejajte jih z urejevalnikom PO, npr.
translations/working/sale/sl.po ali translations/working/sale/it.po.
Ohranite izvorno besedilo, komentarje izluščevanja Odoo in reference; uvedbene
reference orodje pridobi iz izvornih posnetkov.
sync bere samo potrjene nespremenjene izvorne kataloge. Ne pridobiva Git,
ne izluščuje prevodov in ne zapisuje v OCB. Manjkajoče predloge povzročijo napako
s potjo pred pisanjem katalogov; zagotovite aktualno predlogo ali izrecno zožite
izbor. Potrjeni POT je merodajen vir; orodje ne more dokazati, da odraža vse
spremembe kode. Obnova zastarelih predlog zahteva ločeno pooblaščeno izluščevanje Odoo.
Posnetki se normalizirajo brez identitet prevajalcev in nepovezanih sprememb glav. Zgoščene vrednosti bajtov še beležijo točne vhode. Po pregledu skupaj potrdite osnovo, delovne kataloge, stanje in poročilo; orodja ne pripravljajo potrditev, ne potrjujejo ali pošiljajo v Git.
Po posodobitvi izvora
Po običajni posodobitvi OCB izvedite:
"$I18N_PYTHON" tools/i18n_extra.py sync
"$I18N_PYTHON" tools/i18n_extra.py build
"$I18N_PYTHON" tools/i18n_extra.py deploy
Sinhronizacija primerja prejšnji izvorni posnetek, delovni katalog in novi vir:
| Sprememba | Rezultat |
|---|---|
| Brez lokalnega popravka | Prevzem izvornega prevoda |
| Lokalni popravek, nespremenjen vir | Ohranitev popravka in osvežitev referenc |
| Vir se zdaj ujema s popravkom | Prenehanje ustvarjanja preglasitve |
| Različni spremembi obeh prevodov | Ohranitev popravka, oznaka fuzzy, poročilo obeh vrednosti |
| Izvorno sporočilo izgine ali se spremeni | Stari popravek se ohrani kot opuščen; uporabi se novi izvorni vnos |
| Opuščeni vir se vrne | Obnovitev popravka kot fuzzy za izrecni pregled |
| Modul ni več izbran | Ohranitev delovnih datotek in opustitev uvedenih preglasitev |
| Jezik ni več izbran | Ohranitev delovnih datotek in opustitev preglasitev samo tega jezika |
Samodejnega približnega ujemanja ali strojnega prevajanja ni. Spore razrešite v
delovnem PO in po pregledu počistite fuzzy. Do razrešitve ostanejo označeni tudi
po ponovitvah. Opuščeni popravki ostanejo za referenco in niso v izpisu. Novi
neprevedeni vnosi ne blokirajo izgradnje. Poročilo združuje po modulu in jeziku.
Nerešen spor pred pisanjem blokira celotno izgradnjo/uvedbo; drugi jeziki ostanejo nedotaknjeni.
build zavrne nerešene fuzzy vnose, spremenjene izvorne ključe, prazne preglasitve,
manjkajoče reference Odoo, nepravilne odstotkovne nadomestne oznake in napake
gettext. Preglasitve množine/konteksta gettext so izrecno zavrnjene zaradi
nalagalnika Odoo 18. Preverijo se samo preglasitve, ne jezikovna ali oblikovna
pravilnost nespremenjenih izvornih prevodov. HTML/XML in dejanski izris še zahtevata
sprejemni pregled v aplikaciji.
Izpis vsebuje samo prevedene vnose, različne od izvora. Nespremenjenih izpisov
ne prepisuje. Spremenjeni jeziki ali izvorni katalogi zahtevajo sync pred
izgradnjo/uvedbo; nepovezane izvorne potrditve ne.
Po uspešni izgradnji skupaj z delovnimi katalogi, posnetki, stanjem in poročilom
potrdite translations/generated/, tudi manifest.json in build.json brez
preglasitev. Beležita zgoščene vrednosti in prenosljive vhode; ustvarjenih datotek
ne urejajte ročno.
Po posodobitvi tega repozitorija in ustreznega OCB na oddaljeni namestitvi zadošča:
i18n-extra deploy --apply
Oddaljena sync ali build nista potrebna. Nastavljena izvorna pot mora kazati
na ciljni repozitorij z izbranimi katalogi, enakimi sinhronizirani osnovi. Ob
razliki najprej sinhronizirajte, zgradite in objavite na avtorski namestitvi.
Aktivacija v zbirki ostane ločena.
Lastništvo uvedbe
deploy je predogled samo za branje. Za zapis pregledane uvedbe:
"$I18N_PYTHON" tools/i18n_extra.py deploy --apply
Uvedba preveri prstne odtise vhodov, manifest in zgoščene vrednosti ter kopira točne
zgrajene bajte brez obnove ali gettext. Manjkajoči/spremenjeni izdelki in zastareli
delovni katalogi jo blokirajo; najprej zaženite build in objavite izpise. Zapisuje
samo nastavljeni izvorni repozitorij; drugje uporabljajte orodja ob ustreznem
repozitoriju s pravilnimi nastavitvami.
Orodje zavrne sledene izvorne cilje, obstoječe nelastne datoteke, simbolne povezave
in spremembe datotek prejšnje uvedbe. Ne združuje ali prevzema obstoječih
i18n_extra. Lokalno potrdilo v .cache/ hrani zgoščene vrednosti lastnih datotek;
ohranite ga, saj brez njega datoteke veljajo za nelastne. Opuščene odstrani samo
ob enakih bajtih kot v potrdilu. Neizbrani delovni katalogi se ohranijo.
Ob preglasitvah deploy --apply enkrat doda **/i18n_extra/ v lokalni Git
info/exclude izvora. Obstoječa pravila in komentarji ostanejo; .gitignore in
splošne nastavitve Git se ne spreminjajo. Lokacijo metapodatkov razreši Git,
zato povezane delovne kopije delijo izključitveno datoteko. JSON git_exclude
predogleda append ali unchanged s potjo in pravilom, brez zapisovanja.
Brez preglasitev je null. Pravilo ostane po opustitvi in zajema vse nesledene
mape i18n_extra repozitorija, ne samo lastnih. Prednostna pravila .gitignore
ga lahko preglasijo. Ignoriranje ne zaščiti pred prihodnjim izvornim lastništvom;
preverjanja sledenih in nelastnih ciljev ostanejo. Simbolne povezave izključitev
in zaznane sočasne spremembe so zavrnjene. Napaka pisanja izključitve prepreči
uvedbo PO; če pozneje odpove PO, pravilo lahko že obstaja in varno ostane.
Izvajajte en proces sinhronizacije/uvedbe na projekt in med sinhronizacijo ne urejajte PO sočasno. Zapisi so atomarni posamično, ne čez celoten repozitorij.
Vzdrževalec: uporaba prevodnih posodobitev iz ukazne vrstice
Spletna prijava Odoo ni potrebna. Uporabite obstoječi vzdrževalni račun strežnika, interpreter, nastavitve in seznam zbirk. Začnite z običajno varnostno kopijo in vzdrževalnim oknom. PO dodatkov in preglasitve repozitorija so merodajni, zato postopek lahko nadomesti prevode, urejene v zbirki.
1. Posodobitev repozitorijev in uvedba prevodov
Na avtorski namestitvi sinhronizirajte, preglejte in zgradite:
"$I18N_PYTHON" tools/i18n_extra.py sync
"$I18N_PYTHON" tools/i18n_extra.py build
Skupaj potrdite in objavite kataloge in celotni translations/generated/.
Po običajnih posodobitvah ciljne namestitve iz tega repozitorija pred nadgradnjo
zbirk izvedite:
"$I18N_PYTHON" tools/i18n_extra.py deploy --apply
Spore razrešite pred izgradnjo. Ob opuščanju popravkov ohranite prej uvedene PO v varnostni kopiji izdaje.
2. Vključitev prevodov v običajno nadgradnjo zbirke
Obstoječemu -u all dodajte --i18n-overwrite. Nastavite ciljne vrednosti in
ponovite za vsako vzdrževano zbirko:
I18N_ODOO_BIN=/srv/pmiverse/_pmisuite18/repos/OCB/odoo-bin
I18N_CONFIG=/path/to/odoo.conf
I18N_DATABASE=example_database
"$I18N_PYTHON" "$I18N_ODOO_BIN" \
-c "$I18N_CONFIG" -d "$I18N_DATABASE" \
-u all --i18n-overwrite --stop-after-init --no-http
Odoo nadgradi nameščene module ter naloži običajne in i18n_extra prevode nameščenih
jezikov. Sam -u all privzeto ne prepisuje prevodov. Ločen uvoz PO po modulih ni potreben.
Za aktivacijo slovenščine in italijanščine dodajte --load-language=sl_SI,it_IT.
To sta kodi v zbirki; ustrezni PO sta sl.po in it.po. Dodatnih jezikov ne
aktivirajte v zbirkah, ki jih ne potrebujejo.
3. Ponovni zagon strežnih procesov
Preverite izhodni status in dnevnik vsake nadgradnje ter ponovno zaženite storitev Odoo po običajnem postopku. Nadgradnja posodobi izraze v zbirki, ponovni zagon pa predpomnilnike prevodov Python/JavaScript. Uporabniki bodo morda morali osvežiti brskalnik.
Uskladitev: samo če stari popravek ni obnovljen
Nadgradnja obnovi odstranjene preglasitve, kadar vir zagotavlja neprazen prevod
in ciljni zapis dovoli prepis. Prazni izvorni prevodi stare vrednosti ne počistijo,
običajni prepis pa ohrani zapise noupdate.
Za izjeme naj vzdrževalec pripravi pregledani, ciljni obnovitveni PO za zbirko
in jezik. Vsebuje naj samo prizadete trenutne reference z msgstr nastavljenim
na želeno izvorno besedilo ali msgid za prikaz izvornega niza. Prazni msgstr
ne naredijo ničesar. Tako lahko uporabite tudi pregledani popravek zaščitenega zapisa.
Vsebino zbirke lahko pridobite brez spletne prijave, npr. izvoz trenutnih slovenskih
prevodov sale za pripravo/preverjanje obnovitve:
"$I18N_PYTHON" "$I18N_ODOO_BIN" \
-c "$I18N_CONFIG" -d "$I18N_DATABASE" \
--i18n-export=/path/to/sale-current-sl.po --modules=sale --language=sl_SI
Pred zamenjavo primerjajte vnose s prej uvedenimi popravki. Neodvisno spremenjene vrednosti in preimenovane reference zahtevajo odločitev vzdrževalca. Izvoze zbirk hranite zunaj Git.
Po nadgradnji uporabite pregledano datoteko za pravo zbirko iz lupine:
export I18N_RESTORE_PO=/path/to/reviewed-restoration-sl.po
export I18N_RESTORE_LANG=sl_SI
"$I18N_PYTHON" "$I18N_ODOO_BIN" shell \
-c "$I18N_CONFIG" -d "$I18N_DATABASE" --no-http <<'PY'
import os
from odoo.tools.translate import TranslationImporter
language = os.environ["I18N_RESTORE_LANG"]
if not env["res.lang"].search_count([("code", "=", language), ("active", "=", True)]):
raise ValueError(f"Language must be active: {language}")
importer = TranslationImporter(env.cr)
with open(os.environ["I18N_RESTORE_PO"], "rb") as translation_file:
importer.load(translation_file, "po", language)
importer.save(overwrite=True, force_overwrite=True)
env.cr.commit()
PY
Za italijanščino uporabite it_IT. To za podane vnose namenoma obide noupdate,
zato uporabite samo pregledano redko datoteko, nikoli celotnega izvoza ali izvornega
kataloga. Prisilni uvoz ne popravi manjkajočih referenc. Znova izvozite prizadete
izraze za preverjanje in nato ponovno zaženite procese iz 3. koraka. Obnovitvene
datoteke hranite zunaj delovnih in uvedenih katalogov.
Trenutna omejitev: ukazna nadgradnja aktivira prevode, repozitorij pa še ne ustvarja načrtov opustitve/obnovitve. Izjemna uskladitev še potrebuje opisano ciljno datoteko. Navodila sledijo lokalni izvedbi Odoo 18.