การพัฒนา
Development Guide
อัปเดตเอกสาร เฉพาะ ภายใต้ website/docs (ภาษาอังกฤษ) การแปลภายใต้ website/i18n/<locale>/… ถูกสร้างขึ้นและไม่ควรแก้ไขด้วยตนเอง ใช้ภารกิจการแปล (เช่น make translate_web_docs_batch) เพื่อต่ออายุเนื้อหาท้องถิ่น
Prerequisites
- Node.js 22+ และ npm (ทดสอบด้วย Node 22)
 - Thunderbird 128 ESR หรือใหม่กว่า (สำหรับการทดสอบด้วยมือ)
 
Project Layout (high‑level)
- Root: สคริปต์การบรรจุ 
distribution_zip_packer.sh, เอกสาร, ภาพหน้าจอ sources/: โค้ดส่วนเสริมหลัก (แบ็คกราวด์, UI ตัวเลือก/ป๊อปอัป, แมนิเฟสต์, ไอคอน)tests/: ชุด Vitestwebsite/: เอกสาร Docusaurus (มี i18n ภายใต้website/i18n/de/...)
Install & Tooling
- ติดตั้ง dependencies ราก: 
npm ci - เอกสาร (ไม่บังคับ): 
cd website && npm ci - ค้นเป้าหมาย: 
make help 
Live Dev (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 (เครื่องมือ → เครื่องมือพัฒนา → คอนโซลข้อผิดพลาด)
 - หน้าเหตุการณ์ 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 Targets (Alphabetical)
Makefile จะทำให้กระบวนการพัฒนาที่เ  ป็นมาตรฐานสอดคล้องกัน รัน make help ทุกครั้งเพื่อเรียกดูสรุปหนึ่งบรรทัดของทุกเป้าหมาย
เคล็ดลับ: การรัน make โดยไม่มีเป้าหมายจะเปิดเมนู Whiptail ง่ายๆ เพื่อเลือกเป้าหมาย
| Target | One‑line description | 
|---|---|
clean | ลบอาร์ติแฟกต์การสร้าง/ดูตัวอย่างในท้องถิ่น (tmp/, web-local-preview/, website/build/) | 
commit | ฟอร์แมต, รันการทดสอบ (รวมถึง i18n), อัปเดต changelog, commit & push | 
eslint | รัน ESLint ผ่าน flat config (npm run -s lint:eslint) | 
help | แสดงรายการทั้งหมดของเป้าหมายพร้อมเอกสารบรรทัดเดียว (เรียงลำดับ) | 
lint | web‑ext lint บน sources/ (แมนิเฟสต์ชั่วคราว; ไม่สนใจ ZIPs; ไม่ร้ายแรง) | 
menu | เมนูเชิงโต้ตอบเพื่เลือกเป้าหมายและอาร์กิวเมนต์ที่ไม่บังคับ | 
pack | สร้าง ATN & LOCAL ZIPs (รัน linter; เรียกใช้สคริปต์ packer) | 
prettier | ฟอร์แมตที่จัดเก็บในสถานที่ (เขียนการเปลี่ยนแปลง) | 
prettier_check | Prettier ในโหมดตรวจสอบ (ไม่มีการเขียน); จะล้มเหลวหากต้องการการฟอร์แมตใหม่ | 
prettier_write | อัลลิอาสสำหรับ prettier. | 
test | Prettier (เขียน), ESLint, แล้ว Vitest (coverage หากตั้งค่าแล้ว) | 
test_i18n | การทดสอบเฉพาะ i18n: placeholders/parity ของส่วนเสริม + ความสอดคล้องต่อเอกสารต่อล่ะภาษา | 
translate_app | อัลลิอาสสำหรับ translation_app. | 
translation_app | แปลสตริง UI ของแอปจาก sources/_locales/en/messages.json. | 
translate_web_docs_batch | แปลเอกสารเว็บไซต์ผ่าน OpenAI Batch API (ที่แนะนำ) | 
translate_web_docs_sync | แปลเอกสารเว็บไซต์แบบซิงโครนัส (legacy, ไม่ใช่แบบแบตช์) | 
translate_web_index | อัลลิอาสสำหรับ translation_web_index. | 
translation_web_index | แปล UI หน้าแรก/navbar/footer (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 branch. | 
ไวยากรณ์สำหรับตัวเลือก
- ใช้ 
make <command> OPTS="…"เพื่อส่งตัวเลือก (แนะนำให้ใช้เครื่องหมายคำพูด) แต่ละเป้าหมายด้านล่างจะมีตัวอย่างการใช้งาน 
--
Locale build tips
- บัญชี subsets ของ locales: ตั้งค่า 
BUILD_LOCALES="en de"หรือส่งOPTS="--locales en,de"ไปยังเป้าหมายเว็บ - ดูตัวอย่าง locale เฉพาะ: 
http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/. 
Build & Package
- สร้าง ZIPs: 
make pack - ผลิต ATN และ LOCAL ZIPs ในโฟลเดอร์รูตของ repo (อย่าแก้ไขอาร์ติแฟกต์ด้วยมือ)
 - เคล็ดลับ: อัปเดตเวอร์ชันในทั้งสอง 
sources/manifest_ATN.jsonและsources/manifest_LOCAL.jsonก่อนบรรจุ - การติดตั้งด้วยตนเอง (dev): Thunderbird → เครื่องมือ → ส่วนเสริมและธีม → เกียร์ → ติดตั้งส่วนเสริมจากไฟล์… → เลือก ZIP ที่สร้างแล้ว
 
Test
- ชุดเต็ม: 
make test(Vitest) - Coverage (ไม่บังคับ):
 npm i -D @vitest/coverage-v8- รัน 
make test; เปิดcoverage/index.htmlสำหรับรายงาน HTML - i18n เท่านั้น: 
make test_i18n(คีย์ UI/placeholders/titles + ความสอดคล้องต่อเอกสารต่อภาษา) 
Debugging & Logs
- คอนโซลข้อผิดพลาด: เครื่องมือ → เครื่องมือพัฒนา → คอนโซลข้อผิดพลาด
 - เปิด/ปิดบันทึกอย่างละเอียดในเวลาทำงาน:
 - เปิดใช้งาน: 
messenger.storage.local.set({ debug: true }) - ปิดใช้งาน: 
messenger.storage.local.set({ debug: false }) - บันทึกปรากฏขณะแค่นำ/ส่งคำตอบ
 
Docs (website)
- Dev server: 
cd website && npm run start - สร้างเว็บไซต์สถิติ: 
cd website && npm run build - เปรียบเทียบการทำงาน (ตามตัวอักษร): 
make web_build,make web_build_linkcheck,make web_build_local_preview,make web_push_github - ตัวอย่างการใช้งาน:
 - ภาษาอังกฤษเท่านั้น, ข้ามการทดสอบ/ตรวจสอบลิงก์, ไม่ดัน: 
make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run" - ทุกภาษา, มีการทดสอบ/ตรวจสอบลิงก์, แล้วดัน: 
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 - ค้นหา: หากตั้งค่า environment variables ของ Algolia DocSearch ใน CI (
DOCSEARCH_APP_ID,DOCSEARCH_API_KEY,DOCSEARCH_INDEX_NAME) เว็บไซต์จะใช้การค้นหา Algolia; มิฉะนั้นจะกลับไปใช้การค้นหาในท้องถิ่น ในหน้าแรก, กด/หรือCtrl+Kเพื่อเปิดช่องค้นหา 
Donate redirect route
website/src/pages/donate.js- เส้นทาง: 
/donate(และ/<locale>/donate) - พฤติกรรม:
 - หากเส้นทางปัจจุบันมี locale (เช่น, 
/de/donate) ให้ใช้มัน - มิฉะนั้น, เลือกสิ่งที่ตรงกันที่ดีที่สุดจาก 
navigator.languagesกับ locales ที่ตั้งค่า; หลีกเลี่ยงไปที่ locale ค่าเริ่มต้น - ทำการเปลี่ยนเส้นทางไปที่:
 en→/docs/donation- อื่นๆ → 
/<locale>/docs/donation - ใช้ 
useBaseUrlสำหรับการจัดการ baseUrl อย่างถูกต้อง - รวมการรีเฟรชเมต้า + 
noscriptลิงก์เป็นทางเลือก 
Preview Tips
- หยุดการดูตัวอย่าง Node อย่างสะอาด: เปิด 
http://localhost:<port>/__stop(แสดงหลังLocal server started) - หากรูปภาพไม่โหลดใน MDX/JSX, ใช้ 
useBaseUrl('/img/...')เพื่อเคารพbaseUrlของไซต์ - การดูตัวอย่างจะเริ่มขึ้นก่อน; การตรวจสอบลิงก์จะดำเนินการต่อจากนั้นและไม่ขัดขวาง (ลิงก์ภายนอกที่ชำรุดจะไม่หยุดการดูตัวอย่าง)
 - ตัวอย่าง URL สำหรับการดูตัวอย่าง: 
http://localhost:<port>/Thunderbird-Reply-with-Attachments/(แสดงหลัง “เซิฟเวอร์ท้องถิ่นเริ่มทำงาน”) - ลิงก์ภายนอกในการตรวจสอบลิงก์: บางไซต์ภายนอก (เช่น, addons.thunderbird.net) จะบล็อก web crawlers โดยอัตโนมัติและอาจแสดง 403 ในการตรวจสอบลิงก์ การดูตัวอย่างยังคงเริ่มต้น; สิ่งเหล่านี้สาม ารถละเลยได้อย่างปลอดภัย
 
Translate the Website
สิ่งที่คุณสามารถแปล
- UI ของเว็บไซต์เท่านั้น: หน้าแรก, navbar, footer, และสตริง UI อื่นๆ เนื้อหาของเอกสารยังคงเป็นภาษาอังกฤษสำหรับตอนนี้
 
ที่ไหนในการแก้ไข
- แก้ไข 
website/i18n/<locale>/code.json(ใช้enเป็นการอ้างอิง) เก็บ placeholder เช่น{year},{slash},{ctrl},{k},{code1}ไว้ไม่เปลี่ยนแปลง 
สร้างหรือรีเฟรชไฟล์
- สร้าง stub ที่หายไปสำหรับทุก locale: 
npm --prefix website run i18n:stubs - เขียนทับ stub จากภาษาอังกฤษ (หลังจากเพิ่มสตริงใหม่): 
npm --prefix website run i18n:stubs:force - ทางเลือกสำหรับ locale เดียว: 
npx --prefix website docusaurus write-translations --locale <locale> 
แปลสตริง UI ของหน้าแรก/navbar/footer (OpenAI)
- ตั้งค่าข้อมูลประจำตัวครั้งเดียว (shell หรือ .env):
 export OPENAI_API_KEY=sk-...- ไม่บังคับ: 
export OPENAI_MODEL=gpt-4o-mini - One‑shot (ทุก locale, ข้าม en): 
make translate_web_index - จำกัดเฉพาะ locales เฉพาะ: 
make translate_web_index OPTS="--locales de,fr" - เขียนทับค่าเดิม: 
make translate_web_index OPTS="--force" 
การตรวจสอบและการลองซ้ำ
- สคริปการแปลจะตรวจสอบรูปร่างของ JSON, รักษา placeholder ที่มีวงเล็บปีกกาและมั่นใจว่า URL ไม่เปลี่ยนแปลง
 - หากการตรวจสอบล้มเหลว, จะลองอีกครั้งพร้อมกับข้อเสนอแนะแม็กซิมัม 2 ครั้งก่อนที่จะรักษาค่าที่มีอยู่
 
ดูตัวอย่าง locale ของคุณ
- Dev server: 
npm --prefix website run start - เยี่ยมชม 
http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/ 
การส่ง
- เปิด PR กับไฟล์ 
code.jsonที่แก้ไขแล้ว เก็บการเปลี่ยนแปลงให้อยู่ในขอบเขตและรวมภาพหน้าจออย่างรวดเร็วเมื่อทำได้ 
Security & Configuration Tips
- อย่าคอมมิท 
sources/manifest.json(สร้างชั่วคราวโ ดยการสร้าง) - เก็บ 
browser_specific_settings.gecko.idให้อยู่ในสภาพที่เสถียรเพื่อรักษาช่องทางการอัปเดต 
Settings Persistence
- Storage: การตั้งค่าผู้ใช้ทั้งหมดอยู่ใน 
storage.localและคงอยู่ในระหว่างการอัปเดตส่วนเสริม - ติดตั้ง: ค่าเริ่มต้นจะถูกนำไปใช้เฉพาะเมื่อคีย์หายไปจริง (undefined)
 - อัปเดต: การย้ายข้อมูลจะเติมเฉพาะคีย์ที่หายไป; ค่าที่มีอยู่จะไม่มีวันถูกเขียนทับ
 - Schema marker: 
settingsVersion(ปัจจุบัน1) - คีย์และค่าเริ่มต้น:
 blacklistPatterns: string[]→['*intern*', '*secret*', '*passwor*']confirmBeforeAdd: boolean→falseconfirmDefaultChoice: 'yes'|'no'→'yes'warnOnBlacklistExcluded: boolean→true- โค้ด: ดู 
sources/background.js→initializeOrMigrateSettings()และSCHEMA_VERSION. 
การทำงานของ dev (การเพิ่มการตั้งค่าใหม่)
- เพิ่ม 
SCHEMA_VERSIONในsources/background.js. - เพิ่มคีย์ใหม่ + ค่าเริ่มต้นในอ็อบเจ็กต์ 
DEFAULTSในinitializeOrMigrateSettings(). - ใช้กฎ "only-if-undefined" เมื่อปักค่าเริ่มต้น; อย่าเขียนทับค่าที่มีอยู่
 - หากการตั้งค่าเป็นภาพที่มองเห็นของผู้ใช้, เชื่อมโยงมันใน 
sources/options.jsและเพิ่มสตริงที่แปลแล้ว - เพิ่ม/ปรับการทดสอบ (ดู 
tests/background.settings.migration.test.js). 
เคล็ดลับการทดสอบด้วยตนเอง
- จำลองการติดตั้งใหม่: ล้างไดเร็กทอรีข้อมูลของส่วนขยายหรือเริ่มด้วยโปรไฟล์ใหม่
 - จำลองการอัปเดต: ตั้งค่า 
settingsVersionเป็น0ในstorage.localและโหลดใหม่; ยืนยันว่าค่าที่มีอยู่ยังคงไม่เปลี่ยนแปลงและเฉพาะคีย์ที่หายไปถูกเพิ่ม 
Troubleshooting
- ตรวจสอบว่า Thunderbird เป็น 128 ESR หรือใหม่กว่า
 - ใช้คอนโซลข้อผิดพลาดสำหรับปัญหาขณะทำงาน
 - หากการตั้งค่าที่จัดเก็บดูเหมือนจะไม่สามารถปรับใช้ได้อย่างเหมาะสม, เริ่มต้นใหม่ Thunderbird และลองอีกครั้ง (Thunderbird อาจเก็บสถานะข้ามเซสชัน; การเริ่มต้นใหม่จะทำให้การตั้งค่าใหม่ถูกโหลด)
 
CI & Coverage
- GitHub Actions (
CI — Tests) รัน vitest พร้อมเกณฑ์การครอบคลุม (85% lines/functions/branches/statements) หากไม่ถึงเกณฑ์ งานจะล้มเหลว - กระบวนการทำงานจะอัปโหลดอาร์ติแฟกต์ 
coverage-htmlพร้อมรายงาน HTML; ดาวน์โหลดได้จากหน้าการทำงาน (Actions → การทำงานล่าสุด → อาร์ติแฟกต์) 
Contributing
- ดู CONTRIBUTING.md สำหรับแนวทางสาขา/การคอมมิท/PR
 - เคล็ดลับ: สร้างโปรไฟล์การพัฒนา Thunderbird แยกสำหรับการทดสอบเพื่อหลีกเลี่ยงผลกระทบต่อโปรไฟล์ประจำวันของคุณ
 
Translations
- การรันงานแปลขนาดใหญ่ “ทั้งหมด → ทั้งหมด” อาจช้าและมีค่าใช้จ่าย เริ่มต้นด้วยชุดย่อย (เช่น เอกสารไม่กี่ฉบับและ 1–2 locale), ตรวจสอบผลลัพธ์, จากนั้นขยาย
 
- นโยบายการลองซ้ำ: งานแปลดำเนินการสูงสุด 3 ครั้งที่มีการลองซ้ำแบบ exponential backoff ในกรณีเกิดข้อผิดพลาดจาก API; ดู 
scripts/translate_web_docs_batch.jsและscripts/translate_web_docs_sync.js. 
ภาพหน้าจอสำหรับเอกสาร
- 
เก็บภาพไว้ใน
website/static/img/. - 
อ้างอิงพวกเขาใน MD/MDX ผ่าน
useBaseUrl('/img/<filename>')เพื่อให้เส้นทางทำงานร่วมกับbaseUrlของไซต์ - 
หลังจากเพิ่มหรือเปลี่ยนชื่อภาพใน
website/static/img/, ยืนยันว่าการอ้างอิงทั้งหมดยังคงใช้useBaseUrl('/img/…')และแสดงในดูตัวอย่างในท้องถิ่น Favicons - 
favicon.icoขนาดหลายขนาดจะถูกสร้างโดยอัตโนมัติในทุกเส้นทางการสร้าง (Make + สคริปต์) ผ่านwebsite/scripts/build-favicon.mjs. - 
ไม่ต้องดำเนินการด้วยมือ; อัปเดต
icon-*.pngก็เพียงพอ เคล็ดลับการตรวจสอบ - 
ให้เก็บ front‑matter
idไม่เปลี่ยนแปลงในเอกสารที่แปล; แปลเฉพาะtitleและsidebar_labelเมื่อมีอยู่. 
clean
- วัตถุประสงค์: ลบอาร์ติแฟกต์การสร้าง/ดูตัวอย่างในท้องถิ่น
 - การใช้งาน: 
make clean - ลบ (หากมีอยู่):
 tmp/web-local-preview/website/build/
commit
- วัตถุประสงค์: ฟอร์แมต, ทดสอบ, อัปเดต changelog, commit, และ push
 - การใช้งาน: 
make commit - รายละเอียด: รัน Prettier (เขียน), 
make test,make test_i18n; แนบ changelog เมื่อมีการเปลี่ยนแปลงที่ถูกจัดเตรียมไว้; ดันไปที่origin/<branch>. 
eslint
- วัตถุประสงค์: รัน ESLint ผ่าน flat config
 - การใช้งาน: 
make eslint 
help
- วัตถุประสงค์: แสดงรายการทั้งหมดของเป้าหมายพร้อมเอกสารบรรทัดเดียว
 - การใช้งาน: 
make help 
lint
- วัตถุประสงค์: lint MailExtension โดยใช้ 
web-ext - การใช้งาน: 
make lint - หมายเหตุ: สำเนาชั่วคราว 
sources/manifest_LOCAL.json→sources/manifest.json; ไม่สนใจ ZIPs ที่สร้างแล้ว; คำเตือนจะไม่ทำให้สายงานล้มเหลว 
menu
- วัตถุประสงค์: เมนูเชิงโต้ตอบในการเลือก Make target และอาร์กิวเมนต์ที่ไม่บังคับ
 - การใช้งาน: รัน 
makeโดยไม่มีอาร์กิวเมนต์ - หมายเหตุ: หาก 
whiptailไม่พร้อมใช้งาน, เมนูจะกลับไปที่make help 
pack
- วัตถุประสงค์: สร้าง ATN และ LOCAL ZIPs (ขึ้นอยู่กับ 
lint) - การใช้งาน: 
make pack - เคล็ดลับ: เพิ่มเวอร์ชันในทั้งสอง 
sources/manifest_*.jsonก่อนบรรจุ 
prettier
- วัตถุประสงค์: ฟอร์แมตที่จัดเก็บในสถานที่
 - การใช้งาน: 
make prettier 
prettier_check
- วัตถุประสงค์: ตรวจสอบการฟอร์แมต (ไม่มีการเขียน)
 - การใช้งาน: 
make prettier_check 
prettier_write
- วัตถุประสงค์: อัลลิอาสสำหรับ 
prettier. - การใช้งาน: 
make prettier_write 
test
- วัตถุประสงค์: รัน Prettier (เขียน), ESLint, แล้ว Vitest (coverage หากติดตั้ง)
 - การใช้งาน: 
make test 
test_i18n
- วัตถุประสงค์: การทดสอบที่เน้น i18n สำหรับสตริงของ add‑on และเอกสารเว็บไซต์
 - การใช้งาน: 
make test_i18n - รัน: 
npm run test:i18nและnpm run -s test:website-i18n. 
translate_app / translation_app
- วัตถุประสงค์: แปลสตริง UI ของส่วนเสริมจาก EN ไปยังภาษาต่างๆ
 - การใช้งาน: 
make translation_app OPTS="--locales all|de,fr" - หมายเหตุ: รักษาโครงสร้างคีย์และ placeholder; บันทึกไปที่ 
translation_app.log. รูปแบบสคริปต์:node scripts/translate_app.js --locales …. 
translate_web_docs_batch / translate_web_docs_sync
- วัตถุประสงค์: แปลเอกสารเว็บไซต์จาก 
website/docs/*.mdเป็นwebsite/i18n/<locale>/.... - ที่แนะนำ: 
translate_web_docs_batch(OpenAI Batch API)- การใช้งาน (ธง): 
make translate_web_docs_batch OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>" - เลขตำแหน่ง legacy ยังคงถูกยอมรับ: 
OPTS="<doc|all> <lang|all>" 
 - การใช้งาน (ธง): 
 - พฤติกรรม: สร้าง JSONL, อัปโหลด, สุ่มทุก 30 วินาที, ดาวน์โหลดผลลัพธ์, เขียนไฟล์
 - หมายเหตุ: งานแบตช์อาจใช้เวลาถึง 24 ชั่วโมงในการทำให้เสร็จสิ้น (ขึ้นอยู่กับเวลาของแบตช์ของ OpenAI) คอนโซลจะแสดงระยะเวลาที่ผ่านไปในแต่ละการสุ่ม
 - Env: 
OPENAI_API_KEY(จำเป็น),OPENAI_MODELที่เป็นออปชั่น,OPENAI_TEMPERATURE,OPENAI_BATCH_WINDOW(ค่าเริ่มต้น 24 ชั่วโมง),BATCH_POLL_INTERVAL_MS. - Legacy: 
translate_web_docs_sync- การใช้งาน (ธง): 
make translate_web_docs_sync OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>" - เลขตำแหน่ง legacy ยังคงถูกยอมรับ: 
OPTS="<doc|all> <lang|all>" 
 - การใช้งาน (ธง): 
 - พฤติกรรม: การร้องขอแบบซิงโครนัสต่อคู่ (ไม่มีการรวมแบตช์)
 - หมายเหตุ: การแ จ้งเตือนเชิงโต้ตอบเมื่อ 
OPTSถูกละเว้น โหมดทั้งสองจะรักษาโค้ดบล็อก/โค้ดแบบอินไลน์และเก็บidไว้ไม่เปลี่ยนแปลง; บันทึกไปที่translation_web_batch.log(แบตช์) หรือtranslation_web_sync.log(ซิงค์). 
translate_web_index / translation_web_index
- วัตถุประสงค์: แปลสตริง UI ของเว็บไซต์ (หน้าแรก, navbar, footer) จาก 
website/i18n/en/code.jsonไปยังทุก locale ภายใต้website/i18n/<locale>/code.json(ยกเว้นen) - การใช้งาน: 
make translate_web_indexหรือmake translate_web_index OPTS="--locales de,fr [--force]" - ความต้องการ: ส่งออก 
OPENAI_API_KEY(ไม่บังคับ:OPENAI_MODEL=gpt-4o-mini) - พฤติกรรม: ตรวจสอบโครงสร้าง JSON, รักษา placeholder วงเล็บปีกกา, รักษา URL ไม่เปลี่ยนแปลง, และทำการลองใหม่ด้วยข้อเสนอแนบเมื่อเกิดข้อผิดพลาดในการตรวจสอบ
 
web_build
- วัตถุประสงค์: สร้างเว็บไซต์เอกสารไปที่ 
website/build. - การใช้งาน: 
make web_build OPTS="--locales en|de,en|all"(หรือตั้งค่าBUILD_LOCALES="en de") - ภายใน: 
node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …]. - Deps: รัน 
npm ciในwebsite/เท่านั้นถ้าwebsite/node_modules/@docusaurusหายไป 
web_build_linkcheck
- วัตถุประสงค์: ตรวจสอบลิงก์ที่ปลอดภัยในออฟไลน์
 - การใช้งาน: 
make web_build_linkcheck OPTS="--locales en|all" - หมายเหตุ: สร้างไปที่ 
tmp_linkcheck_web_pages; เขียนbaseUrlของ GH Pages เป็น/; ข้ามลิงก์ HTTP(S) ที่อยู่ระยะไกล 
web_build_local_preview
- วัตถุประสงค์: ดูตัวอย่าง gh‑pages ในท้องถิ่นที่มีการทดสอบ/ตรวจสอบลิงก์ที่ไม่บังคับ
 - การใช้งาน: 
make web_build_local_preview OPTS="--locales en|all [--no-test] [--no-link-check] [--dry-run] [--no-serve]" - พฤติกรรม: ทดลองเซิร์ฟเวอร์ดูตัวอย่าง Node ก่อน (
scripts/preview-server.mjs, รองรับ/__stop), กลับไปที่python3 -m http.server; ให้บริการที่ 8080–8090; PID ที่web-local-preview/.server.pid. 
web_push_github
- วัตถุประสงค์: ดัน 
website/buildไปยังสาขาgh-pages. - การใช้งาน: 
make web_push_github 
เคล็ดลับ: ตั้งค่า NPM=… เพื่อเขียนทับโปรแกรมการจัดการแพ็คเกจที่ใช้โดย Makefile (ค่าเริ่มต้นเป็น npm).