Maendeleo
Mwongozo wa Maendeleo
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 Vitestwebsite/: nyaraka za Docusaurus (zikiwa na i18n chini yawebsite/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.
| Lengo | Maelezo ya mstari mmoja |
|---|---|
clean | Ondoa mabaki ya ujenzi/prevyuu ya ndani (tmp/, web-local-preview/, website/build/). |
commit | Fomati, endesha majaribio (ikiwemo i18n), sasisha changelog, fanya commit na push. |
eslint | Endesha ESLint kupitia usanidi tambarare (npm run -s lint:eslint). |
help | Orodhesha malengo yote pamoja na maelezo ya mstari mmoja (yamepangwa). |
lint | web‑ext lint kwenye sources/ (manifest ya muda; hupuuza ZIP; si ya kufeli). |
menu | Menyu shirikishi kuchagua lengo na hoja za hiari. |
pack | Jenga ZIP za ATN na LOCAL (huendesha linter; huita hati ya kufunga). |
prettier | Fomati hazina mahali pake ndani ya repo (huandika mabadiliko). |
prettier_check | Prettier katika hali ya ukaguzi (bila uandishi); hufeli ikiwa inahitaji kurekebisha umbizo. |
prettier_write | Kisawe cha prettier. |
test | Prettier (andika), ESLint, kisha Vitest (ufunikaji ukisanidiwa). |
test_i18n | Majaribio ya i18n pekee: vishikizi/ulinganifu wa kiendelezi + ulinganifu wa tovuti. |
translate_app | Kisawe cha translation_app. |
translation_app | Tafsiri misururu ya UI ya programu kutoka sources/_locales/en/messages.json. |
translate_web_docs_batch | Tafsiri nyaraka za tovuti kupitia OpenAI Batch API (inapendekezwa). |
translate_web_docs_sync | Tafsiri nyaraka za tovuti kwa njia ya sawasawa (urithi, bila batch). |
translate_web_index | Kisawe cha translation_web_index. |
translation_web_index | Tafsiri UI ya ukurasa wa nyumbani/nafasi ya urambazaji/sehemu ya chini (website/i18n/en/code.json → .../<lang>/code.json). |
web_build | Jenga nyaraka hadi website/build (inasaidia --locales / BUILD_LOCALES). |
web_build_linkcheck | Ukaguzi wa viungo salama-bila-mtandao (huruka HTTP[S] za mbali). |
web_build_local_preview | Onyesho la ndani la gh‑pages; hutumikia kiotomatiki kwenye 8080–8090; majaribio/ukaguzi-wa-viungo wa hiari. |
web_push_github | Sukuma 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 pitishaOPTS="--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.jsonnasources/manifest_LOCAL.jsonzote 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; funguacoverage/index.htmlkwa 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 kwenyewebsite/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/auCtrl+Kkufungua kisanduku cha utafutaji.
Njia ya kuelekeza mchango upya
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.languagesdhidi ya lugha zilizosanidiwa; rejeshea lugha msingi - Huelekeza hadi:
en→/docs/donation- nyingine →
/<locale>/docs/donation - Hutumia
useBaseUrlkwa ushughulikiaji sahihi wa baseUrl - Hujumuisha meta refresh + kiungo
noscriptkama mbadala
Vidokezo vya Onyesho la Awali
- Acha onyesho la awali la Node kwa usafi: fungua
http://localhost:<port>/__stop(huchapishwa baada yaLocal server started). - Ikiwa picha hazipaki katika MDX/JSX, tumia
useBaseUrl('/img/...')kuheshimubaseUrlya 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(tumiaenkama 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.jsonuliyohariri. 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.idiwe thabiti ili kudumisha njia ya masasisho
Uendelevu wa Mipangilio
- Hifadhi: Mipangilio yote ya mtumiaji iko ndani ya
storage.localna 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 sasa1). - Funguo na chaguo-msingi:
blacklistPatterns: string[]→['*intern*', '*secret*', '*passwor*']confirmBeforeAdd: boolean→falseconfirmDefaultChoice: 'yes'|'no'→'yes'warnOnBlacklistExcluded: boolean→true- Msimbo: tazama
sources/background.js→initializeOrMigrateSettings()naSCHEMA_VERSION.
Mtindo wa kazi wa msanidi (kuongeza mpangilio mpya)
- Ongeza
SCHEMA_VERSIONndani yasources/background.js. - Ongeza ufunguo mpya + chaguo-msingi kwenye kitu (object)
DEFAULTSkatikainitializeOrMigrateSettings(). - Tumia kanuni ya “only-if-undefined” unapoanzisha chaguo-msingi; usiandike juu ya thamani zilizopo.
- Kama mpangilio unaonekana kwa mtumiaji, uunganishe katika
sources/options.jsna 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
settingsVersionkuwa0ndani yastorage.localkisha 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-htmlyenye 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.jsnascripts/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 nabaseUrlya tovuti. -
Baada ya kuongeza au kubadilisha majina ya picha chini ya
website/static/img/, hakikisha marejeo yote bado yanatumiauseBaseUrl('/img/…')na yanaonekana kwenye onyesho la ndani. Ikoni za kivinjari (Favicons) -
favicon.icoya ukubwa- mwingi hutengenezwa kiotomatiki katika njia zote za ujenzi (Make + skripti) kupitiawebsite/scripts/build-favicon.mjs. -
Hakuna hatua ya mkono inayohitajika; kusasisha
icon-*.pngkunatosha. Dokezo la ukaguzi -
Weka
idya front‑matter bila kubadilishwa katika nyaraka zilizotafsiriwa; tafsiri tutitlenasidebar_labelzikisistizwa.
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 hadiorigin/<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.json→sources/manifest.json; hupuuza ZIP zilizojengwa; maonyo hayafeli mkondo.
menu
- Kusudi: menyu shirikishi kuchagua lengo la Make na hoja za hiari.
- Matumizi: endesha
makebila hoja. - Maelezo: ikiwa
whiptailhaipatikani, menyu hurejea kwamake help.
pack
- Kusudi: jenga ZIP za ATN na LOCAL (hutegemea
lint). - Matumizi:
make pack - Dokezo: ongeza matoleo katika
sources/manifest_*.jsonzote 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:i18nnanpm 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/*.mdhadiwebsite/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>"
- Matumizi (bendera):
- 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), hiariOPENAI_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>"
- Matumizi (bendera):
- Tabia: maombi ya sawasawa kwa kila jozi (bila kujumlisha batch).
- Maelezo: Maswali shirikishi yanapoulizwa wakati
OPTSimeachwa. Njia zote mbili huhifadhi vizuizi vya msimbo/msimbo wa ndani na kuwekaidya front‑matter bila kubadilishwa; huandika kumbukumbu kwenyetranslation_web_batch.log(batch) autranslation_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.jsonkwenda lugha zote chini yawebsite/i18n/<locale>/code.json(ikitoaen). - Matumizi:
make translate_web_indexaumake 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 wekaBUILD_LOCALES="en de") - Ndani:
node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …]. - Vitegemezi: huendesha
npm cindani yawebsite/tu ikiwawebsite/node_modules/@docusaurushaipo.
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 upyabaseUrlya 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 kwapython3 -m http.server; hutumikia kwenye 8080–8090; PID iko kwenyeweb-local-preview/.server.pid.
web_push_github
- Kusudi: sukuma
website/buildhadi tawi lagh-pages. - Matumizi:
make web_push_github
Dokezo: weka NPM=… kubadilisha meneja wa kifurushi unaotumiwa na Makefile (chaguo-msingi ni npm).