Content & editorial
Automated Translation Service
Indicative price, not an offer: €9.99/mo + €0.08-0.15/word translated (variable cost model) — owns the credential (translation quality) and per-country language commitment
Generated from docs/plan/paid/automated-translation-service/PLAN.md in the AstroBaaS repository. Nothing described below is implemented — it is the written plan for it.
Automated Translation Service integrates DeepL-powered translation to bulk-translate product descriptions, categories, and blog posts into 20+ languages. Merchants select source and target languages, configure quality tier (automatic or human-review), and the system translates in bulk or on-demand. This is a paid plugin requiring DeepL API credential, per-language quality assurance commitment, and support for translation errors.
The problem
Manually translating product descriptions into 20 languages or hiring translators costs €5,000–50,000+ annually per language tier. Keeping translations current with quarterly product updates is prohibitively expensive. Merchants are stuck: either stay English-only and lose non-English markets, or hire expensive translators and bleed cash.
What it does
- DeepL API integration with credential stored in plugin settings
- Bulk-translate all translatable fields of a collection into target language
- On-demand translation: single product or single field into target language
- Context preservation: auto-detect language from field content, skip already-translated fields
- Quality tier selection: ‘Automatic’ (DeepL only) or ‘Human review’ (require staff approval before publishing)
- Translation memory: cache translated phrases to ensure consistency across products
- Exclude patterns: regex to skip translating SKUs, model numbers, brand names
- Cost tracking: log translated words/characters, monthly usage against quota
- Webhook on translation completion (for async bulk jobs)
- Fallback to previous translation if DeepL API fails (graceful degradation)
What it deliberately does NOT do
Each boundary carries its reason. A boundary without a reason gets crossed by the next person who reads this.
- Human translator marketplace (Upwork, Translateme integration) — scope is DeepL only; human review is QA gate, not full outsourcing
- Tone/style customization per language (formal vs casual German) — scope is DeepL default tone; tone adaptation requires human review
- Terminology glossary for domain-specific terms — scope is translation memory from prior translations; custom glossary requires merchant management UI
Data model
Plugin-owned collection: TranslationJob (id, sourceLanguage, targetLanguage, collectionType, recordCount, status, completedAt, costCharacters) and TranslationCache (phraseHash, sourceLanguage, targetLanguage, translatedPhrase, usageCount). No core schema migration.
API
- POST /api/translations/bulk — start bulk translation job
- GET /api/translations/jobs/:id — fetch job status and progress
- POST /api/translations/single — translate single field on-demand
- GET /api/translations/memory — query translation cache for phrase
- PUT /api/settings/translation/exclude-patterns — set regex patterns to skip
- GET /api/translations/usage — monthly translated characters, cost, quota remaining
Every route added here must also appear in src/pages/openapi.json.ts — a test
fails the build if it does not.
Admin
Translations page lists recent jobs (source → target language, % complete, cost, status). New job form selects collection, source language, target language, quality tier. Progress bar shows % of records translated, ETA, preview of sample translations. Cost display shows €X.XX for this job + monthly total. Human review queue shows translations pending staff approval before publishing.
The seam — why this is paid
Core owns: translatable field storage, audit log. Paid plugin owns: DeepL API credential and key management, bulk translation orchestration, translation memory, quality tier enforcement, human review workflow.
a paid pack owns the credential — we provide DeepL-powered automated translation + optional human review, guaranteeing language quality and context accuracy.
Dependencies
- product-localization-framework (translatable fields required)
- core-audit-log (translation job tracking)
- core-webhook-system (async job completion)
Acceptance checks
Each of these must be able to fail. Before claiming this is done, break the code deliberately and watch each one go red.
- DeepL credential stored securely in plugin settings allows API calls without merchant entering key
- Bulk translate 500 products to German: all product.name and product.description fields translated in <5 minutes
- Translated phrase ‘stainless steel’ cached in translation memory; second product with same phrase uses cache, not API call
- Quality tier ‘Human review’ marks translations as pending_review; staff must approve before publishing to storefront
- Exclude pattern ’^[A-Z]{3}-[0-9]{4}$’ skips translating model numbers (e.g., ABC-1234)
- DeepL API rate limit or outage triggers fallback: use prior translation if available, else mark as failed
- Monthly cost display shows €15.32 for 50,000 translated characters at current rates
Risks
DeepL API key exposed in logs or error messages. Bulk translation job memory leak if translating 100,000 products without pagination. Translation memory collision (same phrase in different contexts gets wrong cached translation). Quality tier workflow ambiguity: staff approves one translation but system auto-publishes others. API rate-limit handling not implemented causes job stalls without retry.
Commercial context
| Suggested price | €9.99/mo + €0.08-0.15/word translated (variable cost model) — owns the credential (translation quality) and per-country language commitment |
| Rival anchor | Shopify Markets (€27/mo, includes); Magento + Transifex (€50-100/mo); DeepL API (€5-25/mo); human translators (€5k-50k/year) |
The anchor is what the nearest equivalent charges on Shopify or Magento today. It is context for a pricing decision, not the decision.
Generated from the commerce plan. See docs/COMMERCE-PLAN.md for the full
catalogue and ../../AI-GUIDE.md for how to work on this repository.