> ## Documentation Index
> Fetch the complete documentation index at: https://support.lilt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# AEM

LILT's connector for [Adobe Experience Manager](https://www.adobe.io/apis/experiencecloud/aem.html) (AEM) enables companies to automatically push and pull web content between AEM and LILT for translation. The connector supports both **AEM 6.5 (on-premise)** and **AEM as a Cloud Service (AEMaaCS)**.

Once installed, content authors can create translation submissions directly from the **Lilt Translations** app within AEM — selecting pages, assets, tags, and target languages — and the connector handles sending content to LILT and importing completed translations back into AEM.

## Supported Content Types

| Content Type                 | AEM 6.5 | AEMaaCS     |
| ---------------------------- | ------- | ----------- |
| Content Pages                | ✅       | ✅           |
| Experience Fragments         | ✅       | ✅           |
| Experience Fragment Variants | ✅       | ✅           |
| Content Fragments            | ✅       | ✅           |
| Content Fragment Variants    | ❌       | ✅ (v1.5.0+) |
| Assets Metadata              | ✅       | ✅           |
| Tags                         | ✅       | ✅           |

## Installation

Installation methods depend on your AEM environment. In both cases, contact your LILT account team to obtain the connector package and the appropriate version for your environment.

<Note>
  Check with your LILT account team for the latest connector version.
</Note>

### AEM as a Cloud Service

For AEMaaCS, the connector package must be deployed through your source code repository. AEM Cloud Service only allows one repository to be deployed at a time, so the LILT connector package must be embedded into your project's `all` package.

There are two deployment options:

**Option 1: Maven Dependency**

This method links your AEM project to the LILT connector repository via Maven. At a high level:

1. Create a GitHub Personal Access Token with `repo` and `write:packages` scopes.
2. Add a Maven settings file (`.cloudmanager/maven/settings.xml`) with your GitHub credentials.
3. Add the LILT connector repository and dependency to your root `pom.xml`.
4. Add the dependency and embedded package configuration to your `all/pom.xml`.
5. Deploy via Cloud Manager.

Your LILT account team will provide the specific repository URL, artifact coordinates, and version number to use.

**Option 2: Local Package File**

If you prefer not to connect to the Maven repository, you can deploy from a local copy of the connector package:

1. Obtain the connector `.zip` file from your LILT account team.
2. Create a `local-repo` directory in your AEM project and copy the package there.
3. Add a local repository reference to your root `pom.xml`.
4. Add the dependency and embedded package configuration to your `all/pom.xml`.
5. Commit the `local-repo` directory and deploy via Cloud Manager.

### AEM 6.5 (On-Premise)

For AEM 6.5, there are two installation methods:

**Option 1: Manual Package Upload (Quick Setup)**

1. Obtain the connector `.zip` file (e.g., `lilt-connector.all-<version>-6.5.zip`) from your LILT account team.
2. Log into your AEM Author instance and navigate to **Tools** > **Deployment** > **Packages** (or access Package Manager directly at `http://<your-aem-host>:<port>/crx/packmgr/index.jsp`).
3. Click **Upload Package**, select the `.zip` file, and click **OK**.
4. Locate the uploaded package in the list and click **Install**.
5. Keep the default installation settings and click **Install** to confirm.

<Note>
  The connector package installs 4 components. Verify all 4 are successfully installed. If upgrading, uninstall the previous version before uploading the new package.
</Note>

**Option 2: Maven Deployment**

Follow the same Maven approach as AEM Cloud Service Option 1, with two key differences:

* Use the `-6.5` version classifier (e.g., `1.5.0-6.5` instead of `1.5.0-cloud`).
* In `all/pom.xml`, use `<subpackages>` instead of `<embeddeds>` in the `filevault-package-maven-plugin` configuration.

### Verifying Installation

After installation completes on either environment:

1. Check that the package status shows as **Installed** in Package Manager.
2. Navigate to the AEM Apps view.
3. Verify that the **Lilt Translations** app appears in the apps list.

## Configuration

After installing the connector, you must complete configuration on both the LILT side (Connectors Builder) and the AEM side (Lilt Translations app) before you can submit content for translation.

### Step 1: Set Up the Connector in Connectors Builder

<Note>
  The AEM connector must be configured with support from LILT's technical support team using Connectors Admin and Connectors Builder — not through the AEM UI alone.
</Note>

1. Have your LILT technical point-of-contact generate a new API token for this connector in connectors admin and save it — you'll need it for the AEM configuration.
2. Give your LILT technical point-of-contact the list of languages (and models/data sources if applicable) you would like to use for translation. They will configure these in your LILT Connectors Builder.

### Step 2: Access the Lilt Translations App

1. Open your AEM instance.
2. Navigate to the **AEM Apps** view.
3. Click on the **Lilt Translations** app.

This is your main interface for configuring the connector. **Both the Configurations and Repositories sections must be set up before you can create any translation submissions.**

### Step 3: Configure General Settings

Navigate to **Configurations > General** and enter the following:

| Setting                        | Value                                                                          |
| ------------------------------ | ------------------------------------------------------------------------------ |
| **Web Services URL**           | `https://connectors-admin.lilt.com/api/v1.0`                                   |
| **Lilt API Token**             | The token you generated in Connectors Admin                                    |
| **Scheduler Period (Minutes)** | How often AEM should poll the LILT API for completed translations (e.g., `15`) |

You will also need to configure the **Translate Assets** setting, which controls how images, documents, and other digital assets are handled during translation:

* **Clone asset to target language**: Creates a separate copy of each asset for every target language. Use this if you need different asset versions per language.
* **Append translatable fields to existing asset**: Keeps a single copy of each asset and adds translated metadata (title, description, etc.) for each language. Use this to manage all language versions in one place.

### Step 4: Configure Proxy Settings (Optional)

If your organization requires outgoing traffic to go through a proxy server, navigate to **Configurations > Proxy** and enter the proxy host, port, and credentials. Enable the proxy toggle to activate it. Most users can leave this section blank.

### Step 5: Configure Auto-Archiving (Optional)

Navigate to **Configurations > Auto-Archiving** to automatically archive old or completed translation jobs. You can set the frequency (Never, Weekly, or Monthly) and choose which job statuses should be archived (e.g., Completed, Failed, Canceled). This is especially helpful for teams with a high volume of translation jobs.

### Step 6: Configure Functionality

Depending on the version of AEM you are currently running, you will have access to a functionality tab which modifies the default views and functionalities available in repositories and job submission.

<Frame>
  <img src="https://mintcdn.com/lilt-db26f913/zo7y-DtZiKi-aIHI/images/Screenshot-2026-05-13-at-9.55.53-am.png?fit=max&auto=format&n=zo7y-DtZiKi-aIHI&q=85&s=da4a04d4476266d567c99a6648b77286" alt="Screenshot 2026 05 13 At 9 55 53 Am" width="833" height="530" data-path="images/Screenshot-2026-05-13-at-9.55.53-am.png" />
</Frame>

### Step 7: Create a Repository

A **repository** defines which content in AEM is available for translation and how it should be processed. You must create at least one repository before you can submit content for translation.

Navigate to **Repositories** and click **Create New Repository**.

#### Basics

* **Name**: A friendly name for your repository (e.g., "Main Site").
* **Path**: The root path in AEM where translatable content lives (e.g., `/content/wknd`). Only content under this path will be available for translation through this repository.
* **Default Submission Status**: The initial status for new submissions — `NOT_READY` (requires review before sending) or `READY` (can be sent immediately).
* **Submission Name Pattern**: A template for how submission names are generated (see [Submission Pattern Name](#submission-pattern-name) below).

#### Translation Rules

**Transformation Rules** define how source content paths and languages map to target locations. Each rule maps a source path to a target language and target path:

```text theme={null}
/content/site/en > de:/content/site/de
/content/site/en > fr:/content/site/fr
/content/site/en > es:/content/site/es
```

##### **Transformation Rule Validation**

Starting with AEM Cloud connector version 1.7.0, the connector can validate your transformation rules at key points in the workflow — when saving a repository and when starting a submission — so configuration issues are caught before content is sent for translation. To enable this functionality, you will need to toggle on the following functionalities in the configurations modal.

* Validate submission transformation rules
* Validate content path
* Restrict rule languages to domain
* New design experience

##### **What Gets Validated**

* **When saving a repository**, the connector checks that your transformation rules are well-formed and that source paths map to valid target language and path combinations.
  <Frame>
    <img src="https://mintcdn.com/lilt-db26f913/zo7y-DtZiKi-aIHI/images/Screenshot-2026-05-11-at-3.28.36-pm.png?fit=max&auto=format&n=zo7y-DtZiKi-aIHI&q=85&s=412de7651bf7d7904cdee10cead686a4" alt="Screenshot 2026 05 11 At 3 28 36 Pm" width="726" height="435" data-path="images/Screenshot-2026-05-11-at-3.28.36-pm.png" />
  </Frame>
  * **When starting a submission**, the connector checks that every content path in the submission has a matching transformation rule for each selected target language. If a target language is missing a rule, the connector will flag the issue and suggest how to resolve it — for example, by adding the missing language mapping to your repository's transformation rules.
    <Frame>
      <img src="https://mintcdn.com/lilt-db26f913/zo7y-DtZiKi-aIHI/images/Screenshot-2026-05-11-at-3.36.23-pm.png?fit=max&auto=format&n=zo7y-DtZiKi-aIHI&q=85&s=21490dc600c721d2979dc4b8a13becc4" alt="Screenshot 2026 05 11 At 3 36 23 Pm" width="713" height="434" data-path="images/Screenshot-2026-05-11-at-3.36.23-pm.png" />
    </Frame>

##### **Redesigned Transformation Rules Editor**

Alongside validation, cloud version 1.7.0 includes a redesigned transformation rules editor in the repository configuration. The new editor provides a clearer view of your source-to-target path mappings, making it easier to spot gaps and configure rules correctly.

##### **Disabling Validation**

If your setup uses custom content structures that don't follow standard path conventions, you can disable path validation in the 'Configurations> Functionality'. In most cases, we recommend keeping validation enabled.

**Link Rewriting Rules** (optional) control how internal links are rewritten during translation to point to the correct target-language pages:

```text theme={null}
content@href="@html"@*
text@href="@html"@*
```

**Translate Properties** specify which AEM properties (like `jcr:title`, `jcr:description`, etc.) should be included for translation. You can also set optional character limits:

```text theme={null}
jcr:title@*
jcr:description@*@50
text@*
```

**Do Not Translate Properties** lets you exclude specific content paths or resources from translation:

```text theme={null}
/content/site/en/secret-page
/content/site/en/drafts/*
```

#### Automation (Optional)

If you want translation submissions to be created automatically on a schedule, configure the automation time, frequency (daily or weekly), and other submission parameters. Select "Don't send automatically" to disable this feature.

## Submitting Content for Translation

Once configuration is complete, you can create translation submissions from the **Lilt Translations** app in AEM.

### Creating a Submission

Navigate to **Submissions** and click **Create New Submission**. The submission wizard has three steps:

<Frame>
  <img src="https://mintcdn.com/lilt-db26f913/zo7y-DtZiKi-aIHI/images/Screenshot-2026-05-11-at-5.14.45-pm.png?fit=max&auto=format&n=zo7y-DtZiKi-aIHI&q=85&s=336be0a3222193a2d3af4946cc955ef3" alt="Screenshot 2026 05 11 At 5 14 45 Pm" width="552" height="809" data-path="images/Screenshot-2026-05-11-at-5.14.45-pm.png" />
</Frame>

**1. Job Setup**

* **Submission Name**: A name to identify this submission in the list.
* **Repository**: Select which repository to use (determines available content and rules).
* **Project Name**: Select the domain from your LILT organization.
* **Source Language**: The language of the original content (filtered by the selected domain).
* **Target Languages**: One or more languages to translate into (filtered by domain and source language with Cloud 1.7).
* **Due Date** (optional): Set a deadline for the translation.
* **Purchase Order / JIRA Ticket** (optional): Add tracking or billing information.
* Choose whether to translate **assets** and **tags** alongside pages.

**2. Content Selection**

* **Content Paths**: Choose the path(s) to send for translation.
* **Include Children** (optional): Include all subpages under the chosen path, so you can translate an entire section at once.

**3. Review**

* Review all selections — job details, content, and settings.
* Go back to previous steps if changes are needed.
* Click **Save Submission** to create the submission.

### Starting a Submission

After saving, the submission appears in the submissions list. To send it for translation:

1. Click the submission to view its details.
2. Review the selected content, languages, and settings.
3. Click **Start Submission** to send the job to LILT.
4. The status will update as the job progresses: `SENDING` → `IN_PROGRESS` → `COMPLETE`.

### Importing Translated Content

Once the translation is complete, import the results back into AEM:

1. When the submission status shows **Import Complete**, the **Reimport Content** button becomes available in the submission detail view.
2. Click **Reimport Content** to bring the translated pages, assets, and tags into your AEM instance.
3. The connector places translations according to your repository's transformation rules.

## FAQ / Troubleshooting

<AccordionGroup>
  <Accordion title="The Lilt Translations app is not visible after installation">
    * Verify the package was installed successfully in Package Manager and that all 4 components are present.
    * Check that the package status shows as **Installed**.
    * Restart AEM and check again.
    * Review AEM error logs for installation issues.
  </Accordion>

  <Accordion title="Cannot connect to the LILT API">
    * Verify the Web Services URL is exactly: `https://connectors-admin.lilt.com/api/v1.0`
    * Check that the API token is correct and has no extra spaces.
    * Confirm the token was generated in Connectors Builder for this specific connector.
    * Test network connectivity from your AEM instance to `connectors-admin.lilt.com`.
    * Check that firewall rules allow outbound HTTPS traffic.
    * If using a proxy, verify the proxy settings in the connector configuration are correct.
  </Accordion>

  <Accordion title="My submission is stuck in SENDING or IN_PROGRESS status">
    This may indicate a sync issue between AEM and LILT. Contact your LILT account team for support, or submit a request through the [LILT Help Center](https://lilt.atlassian.net/servicedesk/customer/portal/3).
  </Accordion>

  <Accordion title="Translated content appears in the wrong location">
    Check your repository's **Transformation Rules**. Ensure the source path and target language codes match your AEM content structure. For example, if your English content is at `/content/site/en`, verify the rules correctly map to the expected target paths like `/content/site/de` or `/content/site/fr`.
  </Accordion>

  <Accordion title="Source text appears in the translated output">
    * Verify your **Translate Properties** configuration includes all the properties that need translation.
    * Check that the content you submitted is under the correct source language path defined in your transformation rules.
  </Accordion>

  <Accordion title="I need to cancel a translation job">
    Contact your LILT account team immediately for cancellations. They can cancel the job in LILT and help you clean up the submission in AEM.
  </Accordion>

  <Accordion title="Source content was updated after submission">
    Notify your LILT account team of any source changes. They will work with you to ensure the correct content is translated and returned.
  </Accordion>

  <Accordion title="We do quality reviews outside of LILT and have corrections to apply">
    Contact your LILT account team. If a delivered project requires changes, they will walk you through the process to cancel the submission in AEM so that LILT can redeliver the files after implementing your modifications.
  </Accordion>
</AccordionGroup>

## Submission Pattern Name

When you create or edit a repository, you can create or modify the naming conventions of the submission name.

You can add the following variables to the submission name, making sure they are surrounded by curly brackets:

* **today** — Today's date, formatted as YYYY-MM-DD.
* **filename** — The name of the current file being uploaded.
* **project\_prefix** — The `project_prefix` value provided in the configuration.
* **project\_name** — The `project_name` value assigned to the file in the code.
* **connector\_id** — The Connector ID.
* **connector\_type** — The Connector Type (e.g., "aem").
* **path\_names\[index]** — Specifies the name of the directory at the given level above the file being uploaded. The index corresponds to the directory level, starting from 0 for the file itself. For example, given the filename `en-US/fr-FR/file.txt` and the template option `path_names[2]`, the result will be `en-US`, as it is the second-level parent directory above the file.
