PHPackages                             itech-world/sulu-translator-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. itech-world/sulu-translator-bundle

ActiveSulu-bundle[Admin Panels](/categories/admin)

itech-world/sulu-translator-bundle
==================================

DeepL translation integration for Sulu CMS 3.x admin interface

v1.0.0(4mo ago)20MITJavaScriptPHP ^8.2

Since Feb 13Pushed 4mo agoCompare

[ Source](https://github.com/steeven-th/SuluTranslatorBundle)[ Packagist](https://packagist.org/packages/itech-world/sulu-translator-bundle)[ RSS](/packages/itech-world-sulu-translator-bundle/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (3)Versions (3)Used By (0)

 [![Itech World logo](./doc/images/logo.png)](./doc/images/logo.png)

Translator Bundle for [Sulu](https://sulu.io)
=============================================

[](#translator-bundle-for-sulu)

### Developed by [Steeven THOMAS](https://github.com/steeven-th)

[](#developed-by-steeven-thomas)

 [ ![GitHub license](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e) ](LICENSE) [ ![Sulu compatibility](https://camo.githubusercontent.com/34064f3c25a97dd4eaa0bfb7da870c3b6ec1e8c0d16c8d347a37a2556918bd4d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73756c755f636f6d7061746962696c6974792d2533453d332e302d6379616e) ](https://sulu.io/)

SuluTranslatorBundle integrates [DeepL](https://www.deepl.com/) automatic translation into the Sulu CMS 3.x admin interface. Translate your page and article content with a single click, directly from the edit form.

📂 Requirements
--------------

[](#-requirements)

- PHP ^8.2
- Sulu ^3.0
- A [DeepL API key](https://www.deepl.com/pro-api) (Free or Pro)

🛠️ Features
-----------

[](#️-features)

- **Per-field translation button** on `text_line`, `text_area` and `text_editor` fields
- **Bulk "Translate all" button** in the form toolbar to translate every text field at once
- **Auto-detection** of the source language by DeepL
- **Target language** automatically set to the locale selected in the admin dropdown
- **Undo button** to revert a translation to the previous value
- **HTML preservation** for rich text fields (CKEditor content)
- **DeepL usage statistics** page in admin settings (account type, billing period, character usage)
- **Permission-based access** to the statistics page via Sulu role system
- **Pages and articles** support

🇬🇧 Available translations
-------------------------

[](#-available-translations)

- English
- French
- German

📦 Dependencies
--------------

[](#-dependencies)

- [Deepl PHP](https://github.com/DeepLcom/deepl-php)

📝 Installation
--------------

[](#-installation)

### Composer

[](#composer)

```
composer require itech-world/sulu-translator-bundle
```

### Symfony Flex

[](#symfony-flex)

If you don't use Symfony Flex, you can add the bundle to your `config/bundles.php` file:

```
return [
    // ...
    ItechWorld\SuluTranslatorBundle\ItechWorldSuluTranslatorBundle::class => ['all' => true],
];
```

### Configuration

[](#configuration)

#### Step 1: Configure your DeepL API key

[](#step-1-configure-your-deepl-api-key)

Add your DeepL API key to your `.env` or `.env.local` file:

```
DEEPL_API_KEY=your_deepl_api_key_here
```

#### Step 2: Create the bundle configuration

[](#step-2-create-the-bundle-configuration)

Create the file `config/packages/itech_world_sulu_translator.yaml`:

```
itech_world_sulu_translator:
    deepl_api_key: "%env(DEEPL_API_KEY)%"
    locale_mapping:
        en: "en-GB"
        fr: "fr"
        de: "de"
```

> **Note:** The `locale_mapping` is optional. It maps Sulu locale codes to DeepL language codes. If a locale is not mapped, it will be converted to uppercase automatically (e.g. `fr` becomes `FR`). See [DeepL supported languages](https://developers.deepl.com/docs/resources/supported-languages) for valid codes.

#### Step 3: Register the admin JavaScript

[](#step-3-register-the-admin-javascript)

Edit the `assets/admin/app.js` to add the bundle in imports:

```
import 'sulu-itech-world-sulu-translator-bundle';
```

#### Step 4: ***BACK*** &amp; Build admin assets

[](#step-4-back--build-admin-assets)

Edit the `assets/admin/package.json` to add the bundle to the list of bundles:

```
{
    "dependencies": {
        // ...
      "sulu-itech-world-sulu-translator-bundle": "file:../../vendor/itech-world/sulu-translator-bundle",
    }
}
```

In the `assets/admin/` folder, run the following command:

```
npm install
npm run build
```

or

```
yarn install
yarn build
```

#### Step 5: Clear cache

[](#step-5-clear-cache)

```
php bin/adminconsole cache:clear
```

🔤 Per-field Translation
-----------------------

[](#-per-field-translation)

Once installed, a **translate button** (language icon) appears on every `text_line`, `text_area` and `text_editor` field in the page and article edit forms.

1. Select the **target language** in the Sulu locale dropdown (top of the page)
2. Click the **translate button** on any field
3. The field content is sent to DeepL and replaced with the translation
4. A **green checkmark** confirms the translation, and a **red undo button** appears next to it to revert to the original value

After translating individual fields, the green checkmark and red undo button are shown side by side:

[![Page with some fields translated — checkmark and undo buttons](./doc/images/page-partial-translate.png)](./doc/images/page-partial-translate.png)

🌍 Bulk Translation
------------------

[](#-bulk-translation)

A **"Translate all"** button is available in the form toolbar:

1. Select the target language in the locale dropdown
2. Click **"Translate all"** in the toolbar
3. Confirm the action in the dialog
4. All text fields are translated simultaneously

[![Bulk translate confirmation dialog](./doc/images/page-before-translate-confirm.png)](./doc/images/page-before-translate-confirm.png)

[![Page with all fields translated](./doc/images/page-total-translate.png)](./doc/images/page-total-translate.png)

[![Page before translation — translate buttons visible on each field](./doc/images/page-before-translate.png)](./doc/images/page-before-translate.png)

📊 DeepL Usage Statistics
------------------------

[](#-deepl-usage-statistics)

The bundle provides a settings view accessible under **Settings &gt; DeepL Translator**, showing your DeepL API usage:

- **Account type** badge (Free or Pro)
- **Billing period** dates (Pro accounts only)
- **Characters used** vs. plan limit with a visual progress bar (green / yellow / red)
- **Refresh** button and direct link to your DeepL dashboard

[![DeepL usage statistics page](./doc/images/deepl-stats.png)](./doc/images/deepl-stats.png)

### Permissions

[](#permissions)

Access to the statistics page is controlled by the Sulu permission system. A **"translator"** entry appears under **Settings** in the role permissions. Enable the **View** permission to grant access.

[![Translator permission in role settings](./doc/images/deepl-stats-permission.png)](./doc/images/deepl-stats-permission.png)

📋 Supported Field Types
-----------------------

[](#-supported-field-types)

Sulu Field TypeSupportNotes`text_line`✅[Single-line text input](https://docs.sulu.io/3.x/reference/property-types/text_line.html)`text_area`✅[Multi-line text area](https://docs.sulu.io/3.x/reference/property-types/text_area.html)`text_editor`✅[Rich text](https://docs.sulu.io/3.x/reference/property-types/text_editor.html)🔌 REST API Endpoints
--------------------

[](#-rest-api-endpoints)

The bundle exposes two admin API endpoints:

MethodEndpointDescription`POST``/admin/api/translator/translate`Translate text content`GET``/admin/api/translator/usage`Get DeepL API usage stats### POST /admin/api/translator/translate

[](#post-adminapitranslatortranslate)

**Request body:**

```
{
    "text": "Bonjour le monde",
    "target": "en",
    "source": "fr",
    "html": false
}
```

FieldTypeRequiredDescription`text`stringYesText content to translate`target`stringYesTarget Sulu locale code`source`stringNoSource language (auto-detected if omitted)`html`booleanNoSet to `true` for rich text fields to preserve HTML markup**Response:**

```
{
    "translation": "Hello world"
}
```

### GET /admin/api/translator/usage

[](#get-adminapitranslatorusage)

**Response:**

```
{
    "character_count": 42500,
    "character_limit": 500000,
    "account_type": "free",
    "start_time": null,
    "end_time": null
}
```

> **Note:** `start_time` and `end_time` are only returned for Pro accounts. Free accounts will receive `null` for these fields.

🐛 Bug and Idea
--------------

[](#-bug-and-idea)

See the [open issues](https://github.com/steeven-th/SuluTranslatorBundle/issues) for a list of proposed features (and known issues).

💰 Support me
------------

[](#-support-me)

You can buy me a coffee to support me **this plugin is 100% free**.

[Buy me a coffee](https://www.buymeacoffee.com/steeven.th)

👨‍💻 Contact
-----------

[](#‍-contact)

[![](https://avatars.githubusercontent.com/u/82022828?s=96&v=4)](https://steeven-th.dev)[![x.com](./doc/images/x.webp)](https://x.com/ThomasSteeven2)[![Linkedin](./doc/images/linkedin.png)](https://www.linkedin.com/in/steeven-thomas-221b02b8/)

📘 License
---------

[](#-license)

This bundle is under the [MIT License](LICENSE).

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance74

Regular maintenance activity

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

141d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/15d31371355db522b06ffd73f8be76e32972f145390b1eba33b190c7fd412413?d=identicon)[steeven-th](/maintainers/steeven-th)

---

Top Contributors

[![steeven-th](https://avatars.githubusercontent.com/u/82022828?v=4)](https://github.com/steeven-th "steeven-th (11 commits)")

---

Tags

translationcmsadmindeeplsulu

### Embed Badge

![Health badge](/badges/itech-world-sulu-translator-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/itech-world-sulu-translator-bundle/health.svg)](https://phpackages.com/packages/itech-world-sulu-translator-bundle)
```

###  Alternatives

[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k17.9M388](/packages/easycorp-easyadmin-bundle)[sulu/skeleton

Project template for starting your new project based on the Sulu content management system

29735.5k](/packages/sulu-skeleton)[2lenet/crudit-bundle

The easy like Crud'it Bundle.

1616.4k14](/packages/2lenet-crudit-bundle)[rcsofttech/audit-trail-bundle

Enterprise-grade, high-performance Symfony audit trail bundle. Automatically track Doctrine entity changes with split-phase architecture, multiple transports (HTTP, Queue, Doctrine), and sensitive data masking.

1189.8k](/packages/rcsofttech-audit-trail-bundle)[fsi/admin-bundle

FSi Admin Bundle. Admin generator for Symfony.

5850.7k8](/packages/fsi-admin-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
