Translation config options
Experience Workspace uses Google Translate out-of-the-box and requires no configuration. However you can adapt your translation config to select another service and control languages, rollout, conflict handling, and content that must not be translated.
This document explains the configuration options available. For setup instructions, please see the document Set up translation. For ready-to-use examples, please see the document Translation config samples.
Config sheet structure
Localization is controlled by a translation sheet located at {org}/{site}/.da/translate. Each tab controls part of the localization and rollout pipeline.
config tab
The config tab contains key and value rows. Unspecified keys use their defaults.
General service options
| Key | Description | Example |
translation.service.name |
Connector used to send and retrieve content. Defaults to Google. | Google, Lionbridge, Smartling, Trados |
translation.service.all.env |
Comma-separated environments shown in project options. The first is the default. | stage, prod |
translation.service.key.path |
Optional Admin API source URL of a separate credential sheet. | https://admin.da.live/source/{ORG}/{SITE}/.da/translate-keys.json |
Environment-specific keys use translation.service.{env}.*, where {env} is an entry such as prod or stage.
Google is the credential-free default. Samples use one prod environment.
| Key | Description | Example |
translation.service.{env}.origin |
Google translation endpoint. | https://translate.da.live/google |
translation.service.{env}.link |
Reference URL shown to authors. | https://cloud.google.com/translate/docs/overview |
Smartling
Smartling requires an account. Samples expose stage and prod.
| Key | Description | Example |
translation.service.{env}.origin |
Smartling proxy endpoint. | https://translate.da.live/smartling |
translation.service.{env}.link |
Smartling dashboard URL shown to authors. | https://dashboard.smartling.com/app/accounts/{ACCOUNT_ID}/account-jobs/ |
translation.service.{env}.authEndpoint |
Authentication endpoint. | https://api.smartling.com |
translation.service.{env}.accountId |
Smartling account identifier, used to look up available projects and workflows. | {ACCOUNT_ID} |
translation.service.{env}.projectId |
Smartling project identifier. If accountId isn't set, this is used instead to look up the account. |
{PROJECT_ID} |
translation.service.{env}.userIdentifier |
Smartling user identifier. | {USER_IDENTIFIER} |
translation.service.{env}.userSecret |
Smartling user secret. | {USER_SECRET} |
translation.service.{env}.autoAuthorize |
Optional. Set to yes to automatically authorize the translation batch on creation, skipping manual authorization in Smartling's dashboard. Any other value, or omitting the key, preserves the default (manual authorization). |
yes |
The Project, Auto-authorize, and Workflow fields in the Translate app's Options step are populated from Smartling once connected.
Lionbridge
Lionbridge requires an account. Samples use one prod environment.
| Key | Description | Example |
translation.service.{env}.apiEndpoint |
Content API endpoint. | https://content-api.lionbridge.com/v2 |
translation.service.{env}.authEndpoint |
Authentication endpoint. | https://login.lionbridge.com/connect/token |
translation.service.{env}.clientId |
Lionbridge client ID. | {CLIENT_ID} |
translation.service.{env}.clientSecret |
Lionbridge client secret. | {CLIENT_SECRET} |
translation.service.{env}.providerId |
Provider identifier assigned during Lionbridge account setup. | {PROVIDER_ID} |
Trados
Trados authenticates with OAuth and uses one prod environment in the samples.
| Key | Description | Example |
translation.service.{env}.apiEndpoint |
Language Cloud API URL. | https://lc-api.sdl.com/public-api/v1 |
translation.service.{env}.authEndpoint |
OAuth token URL. | https://sdl-prod.eu.auth0.com/oauth/token |
translation.service.{env}.clientId |
OAuth client ID. | {CLIENT_ID} |
translation.service.{env}.clientSecret |
OAuth client secret. | {CLIENT_SECRET} |
translation.service.{env}.tenantId |
Trados tenant identifier. | {TENANT_ID} |
translation.service.{env}.audience |
OAuth audience. | https://api.sdl.com |
Protect service credentials
Credentials can be stored in the main config, but a separate sheet is recommended when secrets require tighter access.
- Create
.da/translate-keys.json - Add only the provider's credential keys
- Set
translation.service.key.pathto its Admin API source URL.
Keep endpoints, project identifiers, and other non-secret settings in .da/translate.
Conflict behavior
Each value is a comma-separated set of choices. The first is the project default. overwrite replaces destination content and merge preserves regional edits where possible.
| Key | Applies when |
sync.conflict.behavior |
Sources are synced to the translation source folder. |
translate.conflict.behavior |
Translated content returns from the service. |
copy.conflict.behavior |
A source is copied into a region. |
rollout.conflict.behavior |
Content is rolled out to a locale. |
Source, completion, and custom options
| Key | Description |
source.language |
Name of the language treated as the source of truth. It must match a row in languages. |
complete.aem.preview |
Automatically preview completed documents unless merge conflicts exist. |
complete.aem.publish |
Automatically publish completed documents unless merge conflicts exist. |
translation.service.supports.duedate |
Set to yes to show a due-date option supported by the service. |
Connectors can add fields to project options with translation.service.custom.{type}.{name}. Supported controls include option, boolean, and textarea. Other types render as text fields. Option values are pipe-separated and can use label=value.
languages tab
| Column | Description |
name |
Display name, referenced by source.language. |
code |
Language or locale code. |
location |
Folder containing the language's content. |
actions |
Comma-separated actions (Translate, Copy, Rollout). Skip is always available. |
locales |
Comma-separated locale paths available for rollout. |
default locales |
Optional locale subset selected by default. |
source |
Optional content path override for this row. |
source language |
Optional name of another row in languages that this row depends on. Unlike source, this holds the row back from translation until its dependency completes, then submits it automatically. |
trados location, trados project template |
Trados target folder and project-template ID. |
Do-not-translate tabs
custom-doc-rules
Use block and rule columns to control document blocks. Rules support dnt, do-not-translate, and translate; column, row, cell, range, and negative-index targets; and if or unless conditions.
| Block | Rule | Result |
section-metadata |
do-not-translate |
Preserve the entire block. |
metadata |
translate col 2 if col 1 is "title" or "description" |
Translate selected metadata values only. |
columns |
dnt col -1 |
Preserve the final column. |
dnt-content-rules
The content column contains exact strings that remain untranslated wherever they appear, such as product names, paths, or color values.
dnt-sheet-rules
Use pattern and action columns to preserve matching spreadsheet or JSON values. Conditions include equals, beginsWith, and exists; separate alternatives with ||.
dnt
Use dnt-sheet and dnt-columns to exclude whole JSON sheets or named columns. Asterisks apply to all sheets or all columns. System columns such as :translate, :uid, :rollout, and :regional are excluded automatically, and :translate set to no skips a row.