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(3mo ago)20MITJavaScriptPHP ^8.2

Since Feb 13Pushed 3mo 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 1mo ago

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

36

—

LowBetter than 82% of packages

Maintenance82

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity47

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

95d 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

[sulu/skeleton

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

29733.3k](/packages/sulu-skeleton)[kunstmaan/admin-bundle

The Kunstmaan Admin bundle supplies your project with a basic, elegant backend interface you can modify and extend so you can make your perfect admin module. The clean interface makes it straightforward for you and the people working with it to change settings and modify content.

58149.5k20](/packages/kunstmaan-admin-bundle)[sulu/article-bundle

Bundle for managing localized content-rich entities like blog-posts in the Sulu content management system

66409.6k2](/packages/sulu-article-bundle)[fsi/admin-bundle

FSi Admin Bundle. Admin generator for Symfony.

5849.2k7](/packages/fsi-admin-bundle)

PHPackages © 2026

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