Skip to main content

Izstrāde


Izstrādes ceļvedis

Rediģējiet tikai angļu valodu; tulkojumi izplatās automātiski

Atjauniniet dokumentāciju tikai zem website/docs (angļu valoda). Tulkojumi zem website/i18n/<locale>/… tiek ģenerēti un nav jārediģē manuāli. Izmantojiet tulkošanas uzdevumus (piem., make translate_web_docs_batch), lai atsvaidzinātu lokalizēto saturu.

Priekšnosacījumi

  • Node.js 22+ un npm (pārbaudīts ar Node 22)
  • Thunderbird 128 ESR vai jaunāks (manuālai testēšanai)

Projekta struktūra (augstā līmenī)

  • Sakne: iepakošanas skripts distribution_zip_packer.sh, dokumentācija, ekrānattēli
  • sources/: galvenais papildinājuma kods (fons, opciju/uznirstošais interfeiss, manifesti, ikonas)
  • tests/: Vitest komplekts
  • website/: Docusaurus dokumenti (ar i18n zem website/i18n/de/...)

Instalēšana un rīki

  • Instalēt saknes atkarības: npm ci
  • Dokumentācija (pēc izvēles): cd website && npm ci
  • Atrast mērķus: make help

Dzīvā izstrāde (web‑ext run)

  • Ātra cilpa Firefox Desktop (tikai UI dūmu testi):
  • npx web-ext run --source-dir sources --target=firefox-desktop
  • Palaist Thunderbird (ieteicams MailExtensions):
  • npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"
  • Padomi:
  • Turiet atvērtu Thunderbird kļūdu konsoli (Rīki → Izstrādātāja rīki → Kļūdu konsole).
  • MV3 notikumu lapas dīkstāvē tiek apturētas; pēc koda izmaiņām pārlādējiet papildinājumu vai ļaujiet web‑ext automātiski pārlādēt.
  • Dažas tikai Firefox uzvedības atšķiras; vienmēr pārbaudiet Thunderbird, lai nodrošinātu API atbilstību.
  • Thunderbird izpildfailu ceļi (piemēri):
  • Linux: thunderbird (piem., /usr/bin/thunderbird)
  • macOS: /Applications/Thunderbird.app/Contents/MacOS/thunderbird
  • Windows: "C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe"
  • Profila izolācija: Izmantojiet atsevišķu Thunderbird profilu izstrādei, lai neietekmētu ikdienas iestatījumus.

Make mērķi (alfabētiskā secībā)

Makefile standartizē kopīgus izstrādes plūsmas. Palaidiet make help jebkurā laikā, lai iegūtu vienrindas kopsavilkumu par katru mērķi.

Padoms: palaižot make bez mērķa, atveras vienkārša Whiptail izvēlne mērķa izvēlei.

MērķisVienrindas apraksts
cleanNoņemt lokālos būvēšanas/priekšskatījuma artefaktus (tmp/, web-local-preview/, website/build/).
commitFormatēt, palaist testus (t.sk. i18n), atjaunināt izmaiņu žurnālu, veikt commit un push.
eslintPalaist ESLint, izmantojot plakanās konfigurācijas (npm run -s lint:eslint).
helpUzskaitīt visus mērķus ar vienrindas aprakstiem (sakārtoti).
lintweb‑ext lint uz sources/ (pagaidu manifests; ignorē ZIP; nefatāls).
menuInteraktīva izvēlne mērķa un izvēles argumentu izvēlei.
packBūvēt ATN un LOCAL ZIP (palaiž linteri; izsauc pakošanas skriptu).
prettierFormatēt repozitoriju uz vietas (pieraksta izmaiņas).
prettier_checkPrettier pārbaudes režīmā (bez pieraksta); neizdodas, ja nepieciešama pārformatēšana.
prettier_writeAizstājvārds prettier.
testPrettier (pieraksts), ESLint, tad Vitest (segums, ja konfigurēts).
test_i18nTikai i18n testi: papildinājuma vietturi/atbilstība + vietnes atbilstība.
translate_appAizstājvārds translation_app.
translation_appTulkot lietotnes UI virknes no sources/_locales/en/messages.json.
translate_web_docs_batchTulkot vietnes dokumentus caur OpenAI Batch API (ieteicams).
translate_web_docs_syncTulkot vietnes dokumentus sinhroni (mantojums, ne-batch).
translate_web_indexAizstājvārds translation_web_index.
translation_web_indexTulkot sākumlapas/navigācijas joslas/kājenes UI (website/i18n/en/code.json → .../<lang>/code.json).
web_buildBūvēt dokumentus uz website/build (atbalsta --locales / BUILD_LOCALES).
web_build_linkcheckBezsaistes droša saišu pārbaude (izlaiž attālinātos HTTP[S]).
web_build_local_previewLokāls gh‑pages priekšskatījums; automātiska apkalpošana uz 8080–8090; izvēles testi/saišu pārbaude.
web_push_githubNosūtīt website/build uz atzaru gh-pages.

Opciju sintakse

  • Lietojiet make <command> OPTS="…" opciju nodošanai (ieteicamas pēdiņas). Katram mērķim zemāk ir paraugs.

--

Lokāļu būvēšanas padomi

  • Būvēt lokāļu apakškopu: iestatiet BUILD_LOCALES="en de" vai nododiet OPTS="--locales en,de" web mērķiem.
  • Priekšskatīt konkrētu lokāli: http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.

Būvēšana un pakošana

  • Būvēt ZIP: make pack
  • Izveido ATN un LOCAL ZIP repozitorija saknē (artefaktus ar roku nelabojiet)
  • Padoms: pirms pakošanas atjauniniet versiju gan sources/manifest_ATN.json, gan sources/manifest_LOCAL.json
  • Manuāla instalēšana (izstrāde): Thunderbird → Rīki → Papildinājumi un motīvi → zobrats → Instalēt papildinājumu no faila… → izvēlieties izveidoto ZIP

Testi

  • Pilns komplekts: make test (Vitest)
  • Pārklājums (pēc izvēles):
  • npm i -D @vitest/coverage-v8
  • Palaidiet make test; atveriet coverage/index.html HTML atskaitei
  • Tikai i18n: make test_i18n (UI atslēgas/vietturi/virsraksti + vietne ar katrai lokālei katram dokumentam atbilstību ar id/title/sidebar_label pārbaudēm)

Atkļūdošana un žurnāli

  • Kļūdu konsole: Rīki → Izstrādātāja rīki → Kļūdu konsole
  • Pārslēgt detalizētus žurnālus darbības laikā:
  • Ieslēgt: messenger.storage.local.set({ debug: true })
  • Izslēgt: messenger.storage.local.set({ debug: false })
  • Žurnāli parādās, rakstot/sūtot atbildes

Dokumentācija (vietne)

  • Izstrādes serveris: cd website && npm run start
  • Būvēt statisku vietni: cd website && npm run build
  • Make ekvivalenti (alfabētiski): make web_build, make web_build_linkcheck, make web_build_local_preview, make web_push_github
  • Lietošanas piemēri:
  • Tikai EN, izlaist testus/saišu pārbaudi, bez push: make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run"
  • Visas lokāles, ar testiem/saišu pārbaudi, tad push: make web_build_local_preview && make web_push_github
  • Pirms publicēšanas palaidiet bezsaistes drošo saišu pārbaudi: make web_build_linkcheck.
  • i18n: angļu saturs ir website/docs/*.md; vācu tulkojumi ir website/i18n/de/docusaurus-plugin-content-docs/current/*.md
  • Meklēšana: Ja CI ir iestatīti Algolia DocSearch vides mainīgie (DOCSEARCH_APP_ID, DOCSEARCH_API_KEY, DOCSEARCH_INDEX_NAME), vietne izmanto Algolia meklēšanu; pretējā gadījumā tā izmanto lokālo meklēšanu. Sākumlapā nospiediet / vai Ctrl+K, lai atvērtu meklēšanas lodziņu.

  • website/src/pages/donate.js
  • Maršruts: /donate (un /<locale>/donate)
  • Uzvedība:
  • Ja pašreizējam maršrutam ir lokāle (piem., /de/donate), izmantojiet to
  • Pretējā gadījumā izvēlieties labāko atbilstību no navigator.languages pret konfigurētajām lokālēm; ja nekas neder, izmantojiet noklusējuma lokāli
  • Novirza uz:
  • en/docs/donation
  • pārējie → /<locale>/docs/donation
  • Izmanto useBaseUrl pareizai baseUrl apstrādei
  • Ietver meta atsvaidzināšanu + noscript saiti kā rezerves iespēju


Priekšskatījuma padomi

  • Tīri apturiet Node priekšskatījumu: atveriet http://localhost:<port>/__stop (izdrukāts pēc Local server started).
  • Ja attēli neielādējas MDX/JSX, izmantojiet useBaseUrl('/img/...'), lai ievērotu vietnes baseUrl.
  • Vispirms startē priekšskatījums; saišu pārbaude tiek palaista pēc tam un nav bloķējoša (bojātas ārējās saites neapturēs priekšskatījumu).
  • Priekšskatījuma URL piemērs: http://localhost:<port>/Thunderbird-Reply-with-Attachments/ (izdrukāts pēc “Local server started”).
  • Ārējās saites saišu pārbaudē: Dažas ārējās vietnes (piem., addons.thunderbird.net) bloķē automatizētus pārmeklētājus un saišu pārbaudē var rādīt 403. Priekšskatījums tāpat startē; to var droši ignorēt.

Tulkot vietni

Ko var tulkot

  • Tikai vietnes lietotāja saskarni: sākumlapa, navigācijas josla, kājene un citas UI virknes. Dokumentu saturs pagaidām paliek tikai angļu valodā.

Kur rediģēt

  • Rediģējiet website/i18n/<locale>/code.json (izmantojiet en kā atsauci). Saglabājiet vietturus, piemēram, {year}, {slash}, {ctrl}, {k}, {code1}, nemainītus.

Ģenerēt vai atsvaidzināt failus

  • Izveidot trūkstošos aizmetņus visām lokālēm: npm --prefix website run i18n:stubs
  • Pārrakstīt aizmetņus no angļu valodas (pēc jaunu virkņu pievienošanas): npm --prefix website run i18n:stubs:force
  • Alternatīva vienai lokālei: npx --prefix website docusaurus write-translations --locale <locale>

Tulkot sākumlapas/navigācijas/kājenes UI virknes (OpenAI)

  • Iestatiet akreditācijas datus vienreiz (čaula vai .env):
  • export OPENAI_API_KEY=sk-...
  • Pēc izvēles: export OPENAI_MODEL=gpt-4o-mini
  • Vienā piegājienā (visas lokāles, izlaist en): make translate_web_index
  • Ierobežot konkrētām lokālēm: make translate_web_index OPTS="--locales de,fr"
  • Pārrakstīt esošās vērtības: make translate_web_index OPTS="--force"

Validācija un atkārtojumi

  • Tulkošanas skripts validē JSON formu, saglabā figūriekavu vietturus un nodrošina, ka URL paliek nemainīti.
  • Ja validācija neizdodas, tas mēģina vēlreiz ar atgriezenisko saiti līdz 2 reizēm, pirms atstāj esošās vērtības.

Priekšskatiet savu lokāli

  • Izstrādes serveris: npm --prefix website run start
  • Apmeklējiet http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/

Iesniegšana

  • Atveriet PR ar rediģēto(-ajiem) code.json failu(-iem). Saglabājiet izmaiņas fokusētas un iespējas gadījumā iekļaujiet ātru ekrānattēlu.

Drošības un konfigurācijas padomi

  • Neiesniedziet (commit) sources/manifest.json (tas tiek izveidots uz laiku būves gaitā)
  • Uzturiet browser_specific_settings.gecko.id stabilu, lai saglabātu atjauninājumu kanālu

Iestatījumu noturība

  • Glabāšana: Visi lietotāja iestatījumi atrodas storage.local un saglabājas starp papildinājuma atjauninājumiem.
  • Instalēšana: Noklusējumi tiek piemēroti tikai tad, ja atslēga stingri trūkst (undefined).
  • Atjaunināšana: Migrācija aizpilda tikai trūkstošās atslēgas; esošās vērtības nekad netiek pārrakstītas.
  • Shēmas marķieris: settingsVersion (pašlaik 1).
  • Atslēgas un noklusējumi:
  • blacklistPatterns: string[]['*intern*', '*secret*', '*passwor*']
  • confirmBeforeAdd: booleanfalse
  • confirmDefaultChoice: 'yes'|'no''yes'
  • warnOnBlacklistExcluded: booleantrue
  • Kods: skatiet sources/background.jsinitializeOrMigrateSettings() un SCHEMA_VERSION.

Izstrādes darba plūsma (jauna iestatījuma pievienošana)

  • Palieliniet SCHEMA_VERSION failā sources/background.js.
  • Pievienojiet jauno atslēgu + noklusējumu objektam DEFAULTS failā initializeOrMigrateSettings().
  • Lietojiet “tikai ja nav definēts” noteikumu, iestādot noklusējumus; nepārrakstiet esošās vērtības.
  • Ja iestatījums ir redzams lietotājam, pieslēdziet to sources/options.js un pievienojiet lokalizētās virknes.
  • Pievienojiet/pielāgojiet testus (skat. tests/background.settings.migration.test.js).

Padomi manuālai testēšanai

  • Simulējiet jaunu instalēšanu: notīriet paplašinājuma datu direktoriju vai sāciet ar jaunu profilu.
  • Simulējiet atjauninājumu: iestatiet settingsVersion uz 0 failā storage.local un pārlādējiet; apstipriniet, ka esošās vērtības paliek nemainīgas un tiek pievienotas tikai trūkstošās atslēgas.

Problēmu novēršana

  • Pārliecinieties, ka Thunderbird ir 128 ESR vai jaunāks
  • Lietojiet Kļūdu konsoli darbības laika problēmām
  • Ja saglabātie iestatījumi šķiet netiek pareizi piemēroti, restartējiet Thunderbird un mēģiniet vēlreiz. (Thunderbird var kešot stāvokli starp sesijām; restarts nodrošina, ka ielādējas svaigi iestatījumi.)

CI un pārklājums

  • GitHub Actions (CI — Tests) palaiž vitest ar pārklājuma sliekšņiem (85% rindas/funkcijas/zari/paziņojumi). Ja sliekšņi netiek sasniegti, darbs neizdodas.
  • Darbeplūsma augšupielādē artefaktu coverage-html ar HTML atskaiti; lejupielādējiet to no izpildes lapas (Actions → jaunākais izpildījums → Artifacts).

Ieguldīšana

  • Skatiet CONTRIBUTING.md, lai uzzinātu vadlīnijas par zariem/commit/PR
  • Padoms: Izveidojiet atsevišķu Thunderbird izstrādes profilu testēšanai, lai neietekmētu ikdienas profilu.

Tulkojumi

  • Lieli “all → all” tulkošanas darbi var būt lēni un dārgi. Sāciet ar apakškopu (piem., daži dokumenti un 1–2 lokāles), pārskatiet rezultātu un pēc tam paplašiniet.

  • Atkārtojumu politika: tulkošanas darbi veic līdz 3 mēģinājumiem ar eksponenciālu atpakaļatturēšanos pie API kļūdām; skatiet scripts/translate_web_docs_batch.js un scripts/translate_web_docs_sync.js.

Ekrānattēli dokumentiem

  • Glabājiet attēlus zem website/static/img/.

  • Atsaucieties uz tiem MD/MDX, izmantojot useBaseUrl('/img/<filename>'), lai ceļi darbotos ar vietnes baseUrl.

  • Pēc attēlu pievienošanas vai pārdēvēšanas zem website/static/img/ pārliecinieties, ka visas atsauces joprojām izmanto useBaseUrl('/img/…') un tiek attēlotas lokālā priekšskatījumā. Favikoni

  • Daudzizmēru favicon.ico tiek automātiski ģenerēts visos būvēšanas ceļos (Make + skripti) ar website/scripts/build-favicon.mjs palīdzību.

  • Nav nepieciešama manuāla darbība; pietiek atjaunināt icon-*.png. Pārskatīšanas padoms

  • Saglabājiet front‑matter id nemainītu tulkotajos dokumentos; tulkojiet tikai title un sidebar_label, ja tie ir.

clean

  • Mērķis: noņemt lokālos būvēšanas/priekšskatījuma artefaktus.
  • Lietošana: make clean
  • Noņem (ja ir):
  • tmp/
  • web-local-preview/
  • website/build/

commit

  • Mērķis: formatēt, testēt, atjaunināt izmaiņu žurnālu, veikt commit un push.
  • Lietošana: make commit
  • Sīkāk: palaiž Prettier (pieraksts), make test, make test_i18n; papildina izmaiņu žurnālu, ja ir noinscenētas atšķirības; nosūta uz origin/<branch>.

eslint

  • Mērķis: palaist ESLint, izmantojot plakanās konfigurācijas.
  • Lietošana: make eslint

help

  • Mērķis: uzskaitīt visus mērķus ar vienrindas aprakstiem.
  • Lietošana: make help

lint

  • Mērķis: lintot MailExtension, izmantojot web-ext.
  • Lietošana: make lint
  • Piezīmes: pagaidu kopijas sources/manifest_LOCAL.jsonsources/manifest.json; ignorē uzbūvētos ZIP; brīdinājumi nepārtrauc cauruļvadu.

menu

  • Mērķis: interaktīva izvēlne Make mērķa un izvēles argumentu izvēlei.
  • Lietošana: palaidiet make bez argumentiem.
  • Piezīmes: ja whiptail nav pieejams, izvēlne pāriet uz make help.

pack

  • Mērķis: būvēt ATN un LOCAL ZIP (atkarīgs no lint).
  • Lietošana: make pack
  • Padoms: palieliniet versijas abos sources/manifest_*.json pirms pakošanas.

prettier

  • Mērķis: formatēt repozitoriju uz vietas.
  • Lietošana: make prettier

prettier_check

  • Mērķis: pārbaudīt formatējumu (bez pieraksta).
  • Lietošana: make prettier_check

prettier_write

  • Mērķis: aizstājvārds prettier.
  • Lietošana: make prettier_write

test

  • Mērķis: palaist Prettier (pieraksts), ESLint un pēc tam Vitest (pārklājums, ja instalēts).
  • Lietošana: make test

test_i18n

  • Mērķis: uz i18n fokusēti testi papildinājuma virknēm un vietnes dokumentiem.
  • Lietošana: make test_i18n
  • Palaiž: npm run test:i18n un npm run -s test:website-i18n.

translate_app / translation_app

  • Mērķis: tulkot papildinājuma UI virknes no EN uz citām lokālēm.
  • Lietošana: make translation_app OPTS="--locales all|de,fr"
  • Piezīmes: saglabā atslēgu struktūru un vietturus; žurnāli tiek rakstīti translation_app.log. Skripta forma: node scripts/translate_app.js --locales ….

translate_web_docs_batch / translate_web_docs_sync

  • Mērķis: tulkot vietnes dokumentus no website/docs/*.md uz website/i18n/<locale>/....
  • Ieteicams: translate_web_docs_batch (OpenAI Batch API)
    • Lietošana (karogi): make translate_web_docs_batch OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Joprojām tiek pieņemta mantojuma pozicionālā forma: OPTS="<doc|all> <lang|all>"
  • Uzvedība: būvē JSONL, augšupielādē, aptaujā ik 30 s, lejupielādē rezultātus, raksta failus.
  • Piezīme: pakešdarbs var aizņemt līdz 24 stundām (saskaņā ar OpenAI pakešu logu). Konsole katrā aptaujā rāda pagājušo laiku.
  • Vide: OPENAI_API_KEY (obligāts), izvēles OPENAI_MODEL, OPENAI_TEMPERATURE, OPENAI_BATCH_WINDOW (noklusēti 24h), BATCH_POLL_INTERVAL_MS.
  • Mantojums: translate_web_docs_sync
    • Lietošana (karogi): make translate_web_docs_sync OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Joprojām tiek pieņemta mantojuma pozicionālā forma: OPTS="<doc|all> <lang|all>"
  • Uzvedība: sinhroni pieprasījumi pa pāriem (bez pakešsagrupēšanas).
  • Piezīmes: interaktīvi uzvedņi, ja OPTS izlaists. Abos režīmos tiek saglabāti koda bloki/inline kods un front‑matter id paliek nemainīgs; žurnāli rakstās translation_web_batch.log (batch) vai translation_web_sync.log (sync).

translate_web_index / translation_web_index

  • Mērķis: tulkot vietnes UI virknes (sākumlapa, navigācijas josla, kājene) no website/i18n/en/code.json uz visām lokālēm zem website/i18n/<locale>/code.json (izņemot en).
  • Lietošana: make translate_web_index vai make translate_web_index OPTS="--locales de,fr [--force]"
  • Prasības: eksportēt OPENAI_API_KEY (pēc izvēles: OPENAI_MODEL=gpt-4o-mini).
  • Uzvedība: validē JSON struktūru, saglabā figūriekavu vietturus, uztur URL nemainītus un validācijas kļūdu gadījumā mēģina vēlreiz ar atgriezenisko saiti.

web_build

  • Mērķis: būvēt dokumentācijas vietni uz website/build.
  • Lietošana: make web_build OPTS="--locales en|de,en|all" (vai iestatiet BUILD_LOCALES="en de")
  • Iekšējā darbība: node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …].
  • Atkarības: palaiž npm ci direktorijā website/ tikai tad, ja trūkst website/node_modules/@docusaurus.

web_build_linkcheck

  • Mērķis: bezsaistes droša saišu pārbaude.
  • Lietošana: make web_build_linkcheck OPTS="--locales en|all"
  • Piezīmes: būvē uz tmp_linkcheck_web_pages; pārraksta GH Pages baseUrl uz /; izlaiž attālinātās HTTP(S) saites.

web_build_local_preview

  • Mērķis: lokāls gh‑pages priekšskatījums ar izvēles testiem/saišu pārbaudi.
  • Lietošana: make web_build_local_preview OPTS="--locales en|all [--no-test] [--no-link-check] [--dry-run] [--no-serve]"
  • Uzvedība: vispirms mēģina Node priekšskatījuma serveri (scripts/preview-server.mjs, atbalsta /__stop), pāriet uz python3 -m http.server; apkalpo uz 8080–8090; PID atrodas web-local-preview/.server.pid.

web_push_github

  • Mērķis: nosūtīt website/build uz atzaru gh-pages.
  • Lietošana: make web_push_github

Padoms: iestatiet NPM=…, lai pārrakstītu Makefile izmantoto pakotņu pārvaldnieku (noklusējums ir npm).