Skip to main content

Maendeleo


Mwongozo wa Maendeleo

Hariri Kiingereza pekee; tafsiri huenea

Sasisha nyaraka tu chini ya website/docs (Kiingereza). Tafsiri chini ya website/i18n/<locale>/… zinatengenezwa kiotomatiki na hazipaswi kuhaririwa kwa mkono. Tumia kazi za tafsiri (km., make translate_web_docs_batch) kusasisha maudhui yaliyolokeshwa.

Mahitaji ya Awali

  • Node.js 22+ na npm (imejaribiwa na Node 22)
  • Thunderbird 128 ESR au mpya zaidi (kwa majaribio ya mikono)

Muundo wa Mradi (kiwango cha juu)

  • Mzizi: hati ya kufungasha distribution_zip_packer.sh, nyaraka, picha za skrini
  • sources/: msimbo mkuu wa kiendelezi (background, UI ya chaguo/dirisha dogo, manifesti, ikoni)
  • tests/: suite ya Vitest
  • website/: nyaraka za Docusaurus (zikiwa na i18n chini ya website/i18n/de/...)

Usakinishaji na Zana

  • Sakinisha utegemezi za mzizi: npm ci
  • Nyaraka (hiari): cd website && npm ci
  • Gundua malengo: make help

Uendelezaji Hai (web‑ext run)

  • Mzunguko wa haraka kwenye Firefox Desktop (majaribio mepesi ya UI tu):
  • npx web-ext run --source-dir sources --target=firefox-desktop
  • Endesha ndani ya Thunderbird (inapendekezwa kwa MailExtensions):
  • npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"
  • Vidokezo:
  • Weka Konsoli ya Hitilafu ya Thunderbird wazi (Zana → Zana za Wasanidi → Konsoli ya Hitilafu).
  • Kurasa za matukio za MV3 husitishwa zinapokuwa hazitumiki; pakia upya kiendelezi baada ya mabadiliko ya msimbo, au uruhusu web‑ext kupakia upya kiotomatiki.
  • Tabia fulani za pekee za Firefox hutofautiana; hakikisha kila mara kwenye Thunderbird kwa ulinganifu wa API.
  • Njia za programi ya Thunderbird (mifano):
  • Linux: thunderbird (km., /usr/bin/thunderbird)
  • macOS: /Applications/Thunderbird.app/Contents/MacOS/thunderbird
  • Windows: "C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe"
  • Kutenganisha profaili: Tumia profaili tofauti ya Thunderbird kwa maendeleo ili kuepuka kuathiri usanidi wako wa kila siku.

Malengo ya Make (kwa mpangilio wa alfabeti)

Makefile husanifisha mikondo ya kawaida ya maendeleo. Endesha make help wakati wowote kupata muhtasari wa mstari mmoja wa kila lengo.

Dokezo: kuendesha make bila lengo hufungua menyu rahisi ya Whiptail kuchagua lengo.

LengoMaelezo ya mstari mmoja
cleanOndoa mabaki ya ujenzi/prevyuu ya ndani (tmp/, web-local-preview/, website/build/).
commitFomati, endesha majaribio (ikiwemo i18n), sasisha changelog, fanya commit na push.
eslintEndesha ESLint kupitia usanidi tambarare (npm run -s lint:eslint).
helpOrodhesha malengo yote pamoja na maelezo ya mstari mmoja (yamepangwa).
lintweb‑ext lint kwenye sources/ (manifest ya muda; hupuuza ZIP; si ya kufeli).
menuMenyu shirikishi kuchagua lengo na hoja za hiari.
packJenga ZIP za ATN na LOCAL (huendesha linter; huita hati ya kufunga).
prettierFomati hazina mahali pake ndani ya repo (huandika mabadiliko).
prettier_checkPrettier katika hali ya ukaguzi (bila uandishi); hufeli ikiwa inahitaji kurekebisha umbizo.
prettier_writeKisawe cha prettier.
testPrettier (andika), ESLint, kisha Vitest (ufunikaji ukisanidiwa).
test_i18nMajaribio ya i18n pekee: vishikizi/ulinganifu wa kiendelezi + ulinganifu wa tovuti.
translate_appKisawe cha translation_app.
translation_appTafsiri misururu ya UI ya programu kutoka sources/_locales/en/messages.json.
translate_web_docs_batchTafsiri nyaraka za tovuti kupitia OpenAI Batch API (inapendekezwa).
translate_web_docs_syncTafsiri nyaraka za tovuti kwa njia ya sawasawa (urithi, bila batch).
translate_web_indexKisawe cha translation_web_index.
translation_web_indexTafsiri UI ya ukurasa wa nyumbani/nafasi ya urambazaji/sehemu ya chini (website/i18n/en/code.json → .../<lang>/code.json).
web_buildJenga nyaraka hadi website/build (inasaidia --locales / BUILD_LOCALES).
web_build_linkcheckUkaguzi wa viungo salama-bila-mtandao (huruka HTTP[S] za mbali).
web_build_local_previewOnyesho la ndani la gh‑pages; hutumikia kiotomatiki kwenye 8080–8090; majaribio/ukaguzi-wa-viungo wa hiari.
web_push_githubSukuma website/build hadi tawi la gh-pages.

Sintaksia ya chaguo

  • Tumia make <command> OPTS="…" kupitisha chaguo (inashauriwa kutumia nukuu). Kila lengo hapa chini linaonyesha mfano wa matumizi.

--

Vidokezo vya ujenzi wa lugha (locale)

  • Jenga sehemu ya lugha: weka BUILD_LOCALES="en de" au pitisha OPTS="--locales en,de" kwa malengo ya wavuti.
  • Onyesho la awali la lugha mahususi: http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.

Jenga na Kufungasha

  • Jenga ZIP: make pack
  • Huzalisha ZIP za ATN na LOCAL katika mzizi wa hifadhi (repo) (usiweke mabadiliko ya mikono kwenye mabaki)
  • Dokezo: sasisha toleo kwenye sources/manifest_ATN.json na sources/manifest_LOCAL.json zote mbili kabla ya kufungasha
  • Usakinishaji wa mikono (dev): Thunderbird → Zana → Viongezi na Mandhari → gia → Sakinisha Kiendelezi Kutoka Faili… → chagua ZIP iliyojengwa

Jaribio

  • Pakiti kamili: make test (Vitest)
  • Ufunikaji (hiari):
  • npm i -D @vitest/coverage-v8
  • Endesha make test; fungua coverage/index.html kwa ripoti ya HTML
  • i18n pekee: make test_i18n (funguo/vishikizi/vichwa vya UI + ulinganifu wa tovuti kwa kila lugha kwa kila hati ukiwa na ukaguzi wa id/title/sidebar_label)

Urekebishaji Hitilafu na Kumbukumbu

  • Konsoli ya Hitilafu: Zana → Zana za Wasanidi → Konsoli ya Hitilafu
  • Badili kumbukumbu zenye maelezo mengi wakati wa uendeshaji:
  • Washa: messenger.storage.local.set({ debug: true })
  • Zima: messenger.storage.local.set({ debug: false })
  • Kumbukumbu huonekana wakati wa kuandika/kutuma majibu

Nyaraka (tovuti)

  • Seva ya maendeleo: cd website && npm run start
  • Jenga tovuti tuli: cd website && npm run build
  • Visawe vya Make (kwa alfabeti): make web_build, make web_build_linkcheck, make web_build_local_preview, make web_push_github
  • Mifano ya matumizi:
  • Kiingereza pekee, ruka majaribio/kaguzi za viungo, bila kusukuma: make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run"
  • Lugha zote, pamoja na majaribio/kaguzi za viungo, kisha sukuma: make web_build_local_preview && make web_push_github
  • Kabla ya kuchapisha, endesha ukaguzi wa viungo salama-bila-mtandao: make web_build_linkcheck.
  • i18n: Kiingereza kiko kwenye website/docs/*.md; tafsiri za Kijerumani ziko kwenye website/i18n/de/docusaurus-plugin-content-docs/current/*.md
  • Utafutaji: Ikiwa vigezo vya mazingira vya Algolia DocSearch vimewekwa kwenye CI (DOCSEARCH_APP_ID, DOCSEARCH_API_KEY, DOCSEARCH_INDEX_NAME), tovuti hutumia utafutaji wa Algolia; la sivyo hurejea kwenye utafutaji wa ndani. Kwenye ukurasa wa nyumbani, bonyeza / au Ctrl+K kufungua kisanduku cha utafutaji.

  • website/src/pages/donate.js
  • Njia: /donate (na /<locale>/donate)
  • Tabia:
  • Ikiwa njia ya sasa ina lugha (km., /de/donate), itumie
  • La sivyo, chagua inayofanana zaidi kutoka navigator.languages dhidi ya lugha zilizosanidiwa; rejeshea lugha msingi
  • Huelekeza hadi:
  • en/docs/donation
  • nyingine → /<locale>/docs/donation
  • Hutumia useBaseUrl kwa ushughulikiaji sahihi wa baseUrl
  • Hujumuisha meta refresh + kiungo noscript kama mbadala


Vidokezo vya Onyesho la Awali

  • Acha onyesho la awali la Node kwa usafi: fungua http://localhost:<port>/__stop (huchapishwa baada ya Local server started).
  • Ikiwa picha hazipaki katika MDX/JSX, tumia useBaseUrl('/img/...') kuheshimu baseUrl ya tovuti.
  • Onyesho la awali huanza kwanza; ukaguzi wa viungo hukimbia baadaye na hauzuii (viungo vya nje vilivyovunjika havitasimamisha onyesho la awali).
  • Mfano wa URL ya onyesho la awali: http://localhost:<port>/Thunderbird-Reply-with-Attachments/ (huchapishwa baada ya “Local server started”).
  • Viungo vya nje kwenye ukaguzi-wa-viungo: Baadhi ya tovuti za nje (km., addons.thunderbird.net) huzuia vivukizi vya kiotomatiki na zinaweza kuonyesha 403 kwenye ukaguzi wa viungo. Onyesho la awali bado litaanza; hizi ni salama kupuuzwa.

Tafsiri Tovuti

Unachoweza kutafsiri

  • UI ya tovuti pekee: ukurasa wa nyumbani, nafasi ya urambazaji, sehemu ya chini, na misururu mingine ya UI. Maudhui ya nyaraka yatasalia Kiingereza tu kwa sasa.

Pa kuhariri

  • Hariri website/i18n/<locale>/code.json (tumia en kama marejeo). Weka vishikizi kama {year}, {slash}, {ctrl}, {k}, {code1} bila kubadilishwa.

Zalisha au onyesha upya mafaili

  • Unda stubs zinazokosekana kwa lugha zote: npm --prefix website run i18n:stubs
  • Andika juu ya stubs kutoka Kiingereza (baada ya kuongeza misururu mipya): npm --prefix website run i18n:stubs:force
  • Njia mbadala kwa lugha moja: npx --prefix website docusaurus write-translations --locale <locale>

Tafsiri maneno ya UI ya ukurasa wa nyumbani/nafasi ya urambazaji/sehemu ya chini (OpenAI)

  • Weka stakabadhi mara moja (shell au .env):
  • export OPENAI_API_KEY=sk-...
  • Hiari: export OPENAI_MODEL=gpt-4o-mini
  • Mara moja (lugha zote, ruka en): make translate_web_index
  • Punguza kwa lugha maalum: make translate_web_index OPTS="--locales de,fr"
  • Andika juu ya thamani zilizopo: make translate_web_index OPTS="--force"

Uthibitishaji na majaribio tena

  • Skript ya tafsiri inathibitisha umbo la JSON, huhifadhi vishikizi vya mabano ya curly, na kuhakikisha URL hazijabadilika.
  • Ikishindwa kuthibitisha, hujaribu tena kwa maoni hadi mara 2 kabla ya kuacha thamani zilizopo.

Onyesha lugha yako

  • Seva ya maendeleo: npm --prefix website run start
  • Tembelea http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/

Kutuma

  • Fungua PR yenye faili code.json uliyohariri. Weka mabadiliko yakiwa mahususi na ongeza picha ya skrini ya haraka inapowezekana.

Vidokezo vya Usalama na Usanidi

  • Usiweke commit ya sources/manifest.json (hutengenezwa kwa muda na ujenzi)
  • Hifadhi browser_specific_settings.gecko.id iwe thabiti ili kudumisha njia ya masasisho

Uendelevu wa Mipangilio

  • Hifadhi: Mipangilio yote ya mtumiaji iko ndani ya storage.local na hudumu kati ya masasisho ya kiendelezi.
  • Usakinishaji: Chaguo-msingi hutumika tu wakati ufunguo umekosekana kabisa (undefined).
  • Sasisho: Uhamisho hujaza funguo zinazokosekana tu; thamani zilizopo haziondokiwi kamwe.
  • Alama ya skima: settingsVersion (kwa sasa 1).
  • Funguo na chaguo-msingi:
  • blacklistPatterns: string[]['*intern*', '*secret*', '*passwor*']
  • confirmBeforeAdd: booleanfalse
  • confirmDefaultChoice: 'yes'|'no''yes'
  • warnOnBlacklistExcluded: booleantrue
  • Msimbo: tazama sources/background.jsinitializeOrMigrateSettings() na SCHEMA_VERSION.

Mtindo wa kazi wa msanidi (kuongeza mpangilio mpya)

  • Ongeza SCHEMA_VERSION ndani ya sources/background.js.
  • Ongeza ufunguo mpya + chaguo-msingi kwenye kitu (object) DEFAULTS katika initializeOrMigrateSettings().
  • Tumia kanuni ya “only-if-undefined” unapoanzisha chaguo-msingi; usiandike juu ya thamani zilizopo.
  • Kama mpangilio unaonekana kwa mtumiaji, uunganishe katika sources/options.js na ongeza misururu iliyolokeshwa.
  • Ongeza/rekebisha majaribio (tazama tests/background.settings.migration.test.js).

Vidokezo vya majaribio ya mikono

  • Iga usakinishaji mpya: safisha dir ya data ya kiendelezi au anza na profaili mpya.
  • Iga sasisho: weka settingsVersion kuwa 0 ndani ya storage.local kisha pakia upya; hakikisha thamani zilizopo hazijabadilika na kwamba funguo zinazokosekana tu ndizo zinaongezwa.

Utatuzi wa matatizo

  • Hakikisha Thunderbird ni 128 ESR au mpya zaidi
  • Tumia Konsoli ya Hitilafu kwa masuala ya wakati wa uendeshaji
  • Ikiwa mipangilio iliyohifadhiwa inaonekana kutotumika ipasavyo, anzisha upya Thunderbird na ujaribu tena. (Thunderbird inaweza kuweka hali kwenye kumbukumbu kati ya vikao; uanzishaji upya huhakikisha mipangilio mipya inapakiwa.)

CI na Ufunikaji

  • GitHub Actions (CI — Tests) huendesha vitest kwa viwango vya ufunikaji (85% mistari/kazi/matawi/taarifa). Ikiwa viwango havijatimizwa, kazi hushindwa.
  • Mtiririko wa kazi hupakia sehemu (artifact) coverage-html yenye ripoti ya HTML; ipakue kutoka ukurasa wa mzunguko (Actions → mzunguko wa mwisho → Artifacts).

Kuchangia

  • Tazama CONTRIBUTING.md kwa miongozo ya matawi/commits/PR
  • Dokezo: Unda profaili tofauti ya maendeleo ya Thunderbird kwa majaribio ili kuepuka kuathiri profaili yako ya kila siku.

Tafsiri

  • Kuendesha kazi kubwa za tafsiri “all → all” kunaweza kuwa polepole na kugharimu. Anza na sehemu ndogo (km., nyaraka chache na lugha 1–2), kisha pitia matokeo, halafu panua.

  • Sera ya kujaribu tena: kazi za tafsiri hufanya majaribio hadi mara 3 kwa backoff ya mfululizo wa nguvu kwenye hitilafu za API; tazama scripts/translate_web_docs_batch.js na scripts/translate_web_docs_sync.js.

Picha za skrini kwa nyaraka

  • Hifadhi picha chini ya website/static/img/.

  • Zirejelee kwenye MD/MDX kupitia useBaseUrl('/img/<filename>') ili njia zifanye kazi na baseUrl ya tovuti.

  • Baada ya kuongeza au kubadilisha majina ya picha chini ya website/static/img/, hakikisha marejeo yote bado yanatumia useBaseUrl('/img/…') na yanaonekana kwenye onyesho la ndani. Ikoni za kivinjari (Favicons)

  • favicon.ico ya ukubwa- mwingi hutengenezwa kiotomatiki katika njia zote za ujenzi (Make + skripti) kupitia website/scripts/build-favicon.mjs.

  • Hakuna hatua ya mkono inayohitajika; kusasisha icon-*.png kunatosha. Dokezo la ukaguzi

  • Weka id ya front‑matter bila kubadilishwa katika nyaraka zilizotafsiriwa; tafsiri tu title na sidebar_label zikisistizwa.

clean

  • Kusudi: ondoa mabaki ya ujenzi/prevyuu ya ndani.
  • Matumizi: make clean
  • Huondoa (ikiwa yapo):
  • tmp/
  • web-local-preview/
  • website/build/

commit

  • Kusudi: fomati, jaribu, sasisha changelog, fanya commit, na u-push.
  • Matumizi: make commit
  • Maelezo: huendesha Prettier (andika), make test, make test_i18n; huongeza changelog kunapokuwa na tofauti zilizopangwa; husukuma hadi origin/<branch>.

eslint

  • Kusudi: endesha ESLint kupitia usanidi tambarare.
  • Matumizi: make eslint

help

  • Kusudi: orodhesha malengo yote pamoja na maelezo ya mstari mmoja.
  • Matumizi: make help

lint

  • Kusudi: lint kwa MailExtension ukitumia web-ext.
  • Matumizi: make lint
  • Maelezo: hunakili kwa muda sources/manifest_LOCAL.jsonsources/manifest.json; hupuuza ZIP zilizojengwa; maonyo hayafeli mkondo.

menu

  • Kusudi: menyu shirikishi kuchagua lengo la Make na hoja za hiari.
  • Matumizi: endesha make bila hoja.
  • Maelezo: ikiwa whiptail haipatikani, menyu hurejea kwa make help.

pack

  • Kusudi: jenga ZIP za ATN na LOCAL (hutegemea lint).
  • Matumizi: make pack
  • Dokezo: ongeza matoleo katika sources/manifest_*.json zote mbili kabla ya kufungasha.

prettier

  • Kusudi: fomati repo mahali pake.
  • Matumizi: make prettier

prettier_check

  • Kusudi: thibitisha uumbizaji (bila kuandika).
  • Matumizi: make prettier_check

prettier_write

  • Kusudi: kisawe cha prettier.
  • Matumizi: make prettier_write

test

  • Kusudi: endesha Prettier (andika), ESLint, kisha Vitest (ufunikaji ukisakinishwa).
  • Matumizi: make test

test_i18n

  • Kusudi: majaribio yanayolenga i18n kwa misururu ya kiendelezi na nyaraka za tovuti.
  • Matumizi: make test_i18n
  • Huendesha: npm run test:i18n na npm run -s test:website-i18n.

translate_app / translation_app

  • Kusudi: tafsiri misururu ya UI ya kiendelezi kutoka EN kwenda lugha nyingine.
  • Matumizi: make translation_app OPTS="--locales all|de,fr"
  • Maelezo: huhifadhi muundo wa funguo na vishikizi; huandika kumbukumbu kwenye translation_app.log. Aina ya skripti: node scripts/translate_app.js --locales ….

translate_web_docs_batch / translate_web_docs_sync

  • Kusudi: tafsiri nyaraka za tovuti kutoka website/docs/*.md hadi website/i18n/<locale>/....
  • Inapendekezwa: translate_web_docs_batch (OpenAI Batch API)
    • Matumizi (bendera): make translate_web_docs_batch OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Nafasi za urithi bado zinakubalika: OPTS="<doc|all> <lang|all>"
  • Tabia: hujenga JSONL, hupakia, huchunguza kila sekunde 30, hupakua matokeo, huandika mafaili.
  • Kumbuka: kazi ya batch inaweza kuchukua hadi saa 24 kukamilika (kwa dirisha la batch la OpenAI). Konsoli huonyesha muda uliopita kwa kila uchunguzi.
  • Mazingira: OPENAI_API_KEY (inayohitajika), hiari OPENAI_MODEL, OPENAI_TEMPERATURE, OPENAI_BATCH_WINDOW (chaguo-msingi 24h), BATCH_POLL_INTERVAL_MS.
  • Urithi: translate_web_docs_sync
    • Matumizi (bendera): make translate_web_docs_sync OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Nafasi za urithi bado zinakubalika: OPTS="<doc|all> <lang|all>"
  • Tabia: maombi ya sawasawa kwa kila jozi (bila kujumlisha batch).
  • Maelezo: Maswali shirikishi yanapoulizwa wakati OPTS imeachwa. Njia zote mbili huhifadhi vizuizi vya msimbo/msimbo wa ndani na kuweka id ya front‑matter bila kubadilishwa; huandika kumbukumbu kwenye translation_web_batch.log (batch) au translation_web_sync.log (sawasawa).

translate_web_index / translation_web_index

  • Kusudi: tafsiri misururu ya UI ya tovuti (ukurasa wa nyumbani, nafasi ya urambazaji, sehemu ya chini) kutoka website/i18n/en/code.json kwenda lugha zote chini ya website/i18n/<locale>/code.json (ikitoa en).
  • Matumizi: make translate_web_index au make translate_web_index OPTS="--locales de,fr [--force]"
  • Mahitaji: hamisha OPENAI_API_KEY (hiari: OPENAI_MODEL=gpt-4o-mini).
  • Tabia: inathibitisha muundo wa JSON, huhifadhi vishikizi vya mabano ya curly, huzuia kubadilika kwa URL, na hujaribu tena kwa maoni kwenye makosa ya uthibitishaji.

web_build

  • Kusudi: jenga tovuti ya nyaraka hadi website/build.
  • Matumizi: make web_build OPTS="--locales en|de,en|all" (au weka BUILD_LOCALES="en de")
  • Ndani: node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …].
  • Vitegemezi: huendesha npm ci ndani ya website/ tu ikiwa website/node_modules/@docusaurus haipo.

web_build_linkcheck

  • Kusudi: ukaguzi wa viungo salama-bila-mtandao.
  • Matumizi: make web_build_linkcheck OPTS="--locales en|all"
  • Maelezo: hujenga hadi tmp_linkcheck_web_pages; huandika upya baseUrl ya GH Pages hadi /; huruka viungo vya HTTP(S) vya mbali.

web_build_local_preview

  • Kusudi: onyesho la ndani la gh‑pages lenye majaribio/ukaguzi wa viungo wa hiari.
  • Matumizi: make web_build_local_preview OPTS="--locales en|all [--no-test] [--no-link-check] [--dry-run] [--no-serve]"
  • Tabia: hujaribu seva ya onyesho la Node kwanza (scripts/preview-server.mjs, inasaidia /__stop), hurejea kwa python3 -m http.server; hutumikia kwenye 8080–8090; PID iko kwenye web-local-preview/.server.pid.

web_push_github

  • Kusudi: sukuma website/build hadi tawi la gh-pages.
  • Matumizi: make web_push_github

Dokezo: weka NPM=… kubadilisha meneja wa kifurushi unaotumiwa na Makefile (chaguo-msingi ni npm).