Kūrimas
Kūrimo vadovas
Atnaujinkite dokumentaciją tik po website/docs (anglų). Vertimai po website/i18n/<locale>/… yra generuojami ir neturėtų būti redaguojami rankiniu būdu. Naudokite vertimo užduotis (pvz., make translate_web_docs_batch), kad atnaujintumėte lokalizuotą turinį.
Reikalavimai
- Node.js 22+ ir npm (išbandyta su Node 22)
- Thunderbird 128 ESR arba naujesnis (rankiniam testavimui)
Projekto struktūra (aukšto lygio)
- Šaknis: paketavimo scenarijus
distribution_zip_packer.sh, dokumentai, ekrano nuotraukos sources/: pagrindinis priedo kodas (fonas, parinkčių/iškylančios UI, manifestai, piktogramos)tests/: Vitest testų rinkinyswebsite/: Docusaurus dokumentacija (su i18n powebsite/i18n/de/...)
Diegimas ir įrankiai
- Įdiegti šakninius priklausomumus:
npm ci - Dokumentacija (neprivaloma):
cd website && npm ci - Peržiūrėti tikslus:
make help
Tiesioginė kūrimo eiga (web‑ext run)
- Greitas ciklas Firefox Desktop (tik UI „smoke“ testai):
npx web-ext run --source-dir sources --target=firefox-desktop- Paleisti „Thunderbird“ (rekomenduojama MailExtensions):
npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"- Patarimai:
- Laikykite „Thunderbird“ klaidų konsolę atidarytą (Tools → Developer Tools → Error Console).
- MV3 įvykių puslapiai sustabdomi esant neveiklai; po kodo pakeitimų perkraukite priedą arba leiskite web‑ext automatiškai perkrauti.
- Kai kurie tik Firefox būdingi elgesiai skiriasi; visada patikrinkite „Thunderbird“, kad įsitikintumėte API atitikimu.
- „Thunderbird“ vykdomojo failo keliai (pavyzdžiai):
- Linux:
thunderbird(pvz.,/usr/bin/thunderbird) - macOS:
/Applications/Thunderbird.app/Contents/MacOS/thunderbird - Windows:
"C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe" - Profilio izoliacija: naudokite atskirą „Thunderbird“ profilį kūrimui, kad nepaveiktumėte kasdienės aplinkos.
Make tikslai (abėcėliškai)
Makefile standartizuoja dažnas kūrimo eigas. Bet kada paleiskite make help, kad gautumėte vienos eilutės santrauką apie kiekvieną tikslą.
Patarimas: paleidus make be tikslo, atsidarys paprastas Whiptail meniu tikslui pasirinkti.
| Tikslas | Vienos eilutės aprašymas |
|---|---|
clean | Pašalinti lokalius kūrimo/peržiūros artefaktus (tmp/, web-local-preview/, website/build/). |
commit | Suformatuoti, paleisti testus (įsk. i18n), atnaujinti changelogą, commit’inti ir push’inti. |
eslint | Paleisti ESLint per „flat config“ (npm run -s lint:eslint). |
help | Išvardyti visus tikslus su vienos eilutės aprašais (rikiuojama). |
lint | web‑ext lint ant sources/ (laikinas manifestas; ignoruoja ZIP; neblokuoja). |
menu | Interaktyvus meniu tikslui ir pasirenkamiems argumentams pasirinkti. |
pack | Sukurti ATN ir LOCAL ZIP’us (paleidžia linterį; kviečia pakavimo scenarijų). |
prettier | Suformatuoti repozitoriją vietoje (rašant pakeitimus). |
prettier_check | Prettier tikrinimo režimu (be rašymo); nesėkmė, jei reikia performatuoti. |
prettier_write | Sinonimas prettier. |
test | Prettier (rašymas), ESLint, tada Vitest (aprėptis jei sukonfigūruota). |
test_i18n | Tik i18n testai: priedo vietos žymės/atitiktys + svetainės atitiktis. |
translate_app | Sinonimas translation_app. |
translation_app | Išversti programos UI eilutes iš sources/_locales/en/messages.json. |
translate_web_docs_batch | Išversti svetainės dokumentus per OpenAI Batch API (pageidautina). |
translate_web_docs_sync | Išversti svetainės dokumentus sinchroniškai (senasis, ne batch). |
translate_web_index | Sinonimas translation_web_index. |
translation_web_index | Išversti pagrindinio/meniu/poraštės UI (website/i18n/en/code.json → .../<lang>/code.json). |
web_build | Sukurti dokumentus į website/build (palaiko --locales / BUILD_LOCALES). |
web_build_linkcheck | Saugi neprisijungus nuorodų patikra (praleidžia nuotolinius HTTP[S]). |
web_build_local_preview | Vietinė gh‑pages peržiūra; automatinis serveris per 8080–8090; pasirenkami testai/nuorodų patikra. |
web_push_github | Išsiųsti website/build į šaką gh-pages. |
Parinkčių sintaksė
- Naudokite
make <command> OPTS="…"parinktims perduoti (rekomenduojamos kabutės). Kiekvieno tikslo skyriuje žemiau yra pavyzdžiai.
--
Lokalės kūrimo patarimai
- Kurti tik dalį lokalių: nustatykite
BUILD_LOCALES="en de"arba perduokiteOPTS="--locales en,de"žiniatinklio tikslams. - Peržiūrėti konkrečią lokalę:
http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.
Kūrimas ir paketavimas
- Kurti ZIP’us:
make pack - Sukuria ATN ir LOCAL ZIP’us repozitorijos šaknyje (needituokite artefaktų rankiniu būdu)
- Patarimas: prieš pakuojant atnaujinkite versiją tiek
sources/manifest_ATN.json, tieksources/manifest_LOCAL.json - Rankinis diegimas (dev): Thunderbird → Tools → Add‑ons and Themes → krumpliaratis → Install Add‑on From File… → pasirinkite sukurtą ZIP
Testavimas
- Pilnas rinkinys:
make test(Vitest) - Aprėptis (neprivaloma):
npm i -D @vitest/coverage-v8- Paleiskite
make test; atidarykitecoverage/index.htmlHTML ataskaitai - Tik i18n:
make test_i18n(UI raktai/vietos žymės/pavadinimai + svetainės per‑lokalę per‑dokumentą atitiktis su id/title/sidebar_label tikrinimais)
Derinimas ir žurnalai
- Klaidų konsolė: Tools → Developer Tools → Error Console
- Perjungti išsamius žurnalus vykdymo metu:
- Įjungti:
messenger.storage.local.set({ debug: true }) - Išjungti:
messenger.storage.local.set({ debug: false }) - Žurnalai rodomi rašant/siunčiant atsakymus
Dokumentacija (svetainė)
- Kūrimo serveris:
cd website && npm run start - Statinės svetainės kūrimas:
cd website && npm run build - Make atitikmenys (abėcėliškai):
make web_build,make web_build_linkcheck,make web_build_local_preview,make web_push_github - Naudojimo pavyzdžiai:
- Tik EN, praleisti testus/nuorodų patikrą, be „push“:
make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run" - Visos lokalės, su testais/nuorodų patikra, tada „push“:
make web_build_local_preview && make web_push_github - Prieš publikuojant, paleiskite saugią neprisijungus nuorodų patikrą:
make web_build_linkcheck. - i18n: anglų kalba yra
website/docs/*.md; vokiečių vertimaiwebsite/i18n/de/docusaurus-plugin-content-docs/current/*.md - Paieška: jei Algolia DocSearch aplinkos kintamieji yra nustatyti CI aplinkoje (
DOCSEARCH_APP_ID,DOCSEARCH_API_KEY,DOCSEARCH_INDEX_NAME), svetainė naudoja Algolia paiešką; kitu atveju grįžtama prie vietinės paieškos. Pagrindiniame puslapyje spauskite/arbaCtrl+K, kad atidarytumėte paieškos laukelį.
Paaukojimo peradresavimo maršrutas
website/src/pages/donate.js- Maršrutas:
/donate(ir/<locale>/donate) - Elgsena:
- Jei dabartiniame maršrute yra lokalė (pvz.,
/de/donate), ją naudokite - Kitu atveju parinkite geriausią atitikmenį iš
navigator.languagesprieš sukonfigūruotas lokales; jei netinka, naudokite numatytąją lokalę - Peradresuojama į:
en→/docs/donation- kiti →
/<locale>/docs/donation - Naudoja
useBaseUrlteisingam baseUrl apdorojimui - Įtraukia „meta refresh“ +
noscriptnuorodą kaip atsarginį variantą
Peržiūros patarimai
- Švariai sustabdyti Node peržiūrą: atidarykite
http://localhost:<port>/__stop(išspausdinama poLocal server started). - Jei MDX/JSX nerodo vaizdų, naudokite
useBaseUrl('/img/...'), kad būtų gerbiamas svetainėsbaseUrl. - Pirma paleidžiama peržiūra; nuorodų patikra vykdoma po to ir jos nesustabdo (sugedusios išorinės nuorodos neblokuos peržiūros).
- Pavyzdinis peržiūros URL:
http://localhost:<port>/Thunderbird-Reply-with-Attachments/(išspausdinama po „Local server started“). - Išorinės nuorodos nuorodų patikroje: kai kurios išorinės svetainės (pvz., addons.thunderbird.net) blokuoja automatizuotus robotus ir patikroje gali rodyti 403. Peržiūra vis tiek paleidžiama; tai galima saugiai ignoruoti.
Išversti svetainę
Ką galite versti
- Tik svetainės UI: pagrindinis puslapis, naršymo juosta, poraštė ir kitos UI eilutės. Dokumentų turinys kol kas lieka tik anglų kalba.
Kur redaguoti
- Redaguokite
website/i18n/<locale>/code.json(naudokiteenkaip atskaitą). Palikite vietos žymes, tokias kaip{year},{slash},{ctrl},{k},{code1}, nepakeistas.
Sugeneruoti arba atnaujinti failus
- Sukurti trūkstamus ruošinius visoms lokalėms:
npm --prefix website run i18n:stubs - Perrašyti ruošinius iš anglų (po naujų eilučių pridėjimo):
npm --prefix website run i18n:stubs:force - Alternatyva vienai lokaliai:
npx --prefix website docusaurus write-translations --locale <locale>
Išversti pagrindinio/meniu/poraštės UI eilutes (OpenAI)
- Nustatykite kredencialus kartą (shell arba .env):
export OPENAI_API_KEY=sk-...- Pasirenkama:
export OPENAI_MODEL=gpt-4o-mini - Vienkartinis (visos lokalės, išskyrus en):
make translate_web_index - Apriboti konkrečiomis lokalėmis:
make translate_web_index OPTS="--locales de,fr" - Perrašyti esamas reikšmes:
make translate_web_index OPTS="--force"
Tikrinimas ir pakartojimai
- Vertimo scenarijus tikrina JSON struktūrą, išsaugo garbanotų skliaustų vietos žymes ir užtikrina, kad URL nebūtų pakeisti.
- Nesėkmės atveju bando dar kartą su grįžtamuoju ryšiu iki 2 kartų prieš palikdamas esamas reikšmes.
Peržiūrėkite savo lokalę
- Kūrimo serveris:
npm --prefix website run start - Apsilankykite
http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/
Pateikimas
- Atidarykite PR su redaguotu
code.jsonfailu(-ais). Išlaikykite fokusuotus pakeitimus ir, jei įmanoma, pridėkite greitą ekrano nuotrauką.
Saugumo ir konfigūracijos patarimai
- Necommitt’inkite
sources/manifest.json(sukuriama laikinai kūrimo metu) - Išlaikykite
browser_specific_settings.gecko.idstabilų, kad būtų išsaugotas atnaujinimų kanalas
Nustatymų išsaugojimas
- Saugykla: Visi naudotojo nustatymai saugomi
storage.localir išlieka per priedo atnaujinimus. - Diegimas: Numatytosios reikšmės taikomos tik tada, kai raktas griežtai trūksta (undefined).
- Atnaujinimas: Migracija užpildo tik trūkstamus raktus; esamos reikšmės niekada neperrašomos.
- Schemos žyma:
settingsVersion(šiuo metu1). - Raktai ir numatytosios reikšmės:
blacklistPatterns: string[]→['*intern*', '*secret*', '*passwor*']confirmBeforeAdd: boolean→falseconfirmDefaultChoice: 'yes'|'no'→'yes'warnOnBlacklistExcluded: boolean→true- Kodas: žr.
sources/background.js→initializeOrMigrateSettings()irSCHEMA_VERSION.
Kūrėjo eiga (pridedant naują nustatymą)
- Padidinkite
SCHEMA_VERSIONfailesources/background.js. - Pridėkite naują raktą + numatytąją reikšmę į
DEFAULTSobjektą faileinitializeOrMigrateSettings(). - Naudokite „tik jei undefined“ taisyklę numatytosioms reikšmėms; neperrašykite esamų reikšmių.
- Jei nustatymas matomas naudotojui, sujunkite jį su
sources/options.jsir pridėkite lokalizuotas eilutes. - Pridėkite/pakoreguokite testus (žr.
tests/background.settings.migration.test.js).
Rankinio testavimo patarimai
- Imituokite švarų diegimą: išvalykite plėtinio duomenų katalogą arba pradėkite su nauju profiliu.
- Imituokite atnaujinimą: nustatykite
settingsVersionį0failestorage.localir perkraukite; patvirtinkite, kad esamos reikšmės liko nepakeistos ir pridėti tik trūkstami raktai.
Trikčių šalinimas
- Įsitikinkite, kad Thunderbird yra 128 ESR arba naujesnis
- Naudokite Klaidų konsolę vykdymo problemoms
- Jei atrodo, kad išsaugoti nustatymai netaikomi tinkamai, perkraukite „Thunderbird“ ir pabandykite dar kartą. („Thunderbird“ gali kešuoti būseną tarp sesijų; perkrovimas užtikrina, kad būtų įkelti švieži nustatymai.)
CI ir aprėptis
- GitHub Actions (
CI — Tests) paleidžia vitest su aprėpties slenksčiais (85% eilutės/funkcijos/šakos/teiginiai). Jei slenksčiai nepasiekiami, darbas žlunga. - Darbo eiga įkelia artefaktą
coverage-htmlsu HTML ataskaita; atsisiųskite jį iš paleidimo puslapio (Actions → paskutinis paleidimas → Artifacts).
Prisidėjimas
- Žr. CONTRIBUTING.md dėl šakų/commit/PR gairių
- Patarimas: Testavimui susikurkite atskirą „Thunderbird“ kūrimo profilį, kad nepaveiktumėte kasdienio profilio.
Vertimai
- Dideli „viskas → viskas“ vertimo darbai gali būti lėti ir brangūs. Pradėkite nuo poaibio (pvz., keli dokumentai ir 1–2 lokalės), peržiūrėkite rezultatą, tada plėskite.
- Iš naujo bandymo politika: vertimo darbai atlieka iki 3 bandymų su eksponentiniu laukimu, jei kyla API klaidų; žr.
scripts/translate_web_docs_batch.jsirscripts/translate_web_docs_sync.js.
Ekrano nuotraukos dokumentacijai
-
Laikykite vaizdus po
website/static/img/. -
Nurodykite juos MD/MDX per
useBaseUrl('/img/<filename>'), kad keliai veiktų su svetainėsbaseUrl. -
Įdėję ar pervadinę vaizdus po
website/static/img/, patvirtinkite, kad visos nuorodos vis dar naudojauseBaseUrl('/img/…')ir teisingai atvaizduojamos vietinėje peržiūroje. Faviconai -
Daugiaformatė
favicon.icosukuriama automatiškai visuose kūrimo keliuose (Make + scenarijai) perwebsite/scripts/build-favicon.mjs. -
Jokio rankinio žingsnio nereikia; pakanka atnaujinti
icon-*.png. Peržiūros patarimas -
Išlaikykite front‑matter
idnepakeistą išverstose bylose; versti tiktitleirsidebar_label, jei yra.
clean
- Paskirtis: pašalinti lokalius kūrimo/peržiūros artefaktus.
- Naudojimas:
make clean - Pašalinama (jei yra):
tmp/web-local-preview/website/build/
commit
- Paskirtis: suformatuoti, testuoti, atnaujinti changelogą, commit’inti ir push’inti.
- Naudojimas:
make commit - Išsamiau: paleidžia Prettier (rašymas),
make test,make test_i18n; prideda į changelogą, kai yra „staged“ skirtumų; „push’ina“ įorigin/<branch>.
eslint
- Paskirtis: paleisti ESLint per „flat config“.
- Naudojimas:
make eslint
help
- Paskirtis: išvardyti visus tikslus su vienos eilutės aprašais.
- Naudojimas:
make help
lint
- Paskirtis: lint’inti MailExtension naudojant
web-ext. - Naudojimas:
make lint - Pastabos: laikinai kopijuoja
sources/manifest_LOCAL.json→sources/manifest.json; ignoruoja sukurtus ZIP; įspėjimai nepaverčia proceso nesėkme.
menu
- Paskirtis: interaktyvus meniu Make tikslui ir pasirenkamiems argumentams.
- Naudojimas: paleiskite
makebe argumentų. - Pastabos: jei
whiptailnepasiekiamas, meniu grįžta priemake help.
pack
- Paskirtis: sukurti ATN ir LOCAL ZIP’us (priklauso nuo
lint). - Naudojimas:
make pack - Patarimas: prieš pakuodami pakelkite versijas abiejuose
sources/manifest_*.json.
prettier
- Paskirtis: suformatuoti repozitoriją vietoje.
- Naudojimas:
make prettier
prettier_check
- Paskirtis: patikrinti formatavimą (be rašymo).
- Naudojimas:
make prettier_check
prettier_write
- Paskirtis: sinonimas
prettier. - Naudojimas:
make prettier_write
test
- Paskirtis: paleisti Prettier (rašymas), ESLint, tada Vitest (aprėptis, jei įdiegta).
- Naudojimas:
make test
test_i18n
- Paskirtis: i18n‑fokusuoti testai priedo eilutėms ir svetainės dokumentams.
- Naudojimas:
make test_i18n - Paleidžia:
npm run test:i18nirnpm run -s test:website-i18n.
translate_app / translation_app
- Paskirtis: išversti priedo UI eilutes iš EN į kitas lokales.
- Naudojimas:
make translation_app OPTS="--locales all|de,fr" - Pastabos: išsaugo raktų struktūrą ir vietos žymes; žurnalas į
translation_app.log. Scenarijaus forma:node scripts/translate_app.js --locales ….
translate_web_docs_batch / translate_web_docs_sync
- Paskirtis: išversti svetainės dokumentus iš
website/docs/*.mdįwebsite/i18n/<locale>/.... - Pageidautina:
translate_web_docs_batch(OpenAI Batch API)- Naudojimas (vėliavėlės):
make translate_web_docs_batch OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>" - Senas pozicinis vis dar priimamas:
OPTS="<doc|all> <lang|all>"
- Naudojimas (vėliavėlės):
- Elgsena: sukuria JSONL, įkelia, tikrina kas 30 s, atsisiunčia rezultatus, įrašo failus.
- Pastaba: „batch“ darbas gali trukti iki 24 valandų (pagal OpenAI „batch“ langą). Konsolėje kas kartą rodoma praėjusi trukmė.
- Aplinka:
OPENAI_API_KEY(privaloma), neprivalomiOPENAI_MODEL,OPENAI_TEMPERATURE,OPENAI_BATCH_WINDOW(numatyta 24 h),BATCH_POLL_INTERVAL_MS. - Paveldėtas:
translate_web_docs_sync- Naudojimas (vėliavėlės):
make translate_web_docs_sync OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>" - Senas pozicinis vis dar priimamas:
OPTS="<doc|all> <lang|all>"
- Naudojimas (vėliavėlės):
- Elgsena: sinchroniniai užklausų ciklai poromis (be „batch“ agregavimo).
- Pastabos: Interaktyvūs klausimai, kai
OPTSpraleistas. Abu režimai išsaugo kodo blokus/inline kodą ir palieka front‑matteridnepakeistą; žurnalai įtranslation_web_batch.log(batch) arbatranslation_web_sync.log(sync).
translate_web_index / translation_web_index
- Paskirtis: išversti svetainės UI eilutes (pagrindinis, meniu, poraštė) iš
website/i18n/en/code.jsonį visas lokales powebsite/i18n/<locale>/code.json(išskyrusen). - Naudojimas:
make translate_web_indexarbamake translate_web_index OPTS="--locales de,fr [--force]" - Reikalavimai: eksportuokite
OPENAI_API_KEY(pasirenkama:OPENAI_MODEL=gpt-4o-mini). - Elgsena: tikrina JSON struktūrą, išsaugo garbanotų skliaustų vietos žymes, nekeičia URL ir, esant tikrinimo klaidoms, bando dar kartą su grįžtamuoju ryšiu.
web_build
- Paskirtis: sukurti dokumentų svetainę į
website/build. - Naudojimas:
make web_build OPTS="--locales en|de,en|all"(arba nustatykiteBUILD_LOCALES="en de") - Vidiniai:
node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …]. - Priklausomybės: paleidžia
npm ciaplankewebsite/tik jei trūkstawebsite/node_modules/@docusaurus.
web_build_linkcheck
- Paskirtis: saugi neprisijungus nuorodų patikra.
- Naudojimas:
make web_build_linkcheck OPTS="--locales en|all" - Pastabos: kuria į
tmp_linkcheck_web_pages; perrašo GH PagesbaseUrlį/; praleidžia nuotolines HTTP(S) nuorodas.
web_build_local_preview
- Paskirtis: vietinė gh‑pages peržiūra su pasirenkamais testais/nuorodų patikra.
- Naudojimas:
make web_build_local_preview OPTS="--locales en|all [--no-test] [--no-link-check] [--dry-run] [--no-serve]" - Elgsena: pirma bando Node peržiūros serverį (
scripts/preview-server.mjs, palaiko/__stop), grįžta priepython3 -m http.server; aptarnauja per 8080–8090; PID tiesweb-local-preview/.server.pid.
web_push_github
- Paskirtis: išsiųsti
website/buildį šakągh-pages. - Naudojimas:
make web_push_github
Patarimas: nustatykite NPM=…, kad pakeistumėte Makefile naudojamą paketų tvarkytuvę (numatyta npm).