Add BullMQ-backed cold-path translation so first-time category and part
names from EMEX/PCAT scrapers no longer stay English. translateMany now
returns the original on DB miss but enqueues a translation job; the
worker calls DeepSeek V3 via OpenRouter, persists to
emex_category_translations, and updates already-stored rows where
name = name_original. Redis NX flag dedupes concurrent enqueues so the
same term is not translated 100x when many users hit it at once.
Removes the dictionary fallback from TranslationsService — its
word-by-word replacement produced half-translated strings (e.g.
"Body frame" → "Kaporta frame") that polluted the DB.
Bootstrap and backfill scripts cover EMEX and PCAT sources together.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>