Preskoči na vsebino

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.

Pregled

sl-review.md