Skip to main content

Pangembangan


Pituduh Pangembangan

Édit Inggris wungkul; tarjamahan bakal sumebar

Apdet dokuméntasi ngan ukur dina website/docs (Inggris). Tarjamahan dina website/i18n/<locale>/… dihasilkeun sarta ulah diédit manual. Paké pancén tarjamahan (misalna, make translate_web_docs_batch) pikeun nyegerkeun eusi lokal.

Sarat awal

  • Node.js 22+ jeung npm (diuji ku Node 22)
  • Thunderbird 128 ESR atawa leuwih anyar (pikeun nguji manual)

Tata Léngkah Proyék (tingkat luhur)

  • Akar (root): skrip packaging distribution_zip_packer.sh, dokuméntasi, cuplikan layar
  • sources/: kode add-on utama (latar tukang, pilihan/popup UI, manifés, ikon)
  • tests/: pakét tés Vitest
  • website/: dokuméntasi Docusaurus (kalebet i18n dina website/i18n/de/...)

Masang & Parabot

  • Pasang gumantung root: npm ci
  • Dokuméntasi (opsional): cd website && npm ci
  • Manggihan target: make help

Pangembangan Langsung (web‑ext run)

  • Siklus gancang dina Firefox Desktop (tés UI basajan wungkul):
  • npx web-ext run --source-dir sources --target=firefox-desktop
  • Jalan dina Thunderbird (disarankeun keur MailExtensions):
  • npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"
  • Tips:
  • Tetepkeun Konsol Kasalahan Thunderbird kabuka (Tools → Developer Tools → Error Console).
  • Kaca kajadian MV3 dibekukeun nalika nganggur; muat deui add‑on sanggeus parobahan kode, atawa tinggalkeun web‑ext auto‑reload.
  • Sababaraha paripolah husus Firefox béda; salawasna verifikasi dina Thunderbird pikeun sarua API.
  • Jalur binér Thunderbird (conto):
  • Linux: thunderbird (contona, /usr/bin/thunderbird)
  • macOS: /Applications/Thunderbird.app/Contents/MacOS/thunderbird
  • Windows: "C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe"
  • Isolasi profil: Paké profil Thunderbird misah pikeun pamekaran sangkan teu mangaruhan setélan sapopoé anjeun.

Target Make (urut alfabet)

Makefile ngamastikeun alur dev umum. Jalankeun make help iraha waé pikeun ringkesan sakalimat unggal target.

Tip: ngajalankeun make tanpa target bakal muka ménu Whiptail basajan pikeun milih target.

TargetKaterangan sakalimat
cleanPupus artifak build/preview lokal (tmp/, web-local-preview/, website/build/).
commitFormat, jalankeun tés (kaasup i18n), apdet changelog, commit & push.
eslintJalankeun ESLint ngaliwatan flat config (npm run -s lint:eslint).
helpDaptarkeun sadaya target jeung dokuméntasi sakalimat (diurutkeun).
lintweb‑ext lint dina sources/ (manifés samentara; malire ZIP; teu fatal).
menuMénu interaktif pikeun milih target jeung argumén opsional.
packNgawangun ZIP ATN & LOCAL (ngajalankeun linter; nyauran skrip packer).
prettierMéré format répositori di tempatna (nulis parobahan).
prettier_checkPrettier dina modeu pariksa (tanpa nulis); gagal lamun butuh réformat.
prettier_writeAlias keur prettier.
testPrettier (nulis), ESLint, tuluy Vitest (liputan lamun dikonpigurasikeun).
test_i18nTés i18n wungkul: placeholders/paritas add‑on + paritas situs wéb.
translate_appAlias keur translation_app.
translation_appNarjamahkeun string UI aplikasi tina sources/_locales/en/messages.json.
translate_web_docs_batchNarjamahkeun dokumén situs via OpenAI Batch API (disarankeun).
translate_web_docs_syncNarjamahkeun dokumén situs sacara sinkron (legacy, non-batch).
translate_web_indexAlias keur translation_web_index.
translation_web_indexNarjamahkeun UI homepage/navbar/footer (website/i18n/en/code.json → .../<lang>/code.json).
web_buildNgawangun dokumén kana website/build (ngadukung --locales / BUILD_LOCALES).
web_build_linkcheckMariksa tautan anu aman offline (ngalangkungan HTTP[S] jauh).
web_build_local_previewPréview gh‑pages lokal; otomatis ngaladénan dina 8080–8090; tés/link‑check opsional.
web_push_githubDorong website/build ka cabang gh-pages.

Sintaks pilihan

  • Paké make <command> OPTS="…" pikeun ngoper pilihan (disarankeun maké tanda petik). Unggal target di handap némbongkeun conto pamakean.

--

Locale build tips

  • Ngawangun sabagéan lokal: setél BUILD_LOCALES="en de" atawa pasihkeun OPTS="--locales en,de" ka target wéb.
  • Préview hiji lokal husus: http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.

Ngawangun & Mempaketkeun

  • Ngawangun ZIP: make pack
  • Ngahasilkeun ZIP ATN jeung LOCAL dina akar répo (ulah ngédit artifak sacara manual)
  • Tip: apdet vérsi dina duanana sources/manifest_ATN.json jeung sources/manifest_LOCAL.json saméméh packaging
  • Pamasangan manual (dev): Thunderbird → Tools → Add‑ons and Themes → gear → Install Add‑on From File… → pilih ZIP anu geus diwangun

Tés

  • Pakét lengkep: make test (Vitest)
  • Cakupan (opsional):
  • npm i -D @vitest/coverage-v8
  • Jalankeun make test; buka coverage/index.html pikeun laporan HTML
  • i18n wungkul: make test_i18n (konci UI/placeholder/judul + parity situs per‑lokal per‑dok kalawan pamariksaan id/title/sidebar_label)

Ngawanohkeun Kasalahan & Log

  • Error Console: Tools → Developer Tools → Error Console
  • Alihkeun log jéntré nalika runtime:
  • Hurungkeun: messenger.storage.local.set({ debug: true })
  • Pareuman: messenger.storage.local.set({ debug: false })
  • Log mucunghul nalika nyusun/ngirim waleran

Dokuméntasi (situs)

  • Server pamekaran: cd website && npm run start
  • Ngawangun situs statik: cd website && npm run build
  • Padanan Make (alfabétis): make web_build, make web_build_linkcheck, make web_build_local_preview, make web_push_github
  • Conto pamakean:
  • EN wungkul, skip tés/link‑check, teu push: make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run"
  • Sadaya lokal, kalayan tés/link‑check, tuluy push: make web_build_local_preview && make web_push_github
  • Sateuacan nerbitkeun, jalankeun pariksa tautan aman‑offline: make web_build_linkcheck.
  • i18n: Inggris aya di website/docs/*.md; tarjamahan Jérman di website/i18n/de/docusaurus-plugin-content-docs/current/*.md
  • Pilarian: Lamun variabel lingkungan Algolia DocSearch disetél dina CI (DOCSEARCH_APP_ID, DOCSEARCH_API_KEY, DOCSEARCH_INDEX_NAME), situs bakal maké pamilarian Algolia; upami henteu bakal balik kana pilarian lokal. Dina kaca utama, pencét / atawa Ctrl+K pikeun muka kotak pilarian.

  • website/src/pages/donate.js
  • Rute: /donate (jeung /<locale>/donate)
  • Kalakuan:
  • Lamun ruteu ayeuna miboga lokal (misalna, /de/donate), paké éta
  • Upamana henteu, pilih nu pang cocogna tina navigator.languages lawan lokal nu dikonpigurasikeun; balik kana lokal standar
  • Dialihkeun ka:
  • en/docs/donation
  • séjénna → /<locale>/docs/donation
  • Ngagunakeun useBaseUrl pikeun nanganan baseUrl kalayan hadé
  • Kalebet meta refresh + tautan noscript minangka cadangan


Tips Préview

  • Eureunkeun préview Node kalayan bener: buka http://localhost:<port>/__stop (dicitak sanggeus Local server started).
  • Lamun gambar teu muat dina MDX/JSX, paké useBaseUrl('/img/...') supaya nurut kana baseUrl situs.
  • Préview dimimitian heula; pariksa tautan dijalankeun sanggeusna jeung teu ngahalangan (tautan éksternal pegat moal ngeureunkeun préview).
  • Conto URL préview: http://localhost:<port>/Thunderbird-Reply-with-Attachments/ (dicitak sanggeus “Local server started”).
  • Tautan éksternal dina link‑check: Sababaraha situs éksternal (misalna, addons.thunderbird.net) meungpeuk crawler otomatis sarta bisa némbongkeun 403 dina pamariksaan tautan. Préview tetep dimimitian; ieu bisa dipaliré.

Narjamahkeun Situs Wéb

Nu bisa anjeun tarjamahkeun

  • UI situs wungkul: homepage, navbar, footer, jeung string UI séjén. Eusi dokumén tetep Inggris heula.

Tempat ngédit

  • Édit website/i18n/<locale>/code.json (paké en minangka rujukan). Tetepkeun placeholders saperti {year}, {slash}, {ctrl}, {k}, {code1} teu robah.

Ngahasilkeun atawa nyegerkeun file

  • Jieun stub nu leungit keur sakabéh lokal: npm --prefix website run i18n:stubs
  • Timpa stub tina Inggris (sanggeus nambahkeun string anyar): npm --prefix website run i18n:stubs:force
  • Alternatip keur hiji lokal: npx --prefix website docusaurus write-translations --locale <locale>

Narjamahkeun string UI homepage/navbar/footer (OpenAI)

  • Setél kredensial sakali (shell atawa .env):
  • export OPENAI_API_KEY=sk-...
  • Opsional: export OPENAI_MODEL=gpt-4o-mini
  • Sakali jalan (sadayana lokal, teu kaasup en): make translate_web_index
  • Watesan kana lokal tinangtu: make translate_web_index OPTS="--locales de,fr"
  • Timpa nilai nu geus aya: make translate_web_index OPTS="--force"

Validasi & nyoba deui

  • Skrip tarjamahan marios wangun JSON, ngajaga placeholders kurung curly, sarta mastikeun URL teu robah.
  • Lamun validasi gagal, bakal nyoba deui kalawan eupan balik nepi ka 2 kali sateuacan ngajaga nilai nu aya.

Préview lokal anjeun

  • Server pamekaran: npm --prefix website run start
  • Kunjuan http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/

Ngintun

  • Buka PR jeung file code.json nu geus diédit. Tetepkeun parobahan fokus sarta tambihkeun screenshot gancang lamun mungkin.

Kaamanan & Tips Konpigurasi

  • Ulah nge‑commit sources/manifest.json (dijieun samentara ku build)
  • Tetepkeun browser_specific_settings.gecko.id stabil pikeun ngajaga saluran apdet

Ketahanan Setélan

  • Panyimpenan: Kabéh setélan pamaké aya dina storage.local sarta tetep salila apdet add‑on.
  • Pamasangan: Nilai standar diterapkeun ngan lamun koncina bener‑bener teu aya (undefined).
  • Apdet: Migrasi ngan ngeusian konci nu leungit; nilai nu geus aya teu kungsi ditimpa.
  • Pananda skéma: settingsVersion (kiwari 1).
  • Konci jeung standar:
  • blacklistPatterns: string[]['*intern*', '*secret*', '*passwor*']
  • confirmBeforeAdd: booleanfalse
  • confirmDefaultChoice: 'yes'|'no''yes'
  • warnOnBlacklistExcluded: booleantrue
  • Kode: tingali sources/background.jsinitializeOrMigrateSettings() jeung SCHEMA_VERSION.

Alur pamekaran (nambahkeun setélan anyar)

  • Naékkeun SCHEMA_VERSION dina sources/background.js.
  • Tambahkeun konci anyar + standar kana obyék DEFAULTS dina initializeOrMigrateSettings().
  • Paké aturan "only-if-undefined" nalika ngeusian standar; ulah nimpah nilai nu geus aya.
  • Lamun setélanna katingali ku pamaké, pasang dina sources/options.js sarta tambahkeun string lokal.
  • Tambahkeun/saluyukeun tés (tempo tests/background.settings.migration.test.js).

Tips nguji manual

  • Simulasikeun pamasangan anyar: beberesih dir data éksténsi atawa mimitian ku profil anyar.
  • Simulasikeun apdet: setél settingsVersion kana 0 dina storage.local lajeng muat deui; pastikeun nilai nu aya tetep teu robah sarta ngan konci nu leungit nu ditambahkeun.

Ngungkulan Masalah

  • Pastikeun Thunderbird 128 ESR atawa leuwih anyar
  • Paké Error Console pikeun masalah runtime
  • Lamun setélan nu disimpen siga teu dilarapkeun leres, balikan deui Thunderbird lajeng cobian deui. (Thunderbird bisa nyimpen kaayaan antara sési; balikan ngajamin setélan anyar dimuat.)

CI & Cakupan

  • GitHub Actions (CI — Tests) ngajalankeun vitest kalawan ambang cakupan (85% garis/fungsi/dahan/pernyataan). Lamun ambang teu kahontal, padamelan gagal.
  • Alur kerja ngunggah artifak coverage-html jeung laporan HTML; undeur ti kaca run (Actions → run pangahirna → Artifacts).

Nyumbang

  • Tingali CONTRIBUTING.md pikeun pituduh branch/commit/PR
  • Tip: Jieun profil pamekaran Thunderbird misah pikeun nguji sangkan teu mangaruhan profil sapopoé.

Tarjamahan

  • Ngajalankeun padamelan tarjamahan “sadaya → sadaya” anu gedé bisa lalaunan jeung mahal. Mimitian ku sabagéan (mis., sababaraha dokumén jeung 1–2 lokal), tinjau hasilna, tuluy dilegaan.

  • Kabijakan nyobaan deui: padamelan tarjamahan nepi ka 3 kali nyobaan deui kalawan backoff eksponénsial lamun aya kasalahan API; tingali scripts/translate_web_docs_batch.js jeung scripts/translate_web_docs_sync.js.

Cuplikan layar pikeun dokumén

  • Simpen gambar di handapeun website/static/img/.

  • Rujukkeun dina MD/MDX ngaliwatan useBaseUrl('/img/<filename>') sangkan jalur luyu jeung baseUrl situs.

  • Sanggeus nambah atawa ngarobah ngaran gambar dina website/static/img/, pastikeun sakabéh rujukan masih maké useBaseUrl('/img/…') sarta katingali dina préview lokal. Favicons

  • favicon.ico multi‑ukuran dihasilkeun otomatis dina sakabéh jalur build (Make + skrip) ngaliwatan website/scripts/build-favicon.mjs.

  • Teu perlu léngkah manual; ngapdet icon-*.png geus cekap. Tip marios

  • Tetepkeun front‑matter id teu robah dina dokumén tarjamahan; tarjamahkeun ngan title jeung sidebar_label lamun aya.

clean

  • Tujuan: mupus artifak build/preview lokal.
  • Pamakean: make clean
  • Mupus (lamun aya):
  • tmp/
  • web-local-preview/
  • website/build/

commit

  • Tujuan: format, tés, apdet changelog, commit, sarta push.
  • Pamakean: make commit
  • Rincian: ngajalankeun Prettier (nulis), make test, make test_i18n; nambahkeun changelog nalika aya diff nu distage; push ka origin/<branch>.

eslint

  • Tujuan: ngajalankeun ESLint ngaliwatan flat config.
  • Pamakean: make eslint

help

  • Tujuan: daptarkeun sadaya target jeung dokuméntasi sakalimat.
  • Pamakean: make help

lint

  • Tujuan: lint MailExtension maké web-ext.
  • Pamakean: make lint
  • Catetan: nyalin samentara sources/manifest_LOCAL.jsonsources/manifest.json; malire ZIP nu geus diwangun; peringatan teu ngajadikeun pipa gagal.

menu

  • Tujuan: ménu interaktif pikeun milih target Make jeung argumén opsional.
  • Pamakean: jalankeun make tanpa argumén.
  • Catetan: lamun whiptail teu sayaga, ménu bakal balik kana make help.

pack

  • Tujuan: ngawangun ZIP ATN jeung LOCAL (gumantung kana lint).
  • Pamakean: make pack
  • Tip: naekeun vérsi dina duanana sources/manifest_*.json saméméh packaging.

prettier

  • Tujuan: méré format répo di tempatna.
  • Pamakean: make prettier

prettier_check

  • Tujuan: mastikeun formatting (tanpa nulis).
  • Pamakean: make prettier_check

prettier_write

  • Tujuan: alias keur prettier.
  • Pamakean: make prettier_write

test

  • Tujuan: ngajalankeun Prettier (nulis), ESLint, tuluy Vitest (cakupan lamun dipasang).
  • Pamakean: make test

test_i18n

  • Tujuan: tés fokus i18n pikeun string add‑on jeung dokumén situs.
  • Pamakean: make test_i18n
  • Ngajalankeun: npm run test:i18n jeung npm run -s test:website-i18n.

translate_app / translation_app

  • Tujuan: narjamahkeun string UI add‑on tina EN ka lokal séjén.
  • Pamakean: make translation_app OPTS="--locales all|de,fr"
  • Catetan: ngajaga struktur konci jeung placeholders; log ka translation_app.log. Bentuk skrip: node scripts/translate_app.js --locales ….

translate_web_docs_batch / translate_web_docs_sync

  • Tujuan: narjamahkeun dokumén situs tina website/docs/*.md kana website/i18n/<locale>/....
  • Disarankeun: translate_web_docs_batch (OpenAI Batch API)
    • Pamakean (flags): make translate_web_docs_batch OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Posisi legacy masih ditarima: OPTS="<doc|all> <lang|all>"
  • Kalakuan: nyusun JSONL, ngunggah, polling saban 30s, ngundeur hasilna, nulis file.
  • Catetan: padamelan batch bisa nepi ka 24 jam (nurutan jandéla batch OpenAI). Konsol némbongkeun waktu kaliwat dina unggal polling.
  • Lingkungan: OPENAI_API_KEY (perlu), opsional OPENAI_MODEL, OPENAI_TEMPERATURE, OPENAI_BATCH_WINDOW (standar 24h), BATCH_POLL_INTERVAL_MS.
  • Legacy: translate_web_docs_sync
    • Pamakean (flags): make translate_web_docs_sync OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Posisi legacy masih ditarima: OPTS="<doc|all> <lang|all>"
  • Kalakuan: paménta sinkron per‑pasangan (tanpa agregasi batch).
  • Catetan: Prompt interaktif lamun OPTS teu disadiakeun. Duanana mode ngajaga blok kode/kode inline sarta tetepkeun front‑matter id teu robah; log ka translation_web_batch.log (batch) atawa translation_web_sync.log (sinkron).

translate_web_index / translation_web_index

  • Tujuan: narjamahkeun string UI situs (homepage, navbar, footer) tina website/i18n/en/code.json ka sakabéh lokal dina website/i18n/<locale>/code.json (iwal en).
  • Pamakean: make translate_web_index atawa make translate_web_index OPTS="--locales de,fr [--force]"
  • Sarat: ekspor OPENAI_API_KEY (opsional: OPENAI_MODEL=gpt-4o-mini).
  • Kalakuan: mariksa struktur JSON, ngajaga placeholders kurung curly, ngajaga URL teu robah, sarta nyobaan deui kalawan eupan balik lamun aya kasalahan validasi.

web_build

  • Tujuan: ngawangun situs dokumén kana website/build.
  • Pamakean: make web_build OPTS="--locales en|de,en|all" (atawa setél BUILD_LOCALES="en de")
  • Internal: node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …].
  • Gantunganna: ngajalankeun npm ci dina website/ ngan lamun website/node_modules/@docusaurus teu aya.

web_build_linkcheck

  • Tujuan: pamariksaan tautan anu aman offline.
  • Pamakean: make web_build_linkcheck OPTS="--locales en|all"
  • Catetan: ngawangun kana tmp_linkcheck_web_pages; ngarobah baseUrl GH Pages jadi /; ngalangkungan tautan HTTP(S) jauh.

web_build_local_preview

  • Tujuan: préview gh‑pages lokal kalawan tés/link‑check opsional.
  • Pamakean: make web_build_local_preview OPTS="--locales en|all [--no-test] [--no-link-check] [--dry-run] [--no-serve]"
  • Kalakuan: nyobian server préview Node heula (scripts/preview-server.mjs, ngadukung /__stop), balik kana python3 -m http.server lamun perlu; ngaladénan dina 8080–8090; PID di web-local-preview/.server.pid.

web_push_github

  • Tujuan: dorong website/build ka cabang gh-pages.
  • Pamakean: make web_push_github

Tip: setél NPM=… pikeun ngaganti manajer pakét nu dipaké ku Makefile (standarna npm).