मुख्य कंटेंट तक स्किप करें

विकास


विकास गाइड

केवल अंग्रेज़ी संपादित करें; अनुवाद प्रसारित होते हैं

दस्तावेज़ीकरण केवल website/docs (English) के अंतर्गत अपडेट करें। website/i18n/<locale>/… के अंतर्गत अनुवाद जनरेट होते हैं और इन्हें मैन्युअली संपादित नहीं करना चाहिए। लोकलाइज़्ड सामग्री को रिफ्रेश करने के लिए अनुवाद कार्यों का उपयोग करें (जैसे, make translate_web_docs_batch)।

पूर्वापेक्षाएँ

  • Node.js 22+ और npm (Node 22 के साथ परीक्षण किया गया)
  • Thunderbird 128 ESR या नया (मैन्युअल परीक्षण के लिए)

प्रोजेक्ट लेआउट (हाई‑लेवल)

  • रूट: पैकेजिंग स्क्रिप्ट distribution_zip_packer.sh, डॉक्स, स्क्रीनशॉट्स
  • sources/: मुख्य ऐड‑ऑन कोड (बैकग्राउंड, विकल्प/पॉपअप UI, मैनिफेस्ट, आइकन)
  • tests/: Vitest सूट
  • website/: Docusaurus डॉक्स (i18n website/i18n/de/... के अंतर्गत)

इंस्टॉल और टूलिंग

  • रूट डिपेंडेंसी इंस्टॉल करें: npm ci
  • डॉक्स (वैकल्पिक): cd website && npm ci
  • टार्गेट्स देखें: make help

लाइव डेवलपमेंट (web‑ext run)

  • Firefox डेस्कटॉप में त्वरित लूप (केवल 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 की Error Console खुली रखें (Tools → Developer Tools → Error Console)।
  • MV3 इवेंट पेज निष्क्रिय होने पर निलंबित रहते हैं; कोड बदलने के बाद ऐड‑ऑन को रीलोड करें, या web‑ext को ऑटो‑रीलोड करने दें।
  • कुछ केवल‑Firefox व्यवहार अलग हो सकते हैं; API समानता के लिए हमेशा Thunderbird में सत्यापित करें।
  • 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लोकल बिल्ड/प्रीव्यू आर्टिफैक्ट्स हटाएँ (tmp/, web-local-preview/, website/build/).
commitफॉर्मेट करें, टेस्ट चलाएँ (i18n सहित), चेंजलॉग अपडेट करें, कमिट करें और पुश करें।
eslintफ्लैट कॉन्फ़िग (npm run -s lint:eslint) के जरिए ESLint चलाएँ।
helpएक‑लाइन डॉक्स के साथ सभी टार्गेट्स सूचीबद्ध करें (सॉर्टेड)।
lintsources/ पर web‑ext lint (अस्थायी मैनिफेस्ट; ZIPs को नज़रअंदाज़; नॉन‑फेटल)।
menuटार्गेट और वैकल्पिक आर्ग्युमेंट चुनने के लिए इंटरैक्टिव मेन्यू।
packATN और LOCAL ZIPs बनाता है (लिंटर चलाता है; पैकर स्क्रिप्ट कॉल करता है)।
prettierरिपॉज़िटरी को वहीं फॉर्मेट करें (परिवर्तन लिखे जाते हैं)।
prettier_checkPrettier चेक मोड में (कोई लिखाई नहीं); रिफॉर्मेट की ज़रूरत हो तो विफल।
prettier_writeprettier का उपनाम।
testPrettier (लिखाई), फिर ESLint, फिर Vitest (यदि कॉन्फ़िगर किया हो तो कवरेज)।
test_i18nकेवल i18n टेस्ट: ऐड‑ऑन प्लेसहोल्डर/पैरिटी + वेबसाइट पैरिटी।
translate_apptranslation_app का उपनाम।
translation_appऐप UI स्ट्रिंग्स को sources/_locales/en/messages.json से अनुवादित करें।
translate_web_docs_batchOpenAI Batch API के माध्यम से वेबसाइट डॉक्स का अनुवाद (प्राथमिक)।
translate_web_docs_syncवेबसाइट डॉक्स को सिंक्रोनस रूप से अनुवादित करें (लीगेसी, नॉन‑बैच)।
translate_web_indextranslation_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_githubwebsite/build को gh-pages ब्रांच पर पुश करें।

विकल्पों के लिए सिन्टैक्स

  • विकल्प पास करने के लिए make <command> OPTS="…" का उपयोग करें (कोट्स अनुशंसित)। नीचे प्रत्येक टार्गेट उदाहरण उपयोग दिखाता है।

--

लोकैल बिल्ड टिप्स

  • लोकैलों का एक सबसेट बिल्ड करें: BUILD_LOCALES="en de" सेट करें या वेब टार्गेट्स को OPTS="--locales en,de" पास करें।
  • किसी विशिष्ट लोकैल का प्रीव्यू: http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.

बिल्ड और पैकेज

  • ZIPs बनाएं: make pack
  • रेपो रूट में ATN और LOCAL ZIPs उत्पन्न करता है (आर्टिफैक्ट्स को हाथ से संपादित न करें)
  • टिप: पैकेजिंग से पहले sources/manifest_ATN.json और sources/manifest_LOCAL.json दोनों में संस्करण अपडेट करें
  • मैन्युअल इंस्टॉल (डेव): Thunderbird → Tools → Add‑ons and Themes → गियर → Install Add‑on From File… → बनी हुई ZIP चुनें

टेस्ट

  • पूर्ण सूट: make test (Vitest)
  • कवरेज (वैकल्पिक):
  • npm i -D @vitest/coverage-v8
  • make test चलाएँ; HTML रिपोर्ट के लिए coverage/index.html खोलें
  • केवल i18n: make test_i18n (UI keys/placeholders/titles + वेबसाइट प्रति‑लोकैल प्रति‑डॉक पैरिटी, id/title/sidebar_label जाँच सहित)

डीबगिंग और लॉग्स

  • Error Console: Tools → Developer Tools → Error Console
  • रनटाइम पर वर्बोज़ लॉग टॉगल करें:
  • सक्रिय करें: messenger.storage.local.set({ debug: true })
  • निष्क्रिय करें: messenger.storage.local.set({ debug: false })
  • लॉग उत्तर लिखते/भेजते समय दिखाई देते हैं

डॉक्स (वेबसाइट)

  • डेव सर्वर: 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, टेस्ट/लिंक‑चेक छोड़ें, कोई पुश नहीं: 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 में हैं
  • खोज: यदि Algolia DocSearch env वेरिएबल 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
  • उपयुक्त baseUrl हैंडलिंग के लिए useBaseUrl का उपयोग करता है
  • फॉलबैक के रूप में meta refresh + noscript लिंक शामिल है


प्रीव्यू टिप्स

  • Node प्रीव्यू को साफ़ तरीके से रोकें: http://localhost:<port>/__stop खोलें (Local server started के बाद प्रिंट होता है)।
  • यदि MDX/JSX में इमेज लोड नहीं होतीं, तो साइट baseUrl का सम्मान करने के लिए useBaseUrl('/img/...') का उपयोग करें।
  • प्रीव्यू पहले शुरू होता है; लिंक चेक बाद में चलता है और नॉन‑ब्लॉकिंग है (टूटी बाहरी लिंक प्रीव्यू को नहीं रोकेंगी)।
  • उदाहरण प्रीव्यू 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)

  • क्रेडेंशियल्स एक बार सेट करें (शेल या .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 संरचना को वैध करती है, कर्ली‑ब्रेस प्लेसहोल्डर सुरक्षित रखती है, और सुनिश्चित करती है कि URLs अपरिवर्तित रहें।
  • वैलिडेशन विफल होने पर, यह मौजूदा मान रखने से पहले फीडबैक के साथ अधिकतम 2 बार पुनः प्रयास करती है।

अपना लोकैल प्रीव्यू करें

  • डेव सर्वर: npm --prefix website run start
  • यहाँ जाएँ: http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/

सबमिट करना

  • संपादित code.json फ़ाइल(फ़ाइलों) के साथ एक PR खोलें। बदलाव केंद्रित रखें और संभव हो तो एक त्वरित स्क्रीनशॉट शामिल करें।

सुरक्षा और कॉन्फ़िगरेशन टिप्स

  • sources/manifest.json कमिट न करें (बिल्ड द्वारा अस्थायी रूप से बनाया जाता है)
  • अपडेट चैनल सुरक्षित रखने के लिए browser_specific_settings.gecko.id को स्थिर रखें

सेटिंग्स स्थायित्व

  • स्टोरेज: सभी यूज़र सेटिंग्स storage.local में रहती हैं और ऐड‑ऑन अपडेट्स के बीच सुरक्षित रहती हैं।
  • इंस्टॉल: डिफ़ॉल्ट केवल तब लागू होते हैं जब कोई कुंजी सख़्ती से गुम हो (undefined)।
  • अपडेट: माइग्रेशन केवल गुम कुंजियों को भरता है; मौजूदा मान कभी ओवरराइट नहीं होते।
  • स्कीमा मार्कर: settingsVersion (वर्तमान में 1)।
  • कुंजियाँ और डिफ़ॉल्ट:
  • blacklistPatterns: string[]['*intern*', '*secret*', '*passwor*']
  • confirmBeforeAdd: booleanfalse
  • confirmDefaultChoice: 'yes'|'no''yes'
  • warnOnBlacklistExcluded: booleantrue
  • कोड: देखें sources/background.jsinitializeOrMigrateSettings() और SCHEMA_VERSION.

डेव वर्कफ़्लो (नई सेटिंग जोड़ना)

  • sources/background.js में SCHEMA_VERSION बढ़ाएँ।
  • नई कुंजी + डिफ़ॉल्ट को initializeOrMigrateSettings() में DEFAULTS ऑब्जेक्ट में जोड़ें।
  • डिफ़ॉल्ट भरते समय "only-if-undefined" नियम का उपयोग करें; मौजूदा मान ओवरराइट न करें।
  • यदि सेटिंग यूज़र‑दृश्य है, तो उसे sources/options.js में वायर करें और लोकलाइज़्ड स्ट्रिंग्स जोड़ें।
  • टेस्ट जोड़ें/समायोजित करें (देखें tests/background.settings.migration.test.js)।

मैन्युअल परीक्षण टिप्स

  • फ़्रेश इंस्टॉल का सिमुलेशन करें: एक्सटेंशन की डेटा डायरेक्टरी साफ़ करें या नई प्रोफ़ाइल से शुरू करें।
  • अपडेट का सिमुलेशन करें: storage.local में settingsVersion को 0 पर सेट करें और पुनः लोड करें; सुनिश्चित करें कि मौजूदा मान अपरिवर्तित रहें और केवल गुम कुंजियाँ जोड़ी जाएँ।

समस्या निवारण

  • सुनिश्चित करें कि Thunderbird 128 ESR या नया हो
  • रनटाइम समस्याओं के लिए Error Console का उपयोग करें
  • यदि संग्रहित सेटिंग्स ठीक से लागू नहीं लगतीं, तो Thunderbird पुनरारंभ करें और फिर से प्रयास करें। (Thunderbird सत्रों के बीच स्टेट कैश कर सकता है; पुनरारंभ से ताज़ा सेटिंग्स लोड होती हैं।)

CI और कवरेज

  • GitHub Actions (CI — Tests) vitest को कवरेज थ्रेशहोल्ड (85% lines/functions/branches/statements) के साथ चलाता है। यदि थ्रेशहोल्ड पूरे नहीं होते, तो जॉब विफल हो जाता है।
  • वर्कफ़्लो HTML रिपोर्ट के साथ coverage-html नामक आर्टिफैक्ट अपलोड करता है; रन पेज से डाउनलोड करें (Actions → नवीनतम रन → Artifacts)।

योगदान

  • ब्रांच/कमिट/PR दिशानिर्देशों के लिए CONTRIBUTING.md देखें
  • टिप: अपने दैनिक प्रोफ़ाइल पर प्रभाव से बचने के लिए परीक्षण हेतु अलग Thunderbird डेवलपमेंट प्रोफ़ाइल बनाएँ।

अनुवाद

  • बड़े “all → all” अनुवाद कार्य धीमे और महँगे हो सकते हैं। किसी सबसेट से शुरू करें (जैसे, कुछ डॉक्स और 1–2 लोकैल), परिणाम की समीक्षा करें, फिर विस्तार करें।

  • पुनर्प्रयास नीति: अनुवाद कार्य API त्रुटियों पर अधिकतम 3 पुनर्प्रयास एक्सपोनेंशियल बैकऑफ़ के साथ करते हैं; 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/…') का उपयोग करते हैं और लोकल प्रीव्यू में रेंडर होते हैं। फ़ेविकॉन

  • मल्टी‑साइज़ favicon.ico सभी बिल्ड पाथ (Make + स्क्रिप्ट्स) में website/scripts/build-favicon.mjs के ज़रिए स्वतः जनरेट होता है।

  • कोई मैन्युअल कदम आवश्यक नहीं; icon-*.png अपडेट करना पर्याप्त है। समीक्षा टिप

  • अनुवादित डॉक्स में फ्रंट‑मैटर id अपरिवर्तित रखें; जब मौजूद हो तो केवल title और sidebar_label का अनुवाद करें।

clean

  • उद्देश्य: लोकल बिल्ड/प्रीव्यू आर्टिफैक्ट्स हटाना।
  • उपयोग: make clean
  • हटाता है (यदि मौजूद हो):
  • tmp/
  • web-local-preview/
  • website/build/

commit

  • उद्देश्य: फॉर्मेट, टेस्ट, चेंजलॉग अपडेट, कमिट, और पुश।
  • उपयोग: make commit
  • विवरण: Prettier (लिखाई), make test, make test_i18n चलाता है; स्टेज्ड डिफ़ होने पर चेंजलॉग जोड़ता है; origin/<branch> पर पुश करता है।

eslint

  • उद्देश्य: फ्लैट कॉन्फ़िग के जरिए ESLint चलाना।
  • उपयोग: make eslint

help

  • उद्देश्य: एक‑लाइन डॉक्स के साथ सभी टार्गेट्स सूचीबद्ध करना।
  • उपयोग: make help

lint

  • उद्देश्य: web-ext का उपयोग करके MailExtension को लिंट करना।
  • उपयोग: make lint
  • नोट्स: sources/manifest_LOCAL.jsonsources/manifest.json अस्थायी‑कॉपी करता है; बनी हुई ZIPs को नज़रअंदाज़ करता है; चेतावनियाँ पाइपलाइन को विफल नहीं करतीं।

menu

  • उद्देश्य: Make टार्गेट और वैकल्पिक आर्ग्युमेंट चुनने के लिए इंटरैक्टिव मेन्यू।
  • उपयोग: बिना आर्ग्युमेंट्स के 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 (यदि इंस्टॉल हो तो कवरेज) चलाना।
  • उपयोग: make test

test_i18n

  • उद्देश्य: ऐड‑ऑन स्ट्रिंग्स और वेबसाइट डॉक्स के लिए i18n‑केंद्रित टेस्ट।
  • उपयोग: make test_i18n
  • चलाता है: npm run test:i18n और npm run -s test:website-i18n.

translate_app / translation_app

  • उद्देश्य: EN से अन्य लोकैलों में ऐड‑ऑन UI स्ट्रिंग्स का अनुवाद।
  • उपयोग: make translation_app OPTS="--locales all|de,fr"
  • नोट्स: कुंजी संरचना और प्लेसहोल्डर सुरक्षित रखता है; 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>"
    • लीगेसी पॉज़िशनल अब भी स्वीकार्य है: OPTS="<doc|all> <lang|all>"
  • व्यवहार: JSONL बनाता है, अपलोड करता है, हर 30s पर पोल करता है, परिणाम डाउनलोड करता है, फ़ाइलें लिखता है।
  • नोट: बैच जॉब को पूरा होने में 24 घंटे तक लग सकते हैं (OpenAI के बैच विंडो अनुसार)। कंसोल प्रत्येक पोल पर बीता समय दिखाता है।
  • पर्यावरण: OPENAI_API_KEY (अनिवार्य), वैकल्पिक OPENAI_MODEL, OPENAI_TEMPERATURE, OPENAI_BATCH_WINDOW (डिफ़ॉल्ट 24h), BATCH_POLL_INTERVAL_MS.
  • लीगेसी: translate_web_docs_sync
    • उपयोग (फ्लैग्स): make translate_web_docs_sync OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • लीगेसी पॉज़िशनल अब भी स्वीकार्य है: OPTS="<doc|all> <lang|all>"
  • व्यवहार: प्रति‑युग्म सिंक्रोनस अनुरोध (कोई बैच एग्रीगेशन नहीं)।
  • नोट्स: OPTS छोड़े जाने पर इंटरैक्टिव प्रॉम्प्ट्स। दोनों मोड कोड ब्लॉक्स/इनलाइन कोड सुरक्षित रखते हैं और फ्रंट‑मैटर id अपरिवर्तित रखते हैं; लॉग translation_web_batch.log (बैच) या translation_web_sync.log (सिंक) में होता है।

translate_web_index / translation_web_index

  • उद्देश्य: वेबसाइट UI स्ट्रिंग्स (होमपेज, नेवबार, फूटर) को website/i18n/en/code.json से 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 संरचना वैध करता है, कर्ली‑ब्रेस प्लेसहोल्डर सुरक्षित रखता है, URLs अपरिवर्तित रखता है, और वैलिडेशन त्रुटियों पर फीडबैक के साथ पुनः प्रयास करता है।

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 …].
  • डिप्स: website/node_modules/@docusaurus गुम होने पर ही website/ में npm ci चलाता है।

web_build_linkcheck

  • उद्देश्य: ऑफ़लाइन‑सेफ लिंक चेक।
  • उपयोग: make web_build_linkcheck OPTS="--locales en|all"
  • नोट्स: tmp_linkcheck_web_pages में बिल्ड करता है; GH Pages baseUrl को / में री‑राइट करता है; रिमोट 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

टिप: Makefile द्वारा उपयोग किए जाने वाले पैकेज मैनेजर को ओवरराइड करने के लिए NPM=… सेट करें (डिफ़ॉल्ट npm)।