Skip to main content

Kūrimas


Kūrimo vadovas

Redaguokite tik anglų kalbos versiją; vertimai atsinaujina

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ų rinkinys
  • website/: Docusaurus dokumentacija (su i18n po website/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.

TikslasVienos eilutės aprašymas
cleanPašalinti lokalius kūrimo/peržiūros artefaktus (tmp/, web-local-preview/, website/build/).
commitSuformatuoti, paleisti testus (įsk. i18n), atnaujinti changelogą, commit’inti ir push’inti.
eslintPaleisti ESLint per „flat config“ (npm run -s lint:eslint).
helpIšvardyti visus tikslus su vienos eilutės aprašais (rikiuojama).
lintweb‑ext lint ant sources/ (laikinas manifestas; ignoruoja ZIP; neblokuoja).
menuInteraktyvus meniu tikslui ir pasirenkamiems argumentams pasirinkti.
packSukurti ATN ir LOCAL ZIP’us (paleidžia linterį; kviečia pakavimo scenarijų).
prettierSuformatuoti repozitoriją vietoje (rašant pakeitimus).
prettier_checkPrettier tikrinimo režimu (be rašymo); nesėkmė, jei reikia performatuoti.
prettier_writeSinonimas prettier.
testPrettier (rašymas), ESLint, tada Vitest (aprėptis jei sukonfigūruota).
test_i18nTik i18n testai: priedo vietos žymės/atitiktys + svetainės atitiktis.
translate_appSinonimas translation_app.
translation_appIšversti programos UI eilutes iš sources/_locales/en/messages.json.
translate_web_docs_batchIšversti svetainės dokumentus per OpenAI Batch API (pageidautina).
translate_web_docs_syncIšversti svetainės dokumentus sinchroniškai (senasis, ne batch).
translate_web_indexSinonimas translation_web_index.
translation_web_indexIšversti pagrindinio/meniu/poraštės UI (website/i18n/en/code.json → .../<lang>/code.json).
web_buildSukurti dokumentus į website/build (palaiko --locales / BUILD_LOCALES).
web_build_linkcheckSaugi neprisijungus nuorodų patikra (praleidžia nuotolinius HTTP[S]).
web_build_local_previewVietinė gh‑pages peržiūra; automatinis serveris per 8080–8090; pasirenkami testai/nuorodų patikra.
web_push_githubIš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 perduokite OPTS="--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, tiek sources/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; atidarykite coverage/index.html HTML 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ų vertimai website/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 / arba Ctrl+K, kad atidarytumėte paieškos laukelį.

  • 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.languages prieš sukonfigūruotas lokales; jei netinka, naudokite numatytąją lokalę
  • Peradresuojama į:
  • en/docs/donation
  • kiti → /<locale>/docs/donation
  • Naudoja useBaseUrl teisingam baseUrl apdorojimui
  • Įtraukia „meta refresh“ + noscript nuorodą kaip atsarginį variantą


Peržiūros patarimai

  • Švariai sustabdyti Node peržiūrą: atidarykite http://localhost:<port>/__stop (išspausdinama po Local server started).
  • Jei MDX/JSX nerodo vaizdų, naudokite useBaseUrl('/img/...'), kad būtų gerbiamas svetainės baseUrl.
  • 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 (naudokite en kaip 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.json failu(-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.id stabilų, kad būtų išsaugotas atnaujinimų kanalas

Nustatymų išsaugojimas

  • Saugykla: Visi naudotojo nustatymai saugomi storage.local ir 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 metu 1).
  • Raktai ir numatytosios reikšmės:
  • blacklistPatterns: string[]['*intern*', '*secret*', '*passwor*']
  • confirmBeforeAdd: booleanfalse
  • confirmDefaultChoice: 'yes'|'no''yes'
  • warnOnBlacklistExcluded: booleantrue
  • Kodas: žr. sources/background.jsinitializeOrMigrateSettings() ir SCHEMA_VERSION.

Kūrėjo eiga (pridedant naują nustatymą)

  • Padidinkite SCHEMA_VERSION faile sources/background.js.
  • Pridėkite naują raktą + numatytąją reikšmę į DEFAULTS objektą faile initializeOrMigrateSettings().
  • Naudokite „tik jei undefined“ taisyklę numatytosioms reikšmėms; neperrašykite esamų reikšmių.
  • Jei nustatymas matomas naudotojui, sujunkite jį su sources/options.js ir 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 į 0 faile storage.local ir 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-html su 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.js ir scripts/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ės baseUrl.

  • Įdėję ar pervadinę vaizdus po website/static/img/, patvirtinkite, kad visos nuorodos vis dar naudoja useBaseUrl('/img/…') ir teisingai atvaizduojamos vietinėje peržiūroje. Faviconai

  • Daugiaformatė favicon.ico sukuriama automatiškai visuose kūrimo keliuose (Make + scenarijai) per website/scripts/build-favicon.mjs.

  • Jokio rankinio žingsnio nereikia; pakanka atnaujinti icon-*.png. Peržiūros patarimas

  • Išlaikykite front‑matter id nepakeistą išverstose bylose; versti tik title ir sidebar_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.jsonsources/manifest.json; ignoruoja sukurtus ZIP; įspėjimai nepaverčia proceso nesėkme.

menu

  • Paskirtis: interaktyvus meniu Make tikslui ir pasirenkamiems argumentams.
  • Naudojimas: paleiskite make be argumentų.
  • Pastabos: jei whiptail nepasiekiamas, meniu grįžta prie make 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:i18n ir npm 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>"
  • 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), neprivalomi OPENAI_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>"
  • Elgsena: sinchroniniai užklausų ciklai poromis (be „batch“ agregavimo).
  • Pastabos: Interaktyvūs klausimai, kai OPTS praleistas. Abu režimai išsaugo kodo blokus/inline kodą ir palieka front‑matter id nepakeistą; žurnalai į translation_web_batch.log (batch) arba translation_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 po website/i18n/<locale>/code.json (išskyrus en).
  • Naudojimas: make translate_web_index arba make 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 nustatykite BUILD_LOCALES="en de")
  • Vidiniai: node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …].
  • Priklausomybės: paleidžia npm ci aplanke website/ tik jei trūksta website/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 Pages baseUrl į /; 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 prie python3 -m http.server; aptarnauja per 8080–8090; PID ties web-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).