Enterprise localization fails most often not because of translation quality but because of the handoffs between systems. Content sits in a CMS, translations live in a TMS, and localized emails deploy through an ESP, yet the spaces between these platforms are where delays, version mismatches, and manual errors accumulate. Building an event-driven pipeline that connects all three eliminates these gaps entirely.
This guide walks through the technical architecture required to automate content flow from authoring through translation to multichannel delivery. Ollang serves as the AI-powered orchestration and execution layer throughout, coordinating content intake, machine translation, human review, quality assurance, and final delivery across video, audio, documents, and websites at enterprise scale, without requiring teams to manually shuttle files between systems.
Defining System-of-Record Boundaries
Before writing a single integration, you need to answer a deceptively simple question: which system owns which data?
Ambiguity here is the root cause of most localization pipeline failures. When both the CMS and TMS believe they are the authoritative source for a translated string, you get overwrites, stale content, and reconciliation nightmares.
CMS as the Source-of-Truth for Source Content
Your CMS, whether it's Adobe Experience Manager, Contentful, Sitecore, or a headless alternative, should be the sole authority for source-language content. This means:
- Source text is only edited in the CMS.
- No downstream system may modify or create source content.
- Every content node has a single, immutable version identifier that propagates through the pipeline.
When the CMS publishes or updates a content node, it emits an event. Everything downstream reacts to that event rather than polling or relying on a human to initiate the process.
TMS as the Source-of-Truth for Translation Assets
The TMS owns translation memories, termbases, and the translated output for each locale. It does not own the source content, and it does not decide when content is ready for delivery, it decides when a translation is complete and quality-approved.
ESP as the Delivery Layer, Not a Content Store
Email service providers like Braze, Iterable, or Salesforce Marketing Cloud should receive finalized, localized content and render it. They are not editing environments. Treating an ESP as a content store leads to drift between what was translated and what gets sent.
| System | Owns | Does Not Own |
|---|---|---|
| CMS | Source content, content structure, publish triggers | Translations, delivery logic |
| TMS | Translation memory, termbases, translated output | Source content, delivery scheduling |
| ESP | Delivery rules, audience segmentation, send logic | Source or translated content authoring |
Canonical Content IDs and Locale Keys
A scalable pipeline requires every piece of content to be uniquely addressable across all three systems. Without a shared identifier scheme, you cannot reliably track what has been translated, what is stale, and what is in flight.
Designing a Universal Content Identifier
Use a composite key that combines the content node ID from your CMS with a locale code conforming to BCP 47 (e.g., en-US, fr-FR, ja-JP). A typical pattern looks like:
{cms_content_id}:{locale}:{version_hash}
For example: article-4821:de-DE:a3f9c2. This identifier travels with the content through every system. The version hash ensures that if the source changes, downstream systems know the existing translation is stale.
Propagating IDs Across Systems
When Ollang ingests content from the CMS, it maps the canonical ID to the TMS project and preserves it through every workflow state. When the translated content is pushed to the ESP, the same ID is attached as metadata, enabling end-to-end traceability. If a marketer in the ESP sees an issue, they can trace it back to the exact source version and translation job without searching through spreadsheets.
Event-Driven Integration: APIs, Webhooks, and Message Queues
Manual handoffs, exporting an XLIFF, emailing it to a vendor, waiting for a reply, re-importing, are the bottleneck this entire architecture eliminates.
CMS β Orchestration Layer (Webhook on Publish)
Configure your CMS to emit a webhook on content publish, update, or unpublish events. The payload should include the canonical content ID, the content body, the source locale, and the target locales.
Ollang receives this webhook and initiates the localization workflow automatically. For document-heavy pipelines, Ollang can ingest entire files, PDFs, DOCX, PPTX, alongside structured CMS content, normalizing everything into a unified processing queue. It also accepts video and audio assets, extracting transcripts and metadata for subtitle, caption, and voice-over workflows.
Orchestration Layer β TMS (API-Driven Job Creation)
Rather than relying on the TMS's native CMS connectors (which are often brittle and version-locked), use the TMS API to create translation jobs programmatically. Ollang handles this by:
- Creating projects with the correct language pairs and workflow templates.
- Uploading source content with inline metadata for context.
- Registering callback URLs so the TMS can notify when jobs reach specific states.
TMS β Orchestration Layer β ESP (Webhook on Completion)
When translation and review are complete, the TMS fires a webhook back to Ollang. Ollang then runs quality gates (covered below), and on pass, pushes the localized content to the ESP via its API, populating the correct template, locale variant, and dynamic content blocks.
Why Message Queues Matter at Scale
For enterprises processing thousands of content updates per day, direct webhook-to-webhook chains become fragile. Introducing a message queue (Amazon SQS, Google Pub/Sub, or RabbitMQ) between each stage provides:
- Buffering during traffic spikes.
- Guaranteed delivery even when a downstream system is temporarily unavailable.
- Parallelism for processing multiple locale variants simultaneously.
Idempotent Retries and Failure Recovery
Distributed systems fail. Networks timeout, APIs return 500 errors, and queues occasionally deliver the same message twice. Your pipeline must handle all of this gracefully.
Designing for Idempotency
Every operation in the pipeline should produce the same result whether it runs once or five times. This means:
- Translation job creation should check whether a job for the same canonical ID and version already exists before creating a duplicate.
- Content pushes to the ESP should use upsert semantics, update if the locale variant exists, create if it doesn't.
- QA gate evaluations should be deterministic for the same input.
Retry Strategies
Use exponential backoff with jitter for transient failures. For permanent failures (e.g., a 400 error from a malformed payload), route the event to a dead-letter queue for manual inspection rather than retrying indefinitely.
Ollang's orchestration layer implements these patterns natively, ensuring that a temporary TMS outage doesn't cascade into lost translations or duplicate jobs. When the downstream system recovers, queued events process automatically in order.
