স্কিপ করে মূল কন্টেন্ট এ যান

উন্নয়ন


উন্নয়ন নির্দেশিকা

শুধু ইংরেজি সম্পাদনা করুন; অনুবাদগুলো স্বয়ংক্রিয়ভাবে ছড়িয়ে পড়বে

ডকুমেন্টেশন কেবলমাত্র website/docs (ইংরেজি) এর অধীনে আপডেট করুন। 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 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‑এর 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 প্রোফাইল ব্যবহার করুন।

মেক টার্গেট (বর্ণানুক্রমিক)

Makefile সাধারণ ডেভ ফ্লোগুলো স্ট্যান্ডার্ডাইজ করে। প্রতিটি টার্গেটের এক‑লাইনের সারাংশ দেখতে যেকোনো সময়ে make help চালান।

টিপ: কোনো টার্গেট ছাড়া make চালালে টার্গেট বেছে নেওয়ার জন্য একটি সাধারণ Whiptail মেনু খোলে।

টার্গেটএক‑লাইনের বর্ণনা
cleanলোকাল বিল্ড/প্রিভিউ আর্টিফ্যাক্ট মুছুন (tmp/, web-local-preview/, website/build/)।
commitফরম্যাট, টেস্ট (i18n সহ) চালান, চেঞ্জলগ আপডেট, কমিট ও পুশ।
eslintফ্ল্যাট কনফিগের মাধ্যমে ESLint চালান (npm run -s lint:eslint)।
helpসব টার্গেট এক‑লাইনের ডক্সসহ তালিকাবদ্ধ করুন (সাজানো)।
lintsources/‑এ web‑ext lint (অস্থায়ী ম্যানিফেস্ট; ZIP উপেক্ষা; নন‑ফ্যাটাল)।
menuইন্টার‌্যাকটিভ মেনু দিয়ে টার্গেট এবং ঐচ্ছিক আর্গুমেন্ট বেছে নিন।
packATN ও LOCAL ZIP বিল্ড (লিন্টার চালায়; প্যাকার স্ক্রিপ্ট কল করে)।
prettierরিপোজিটরি ইন‑প্লেস ফরম্যাট করুন (চেঞ্জ লিখে)।
prettier_checkPrettier চেক মোডে (কোনো রাইট নয়); রিফরম্যাট দরকার হলে ফেল করবে।
prettier_writeprettier‑এর অ্যালিয়াস।
testPrettier (write), ESLint, তারপর Vitest (কনফিগ থাকলে কভারেজ)।
test_i18nশুধু i18n টেস্ট: অ্যাড‑অন প্লেসহোল্ডার/প্যারিটি + ওয়েবসাইট প্যারিটি।
translate_apptranslation_app‑এর অ্যালিয়াস।
translation_appsources/_locales/en/messages.json থেকে অ্যাপ UI স্ট্রিং অনুবাদ করুন।
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/

বিল্ড ও প্যাকেজ

  • ZIP বিল্ড: make pack
  • রিপোরুটে ATN এবং LOCAL ZIP তৈরি করে (আর্টিফ্যাক্টগুলো হাতে বদলাবেন না)
  • টিপ: প্যাকেজিংয়ের আগে 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 কী/প্লেসহোল্ডার/টাইটেল + ওয়েবসাইটে প্রতি‑লোকেলে প্রতি‑ডকে প্যারিটি, 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 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‑এ
  • সার্চ: যদি CI‑তে Algolia DocSearch env ভ্যারিয়েবল সেট থাকে (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 ব্যবহার করে
  • ফলোব্যাক হিসেবে মেটা রিফ্রেশ + 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 শেপ ভ্যালিডেট করে, কার্লি‑ব্রেস প্লেসহোল্ডার সংরক্ষণ করে, এবং URL অপরিবর্তিত রাখে।
  • ভ্যালিডেশন ব্যর্থ হলে, ফিডব্যাকসহ সর্বোচ্চ 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)। থ্রেশহোল্ড না এলে জব ফেল করে।
  • ওয়ার্কফ্লো একটি আর্টিফ্যাক্ট coverage-html হিসেবে HTML রিপোর্ট আপলোড করে; রান পেজ থেকে ডাউনলোড করুন (Actions → সর্বশেষ রান → Artifacts)।

অবদান

  • ব্রাঞ্চ/কমিট/PR নির্দেশিকার জন্য CONTRIBUTING.md দেখুন
  • টিপ: দৈনন্দিন প্রোফাইলে প্রভাব এড়াতে টেস্টিংয়ের জন্য আলাদা Thunderbird ডেভেলপমেন্ট প্রোফাইল তৈরি করুন।

অনুবাদসমূহ

  • বড় “all → all” ট্রান্সলেশন জব ধীর ও ব্যয়বহুল হতে পারে। প্রথমে একটি সাবসেট (যেমন, কয়েকটি ডক ও ১–২টি লোকেল) দিয়ে শুরু করুন, ফলাফল রিভিউ করুন, তারপর প্রসারিত করুন।

  • রিট্রাই নীতি: ট্রান্সলেশন জব 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/…') ব্যবহার করছে এবং লোকাল প্রিভিউতে রেন্ডার হচ্ছে। ফেভিকনস

  • মাল্টি‑সাইজ 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 (write), 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; বানানো ZIP উপেক্ষা করে; ওয়ার্নিং পাইপলাইন ফেল করায় না।

menu

  • উদ্দেশ্য: মেক টার্গেট ও ঐচ্ছিক আর্গুমেন্ট বেছে নেওয়ার ইন্টার‌্যাকটিভ মেনু।
  • ব্যবহার: কোনো আর্গুমেন্ট ছাড়াই make চালান।
  • নোট: যদি whiptail না থাকে, মেনু make help‑এ ফলব্যাক করে।

pack

  • উদ্দেশ্য: ATN এবং LOCAL ZIP বিল্ড (নির্ভরশীল lint‑এর উপর)।
  • ব্যবহার: make pack
  • টিপ: প্যাকেজিংয়ের আগে sources/manifest_*.json উভয়ের ভার্সন বাম্প করুন।

prettier

  • উদ্দেশ্য: রিপো ইন‑প্লেস ফরম্যাট করা।
  • ব্যবহার: make prettier

prettier_check

  • উদ্দেশ্য: ফরম্যাটিং যাচাই (কোনো রাইট নয়)।
  • ব্যবহার: make prettier_check

prettier_write

  • উদ্দেশ্য: prettier‑এর অ্যালিয়াস।
  • ব্যবহার: make prettier_write

test

  • উদ্দেশ্য: Prettier (write), 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 বিল্ড, আপলোড, প্রতি 30সেক পোল, রেজাল্ট ডাউনলোড, ফাইল লেখা।
  • নোট: ব্যাচ জব সম্পন্ন হতে সর্বোচ্চ 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

  • উদ্দেশ্য: website/i18n/en/code.json থেকে ওয়েবসাইট UI স্ট্রিং (হোমপেজ, নেভবার, ফুটার) অনুবাদ করে 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 স্ট্রাকচার ভ্যালিডেট করে, কার্লি‑ব্রেস প্লেসহোল্ডার বজায় রাখে, 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 …]
  • ডিপস: কেবল 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)।