DynoStaticAdmin sign in
Documentation

Source-managed translations

Source-managed translations

Each CMS content type can use independently edited language entries (the default) or source-managed translations. Configure this under Content → Translations → Translation workflow by content type. The source language is configurable; it is not necessarily English. Collections and singletons use the same workflow.

Source-managed lists show source entries. Their Translations panel shows each target's publication and update status, with links to read-only previews. Ordinary entry writers, including Automation changesets, cannot edit generated targets. Switch the policy explicitly to independent mode before making independent edits, changing languages, deleting a managed content type or regrouping its entries.

Enabling an existing site

Link translations to their published source through native translation groups first. Resolve unpublished target drafts before activation; enabling source management refuses to discard them. Assign every schema field a rule:

Rule Refresh behavior
Translate Export text for rewriting and validate its replacement.
Copy from source Copy facts, media, numbers or other shared values.
Keep locale-specific Retain the target's existing URL, slug or localized value.

Slug fields must remain locale-specific. Configure initial values for new variants by locale and field path; templates support {locale} and {source.slug} (or another scalar source path). Existing values always take precedence. Missing initial values block a new variant with an explanation in the queue.

Activation changes policy and editor organization only. It does not alter entries, publications, URLs, native translation groups or their histories, and does not queue a mass refresh. Existing variants show Existing — source revision untracked until an actual refresh establishes provenance.

Manual AI rewriting

  1. Edit and publish the source. Changed publications queue target updates; saving drafts and publishing an unchanged revision do not. Existing target publications remain public while updates are prepared.
  2. Open Translation updates, select up to 25 requests and download JSON.
  3. Give the file to your translation tool. Rewrite each context.fields value into context.target.locale, filling the corresponding translations value. Preserve placeholders, including repeated placeholders, and supported HTML. Change only translations; leave identities, hashes and context intact.
  4. Review the text and use Import and publish. Every item must validate before any item is published. A null or missing translated field is incomplete.

The import uses normal CMS publication, history, audit and deployment events. Source, policy, group and target changes invalidate stale requests; an identical retry returns the original result without publishing again. A different result for an already accepted request is rejected. Policy changes supersede pending work; use the source's Refresh translations of this publication action to request fresh work after configuring rules or for an existing publication.

Unpublishing the source atomically unpublishes its generated variants and cancels pending requests. Republishing queues refreshes; it does not silently republish the old translations. New variants become linked members after successful import.

This release does not call translation providers. External AI tools and future provider adapters can consume the same private queue/export/import contract. Public build clients continue reading the existing CMS Content API and v1 native translation groups; no private policy or queue data is exposed there.

Private Automation API

Use a site-bound Automation bearer token, or an owner token with an explicit site selector. CMS content:read tokens cannot access this API.

Method and path Scope Input
GET /api/v1/automation/translations workspace:read Optional status, locale, source entry ID, schema ID, after cursor
GET /api/v1/automation/translations/export workspace:read ids: comma-separated request IDs (1–25)
POST /api/v1/automation/translations/import workspace:write Completed exported JSON, at most 2 MiB

The equivalent physical-host actions are automation.translations.queue, automation.translations.export and automation.translations.import at /api/. Queue responses include next_after; pass it unchanged as after. Responses are private and uncached. Read and propose-only tokens cannot import. CMS users need content editing permission to export and publication permission to import.

The batch format is dynostatic.translation-batch, version 1. Exported items contain request_id, request_sha256, captured context, and translations. Context carries the source publication revision/hash, policy/group revisions, target draft revision/content version, locale and source field map. Validation rejects unknown or protected fields, unsafe formatting and altered placeholders. Malformed batches return 400; stale/conflicting requests return 409. Neither partially applies a batch. Always re-export current work after a conflict.

The versioned configuration resource is cms.translation_policy, serialized as dynostatic.cms-translation-policy v1. Workspace files live under cms/translation-policies/{id}.json. Normal revision preconditions and website serialization apply. Policies are opt-in per schema; no Battaglini-specific rules or English-specific assumptions exist in the core.

Persistence and verification

Migration 202610180001 adds policy and durable request tables without rewriting the immutable 202610110001 baseline. Current backups include both tables; immediately-prior baseline backups remain restorable and leave these tables empty.

Focused PHP 8.5 integration checks cover upgrade/replay, collection and singleton refresh, permission denial, stale inputs, atomic rollback, retries, source unpublication, new variants, competing website writers and current/prior backup restore. Three-browser checks cover source-only lists, read-only targets, status, batch controls and mobile layout. These are workflow acceptance, not a complete release certification of every supported runtime/database combination.