Round-trip translation for Adobe InDesign documents, by Supertext.
Export all text from an .indd document to XLIFF 1.2, translate it in any CAT tool or TMS (memoQ, Trados, Phrase, …), and import the translations back into the same stories, table cells and footnotes with their formatting intact: one translated copy of the document per language.
Brochure.indd ──► Translation Export ──► Brochure_fr-CH.xlf ──► CAT tool / TMS
Brochure_it-CH.xlf │
▼
Brochure_fr-CH.indd ◄── Translation Import ◄── translated .xlf files
Brochure_it-CH.indd
The XLIFF format matches Adobe Illustrator Translation and CorelDRAW Supertext Translation, so one translation workflow covers all three applications.
Status: 1.0.0, untested in InDesign. The scripts are syntax-checked and their core logic passes a mock-based test, but they have not yet been run against real documents. Run the test checklist on a sample file before using this in production.
- Stable story IDs. Each story gets a hidden ID stored inside the
.inddfile, so translations land in the right place even if frames are moved or rethreaded. - Everything that holds text. Stories (including threaded frames, text on paths and parent pages), table cells and footnotes.
- Formatting preserved. One translation unit per paragraph. Paragraph styles are never touched. A bold word, a character style or a colour change inside a paragraph becomes an XLIFF
<g>tag and is restored on import. - Objects stay in place. Anchored frames, inline graphics, page numbers, footnote references, tables and markers become protected
<x>placeholders. Forced line breaks and tabs become<x>tags that translators may move. - Context for translators. Every group carries a
<note>with its page, layer, paragraph style, font and size, and flags fixed-size frames ("watch the length"). - Safe import. The original stays untouched. Stories edited after export are skipped and reported. Untranslated paragraphs keep the source text. Locked layers and Track Changes are handled automatically. Each import is a single undo step.
- Overset check. After import, every story or cell whose translated text no longer fits is listed with its page.
- Copy the two scripts from
scripts/into InDesign's Scripts Panel folder (installation guide). - Open your document. In Window › Utilities › Scripts, double-click Translation Export. Enter the source and target languages.
- Translate the
.xlffiles. - Open the original document again and double-click Translation Import. Select the translated
.xlffiles.
| Guide | For |
|---|---|
| Installation guide | Installing, updating and removing the scripts on Windows and macOS |
| User guide | Designers, project managers and translators running the workflow |
| Developer guide | Architecture, XLIFF format, testing and releasing |
scripts/
Translation Export.jsx export to XLIFF (round trip, part 1)
Translation Import.jsx import translated XLIFF (round trip, part 2)
tests/
logic-test.js tests the core logic against a mock text model (Node.js)
docs/
installation-guide.md
user-guide.md
developer-guide.md
CHANGELOG.md
Adobe InDesign CC 2019 or later on Windows or macOS. No plugins, extensions or Adobe developer account required.
Supertext offers AI and professional translation plugins for these systems:
| System | Plugin | Type of integration | What it does |
|---|---|---|---|
| Adobe Experience Manager | supertext-aem-connector | Translation connector: two AEM content packages for AEM's Translation Integration Framework. | Sends AEM translation projects to Supertext and imports the results |
| ApostropheCMS | Apostrophe-Supertext-Translation | Apostrophe module (npm): a translation provider for Apostrophe's own Localize… step. | Translates pages and pieces as editors localize them, widgets and rich text included |
| Contao | Contao-Supertext-Translation | Contao bundle (Composer) that adds a back-end action. | Translate with Supertext in the site structure: pages or whole websites into other languages |
| Craft CMS | CraftCms-Supertext-Translation | Craft plugin (Composer) with a panel on the entry page. | Translates entries into your other sites, Matrix and rich text included |
| Directus | Directus-Supertext-Translation | Directus extension bundle (npm): interface, endpoint, Flow operation and module. | Translate with Supertext box on the item form, fills the Translations field |
| django CMS | djangoCMS-Supertext-Translation | Django app (Python package) that adds a toolbar entry. | Translates pages and their plugins from the toolbar |
| Drupal | tmgmt_supertext_ai | Drupal module: a translator provider for the Translation Management Tool (TMGMT), by MD Systems. | Translates TMGMT jobs with Supertext AI |
| Ghost | Ghost-Supertext-Translation | Separate connector service (Ghost has no admin plugins): works through internal tags, webhooks and the Admin API. | Tag a post #translate-… and a translated draft appears |
| Grav | Grav-Supertext-Translation | Grav 2 plugin with an Admin2 panel. | Supertext panel in the page editor, Markdown kept intact |
| HubSpot | HubSpot-Supertext-Translation | Hosted app connected to HubSpot with OAuth, working through HubSpot's multi-language content. | Translates website and landing pages, blog posts, marketing emails and knowledge base articles into draft language versions |
| Joomla | Joomla-Supertext-Translation | Joomla system plugin (installable package). | Translates articles into linked, unpublished language versions |
| Magnolia | Magnolia-Supertext-Translation | Magnolia module with a Translate with Supertext action in the Pages app. | Translates pages, areas and components into the site's other languages |
| Neos | Neos-Supertext-Translation | Neos package (Composer) that hooks into the content repository, with a Supertext backend module for translation files. | Translates automatically when an editor creates a page in another language |
| Orchard Core | OrchardCore-Supertext-Translation | Orchard Core module (.NET) with an admin page and a localization hook. | Translates content items into other cultures, on demand or on localization |
| Payload CMS | Payload-Supertext-Translation | Payload plugin (npm) added to payload.config. |
Translate button for localized collections and globals |
| Silverstripe | Silverstripe-Supertext-Translation | Silverstripe module (Composer) on top of Fluent. | Supertext tab translates pages and Elemental blocks into Fluent locales |
| Strapi | Strapi-Supertext-Translation | Strapi 5 plugin (npm) with a Content Manager panel. | Translates entries into other locales from the Content Manager |
| TYPO3 | Typo3-Supertext-Translation | TYPO3 extension (Composer) that hooks into TYPO3's own localization, with a Supertext backend module for translation files. | Translates pages and content elements as editors localize them |
| Umbraco | Umbraco-Supertext-Translation | Umbraco package (NuGet) with a backoffice extension. | Translate with Supertext for pages, block lists and grids included |
| Wagtail | Wagtail-Supertext-Translation | Python package: a machine translator for wagtail-localize. | Translates pages and snippets inside wagtail-localize's editor |
| WordPress (Polylang) | Wordpress-Polylang-Supertext-Translation | WordPress plugin: a machine-translation service for Polylang Pro, plus professional translation orders. | AI translation next to DeepL in Polylang, and human translation orders |
| WordPress (WPML) | Wordpress-WPML-Supertext-Translation | WordPress plugin for WPML, with bulk actions in the posts and pages lists and a Supertext box in the editor. | AI translation into your WPML languages, professional translation orders and XLIFF/HTML translation files |
| System | Plugin | Type of integration | What it does |
|---|---|---|---|
| Akeneo PIM | Akeneo-Supertext-Translation | Akeneo PIM bundle with a Translate with Supertext action on the product page. | Translates products and product models into your other locales |
| AtroPIM | AtroPIM-Supertext-Translation | AtroCore module with a button on the product and a mass action in the list. | Translates products and other AtroCore records into your other languages |
| Pimcore | Pimcore-Supertext-Translation | Pimcore bundle (Composer) with a Translate with Supertext button in Pimcore Studio. | Translates documents into linked language versions and data objects' localized fields |
| System | Plugin | Type of integration | What it does |
|---|---|---|---|
| Magento | Magento-Supertext-Translation | Magento 2 module (also Mage-OS) with a mass action in the admin lists and a button on the edit pages. | Translates products, categories, CMS pages and blocks into your store views' languages |
| PrestaShop | PrestaShop-Supertext-Translation | PrestaShop module with a bulk action in the back-office lists. | Translates products, categories and CMS pages into your shop's other languages |
| Shopify | Shopify-Supertext-Translation | Shopify app in the Shopify admin. | Translates products, collections, pages and blog posts into all your shop's languages |
| Wix | Wix-Supertext-Translation | Wix app with a dashboard page (hosted service), working through Wix Multilingual. | In development: translates Wix Stores products and other Wix Multilingual content into your site's languages |
| System | Plugin | Type of integration | What it does |
|---|---|---|---|
| Mailchimp | Mailchimp-Supertext-Translation | Hosted app connected to Mailchimp with OAuth: Supertext folders in Mailchimp and a translate page. | In development: turns a campaign into one draft per language, each sent to the subscribers with that language |
| Application | Plugin | Type of integration | What it does |
|---|---|---|---|
| Adobe InDesign | Adobe-InDesign-Translation | InDesign scripts (ExtendScript). | Exports all text to XLIFF 1.2 for any CAT tool and imports the translations with formatting intact |
| Adobe Illustrator | Adobe-Illustrator-Translation | Illustrator scripts (ExtendScript). | Exports all text to XLIFF 1.2 for any CAT tool and imports the translations with formatting intact |
| CorelDRAW | CorelDRAW-Supertext-Translation | CorelDRAW VBA macro. | Exports all text to XLIFF 1.2 for any CAT tool and imports the translations with formatting intact |
Questions, problems or ideas? Use the Supertext support form: describe what happened and you get an answer by email, in your language. Requests are tracked as issues in this repository, without your name and email address. Developers are welcome to open issues and pull requests here directly. Security issues: see SECURITY.md.