Разработка
Ръководство за разработка
Редактирайте само английската версия; преводите се разпространяват
Актуализирайте документацията само под website/docs (английски). Преводите под website/i18n/<locale>/… се генерират и не бива да се редактират ръчно. Използвайте задачите за превод (напр. make translate_web_docs_batch) за обновяване на локализираното съдържание.
Предварителни изисквания
- Node.js 22+ и npm (тествано с Node 22)
- Thunderbird 128 ESR или по-нова (за ръчно тестване)
Структура на проекта (на високо ниво)
- Главна директория: скрипт за пакетиране
distribution_zip_packer.sh, документация, екранни снимки sources/: основен код на добавката (background, UI за опции/изскачащ прозорец, манифести, икони)tests/: тестов пакет Vitestwebsite/: документация на Docusaurus (с i18n подwebsite/i18n/de/...)
Инсталиране и инструменти
- Инсталиране на зависимостите в корена:
npm ci - Документация (по избор):
cd website && npm ci - Преглед на целите:
make help
Жива разработка (web‑ext run)
- Бърз цикъл във Firefox Desktop (само бързи UI проверки):
npx web-ext run --source-dir sources --target=firefox-desktop- Стартиране в Thunderbird (предпочитано за MailExtensions):
npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"- Съвети:
- Дръжте отворена конзолата за грешки на Thunderbird (Tools → Developer Tools → Error Console).
- Страниците с MV3 събития се спират при бездействие; презаредете добавката след промени в кода или оставете web‑ext да презарежда автоматично.
- Някои поведения, специфични за Firefox, се различават; винаги проверявайте в Thunderbird за съвместимост на API.
- Пътища до изпълнимия файл на Thunderbird (примери):
- Linux:
thunderbird(напр./usr/bin/thunderbird) - macOS:
/Applications/Thunderbird.app/Contents/MacOS/thunderbird - Windows:
"C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe" - Изолация на профила: използвайте отделен профил на Thunderbird за разработка, за да не влияете на ежедневната си среда.
Цели в Make (по азбучен ред)
Makefile стандартизира обичайните процеси на разработка. Стартирайте make help по всяко време за едноредово обобщение на всяка цел.
Съвет: пускането на make без цел отваря опростено меню Whiptail за избор на цел.
| Цел | Едноредово описание |
|---|---|
clean | Према хване на локални артефакти от build/preview (tmp/, web-local-preview/, website/build/). |
commit | Форматиране, пускане на тестове (вкл. i18n), обновяване на дневника на промените, commit и push. |
eslint | Стартиране на ESLint чрез flat конфигурация (npm run -s lint:eslint). |
help | Списък на всички цели с едноредови описания (сортирани). |
lint | web‑ext lint върху sources/ (временен manifest; игнорира ZIP файлове; нефатално). |
menu | Интерактивно меню за избор на цел и незадължителни аргументи. |
pack | Изграждане на ATN и LOCAL ZIP файлове (пуска linter; извиква скрипта за пакетиране). |
prettier | Форматиране на хранилището на място (записва промени). |
prettier_check | Prettier в режим на проверка (без запис); проваля се, ако е нужно преформатиране. |
prettier_write | Псевдоним на prettier. |
test | Prettier (запис), ESLint, после Vitest (покритие, ако е конф игурирано). |
test_i18n | Само i18n тестове: плейсхолдъри/паритет на добавката + паритет на уебсайта. |
translate_app | Псевдоним на translation_app. |
translation_app | Превеждане на UI низове на приложението от sources/_locales/en/messages.json. |
translate_web_docs_batch | Превеждане на уебсайт документацията чрез OpenAI Batch API (препоръчително). |
translate_web_docs_sync | Превеждане на уебсайт документацията синхронно (наследено, небатчово). |
translate_web_index | Псевдоним на translation_web_index. |
translation_web_index | Превеждане на UI на начална страница/навигация/долен колонтитул (website/i18n/en/code.json → .../<lang>/code.json). |
web_build | Изграждане на документацията към website/build (поддържа --locales / BUILD_LOCALES). |
web_build_linkcheck | Проверка на връзки, безопасна офлайн (пропуска отдалечени HTTP[S]). |
web_build_local_preview | Локален преглед за gh‑pages; автоматично обслужване на 8080–8090; по избор тестове/проверка на връзки. |
web_push_github | Изпращане на website/build към клона gh-pages. |
Синтаксис за опциите
- Използвайте
make <command> OPTS="…"за подаване на опции (препоръчват се кавички). Всяка цел по-долу показва пример за употреба.
--
Съвети за изграждане по локали
- Изграждане на подмножество от локали: задайте
BUILD_LOCALES="en de"или подайтеOPTS="--locales en,de"към уеб целите. - Преглед на конкретна локал:
http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.
Сглобяване и пакетиране
- Създаване на ZIP файлове:
make pack - Създава ATN и LOCAL ZIP файлове в корена на хранилището (не редактирайте артефактите ръчно)
- Съвет: обновете версията и в
sources/manifest_ATN.json, и вsources/manifest_LOCAL.jsonпреди пакетиране - Ръчна инсталация (dev): Thunderbird → Tools → Add‑ons and Themes → gear → Install Add‑on From File… → изберете създадения ZIP
Тестване
- Пълен набор:
make test(Vitest) - Покритие (по избор):
npm i -D @vitest/coverage-v8- Стартирайте
make test; отворетеcoverage/index.htmlза HTML отчет - Само i18n:
make test_i18n(UI ключове/плейсхолдъри/заглавия + паритет на уебсайта по локал и по документ с проверки за id/title/sidebar_label)
Отстраняване на грешки и логове
- Конзола за грешки: Tools → Developer Tools → Error Console
- Превключване на подробни логове по време на изпълнение:
- Включване:
messenger.storage.local.set({ debug: true }) - Изключване:
messenger.storage.local.set({ debug: false }) - Логовете се появяват при създаване/изпращане на отговори
Документация (уебсайт)
- Dev сървър:
cd website && npm run start - Изграждане на статичен сайт:
cd website && npm run build - Еквиваленти в Make (по азбучен ред):
make web_build,make web_build_linkcheck,make web_build_local_preview,make web_push_github - Примери за употреба:
- Само EN, без тестове/проверка на връзки, без push:
make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run" - Всички локали, с тестове/проверка на връзки, после push:
make web_build_local_preview && make web_push_github - Преди публикуване стартирайте офлайн-безопасната проверка на връзки:
make web_build_linkcheck. - i18n: английският е в
website/docs/*.md; немските преводи – вwebsite/i18n/de/docusaurus-plugin-content-docs/current/*.md - Търсене: Ако променливите на средата за Algolia DocSearch са зададени в CI (
DOCSEARCH_APP_ID,DOCSEARCH_API_KEY,DOCSEARCH_INDEX_NAME), сайтът използва търсене на Algolia; иначе преминава към локално търсене. На началната страница натиснете/илиCtrl+Kза отваряне на полето за търсене.
Пренасочване за дарения
website/src/pages/donate.js- Маршрут:
/donate(и/<locale>/donate) - Поведение:
- Ако текущият маршрут има локал (напр.
/de/donate), използвайте него - Иначе изберете най-доброто съвпадение от
navigator.languagesспрямо конфигурираните локали; при неуспех – към локала по подразбиране - Пренасочва към:
en→/docs/donation- други →
/<locale>/docs/donation - Използва
useBaseUrlза коректна обработка на baseUrl - Включва meta refresh + връзка
noscriptкато резервен вариант
Съвети з а преглед
- Спрете прегледа на Node коректно: отворете
http://localhost:<port>/__stop(отпечатва се следLocal server started). - Ако изображенията не се зареждат в MDX/JSX, използвайте
useBaseUrl('/img/...'), за да се съобрази съсbaseUrlна сайта. - Прегледът стартира първо; проверката на връзки се пуска след това и не блокира (счупени външни връзки няма да спрат прегледа).
- Примерен URL за преглед:
http://localhost:<port>/Thunderbird-Reply-with-Attachments/(отпечатва се след “Local server started”). - Външни връзки при проверка: Някои външни сайтове (напр. addons.thunderbird.net) блокират автоматизирани ботове и може да показват 403 при проверките. Прегледът все пак стартира; тези съобщения може да се игнорират безопасно.
Превод на уебсайта
Какво можете да превеждате
- Само UI на сайта: начална стран ица, навигация, долен колонтитул и други UI низове. Съдържанието на документацията засега остава само на английски.
Къде да редактирате
- Редактирайте
website/i18n/<locale>/code.json(използвайтеenкато ориентир). Оставете плейсхолдърите като{year},{slash},{ctrl},{k},{code1}непроменени.
Генериране или опресняване на файлове
- Създаване на липсващи шаблони за всички локали:
npm --prefix website run i18n:stubs - Презапис на шаблони от английски (след добавяне на нови низове):
npm --prefix website run i18n:stubs:force - Алтернатива за една локал:
npx --prefix website docusaurus write-translations --locale <locale>
Превеждане на UI низове за начална/навигация/колонтитул (OpenAI)
- Задайте идентификационните данни веднъж (shell или .env):
export OPENAI_API_KEY=sk-...- По избор:
export OPENAI_MODEL=gpt-4o-mini - Еднократно (всички локали, без en):
make translate_web_index - Ограничаване до конкретни локали:
make translate_web_index OPTS="--locales de,fr" - Презапис на съществуващи стойности:
make translate_web_index OPTS="--force"
Валидиране и повто рни опити
- Скриптът за превод валидира формата на JSON, запазва плейсхолдърите в извити скоби и гарантира, че URL адресите са непроменени.
- При неуспех на валидирането опитва отново с обратна връзка до 2 пъти, преди да запази съществуващите стойности.
Преглед на вашата локал
- Dev сървър:
npm --prefix website run start - Посетете
http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/
Изпращане
- Отворете PR с редактираните файл(ове)
code.json. Дръжте промените фокусирани и при възможност включете бърз екранен кадър.
Съвети за сигурност и конфигурация
- Не комитвайте
sources/manifest.json(създава се временно при build) - Поддържайте
browser_specific_settings.gecko.idстабилен, за да запазите канала за обновления