PHPackages                             digitalpulsebe/craft-deepl-translator - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. digitalpulsebe/craft-deepl-translator

ActiveCraft-plugin[Utility &amp; Helpers](/categories/utility)

digitalpulsebe/craft-deepl-translator
=====================================

Translate content of elements using the external services

2.25.0(1mo ago)3150↓33.3%10[3 issues](https://github.com/digitalpulsebe/craft-multi-translator/issues)proprietaryPHPCI passing

Since Oct 12Pushed 1mo ago2 watchersCompare

[ Source](https://github.com/digitalpulsebe/craft-multi-translator)[ Packagist](https://packagist.org/packages/digitalpulsebe/craft-deepl-translator)[ RSS](/packages/digitalpulsebe-craft-deepl-translator/feed)WikiDiscussions develop Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (106)Used By (0)

Multi Translator
================

[](#multi-translator)

Translate your site content using Deepl, Google Translate or ChatGPT.

Requirements
------------

[](#requirements)

This plugin requires Craft CMS 4 or Craft CMS 5.

Installation
------------

[](#installation)

You can install this plugin from the [Plugin Store](https://plugins.craftcms.com/multi-translator) or with Composer.

#### From the Plugin Store

[](#from-the-plugin-store)

Go to the Plugin Store in your project’s Control Panel and search for “Multi Translator”. Then press “Install”.

#### With Composer

[](#with-composer)

Open your terminal and run the following commands:

```
composer require digitalpulsebe/craft-multi-translator -w && php craft plugin/install multi-translator
```

when using DDEV:

```
ddev composer require digitalpulsebe/craft-multi-translator -w && ddev exec php craft plugin/install multi-translator
```

Translation Services
--------------------

[](#translation-services)

For now, we support these API services:

- Deepl - Create your account at [Deepl](https://www.deepl.com/nl/pro-api) to get an API Key
    - with support for [Glossaries](#manage-glossaries)
- Google Cloud Translation v2 - Create an API key in your [Cloud Console](https://console.cloud.google.com/)
- Google Cloud Translation v3 - Create a Service Account your [Cloud Console](https://console.cloud.google.com/iam-admin/serviceaccounts)
- OpenAI (ChatGPT) - Create an API key in at [OpenAI](https://platform.openai.com/)

Roadmap
-------

[](#roadmap)

Please let us know which API's and features are desired for this plugin!

Plugin Settings
---------------

[](#plugin-settings)

Configure options in the Craft control panel settings

[![Screenshot](resources/img/screenshot_settings.png)](resources/img/screenshot_settings.png)

Permissions
-----------

[](#permissions)

For non-admin users, enable permissions under the 'Multi Translator' section:

- 'Manage settings'
    - this will allow CMS users to enter an API key an edit general settings
- 'Translate Content'
    - enables the element actions to [translate one-by-one](#translate-one-by-one)
- 'Translate Content in bulk (element action)'
    - enables the bulk actions to [translate one-by-one](#translate-in-bulk)

Supported field types
---------------------

[](#supported-field-types)

- craft\\fields\\PlainText
- craft\\fields\\Table
- craft\\redactor\\Field
- craft\\ckeditor\\Field
- craft\\fields\\Link
- verbb\\vizy\\fields\\VizyField
- craft\\fields\\Matrix (recursive)
- benf\\neo\\Field (recursive)
- verbb\\supertable\\fields\\SuperTableField (recursive)
- verbb\\hyper\\fields\\HyperField
- nystudio107\\seomatic\\fields\\SeoSettings
- ether\\seo\\fields\\SeoField

Usage
-----

[](#usage)

There are two ways to trigger a translation.

### Translate one-by-one

[](#translate-one-by-one)

1. Navigate to the entry on the desired source site/language.
2. Use the buttons in the sidebar and select the target language.

(you can reverse this flow by setting the default direction in the configuration)

[![Screenshot](resources/img/screenshot_sidebar.png)](resources/img/screenshot_sidebar.png)

### Translate in bulk

[](#translate-in-bulk)

1. Navigate to overview of entries you want to get translated.
2. Select the entries in the source language.
3. Use the 'Translate to' dropdown in the actions bar and choose the target language
4. A queue job will be started

[![Screenshot](resources/img/screenshot_actions.png)](resources/img/screenshot_actions.png)

### Manage Glossaries

[](#manage-glossaries)

When using DeepL API, you can add a glossary for [supported language pairs](https://developers.deepl.com/docs/api-reference/glossaries). When translating, the plugin will search a glossary for the appropriate source and target language. There can only be **one glossary for each language pair**.

[![Screenshot](resources/img/screenshot_glossaries.png)](resources/img/screenshot_glossaries.png)

Extending with events
---------------------

[](#extending-with-events)

You can add your own logic by listening to these events:

### The `beforeElementTranslation` event

[](#the-beforeelementtranslation-event)

Example:

```
use digitalpulsebe\craftmultitranslator\events\ElementTranslationEvent;
use digitalpulsebe\craftmultitranslator\services\TranslateService;

Event::on(
    TranslateService::class,
    TranslateService::EVENT_BEFORE_ELEMENT_TRANSLATION,
    function (ElementTranslationEvent $event) {
        $sourceElement = $event->sourceElement;
        $sourceSite = $event->sourceSite;
        $targetSite = $event->targetSite;

        if ($sourceSite->handle == 'disabledSite') {
            $event->isValid = false; // cancel translation for this scenario
        }
    }
);
```

### The `afterElementTranslation` event

[](#the-afterelementtranslation-event)

Example:

```
use digitalpulsebe\craftmultitranslator\events\ElementTranslationEvent;
use digitalpulsebe\craftmultitranslator\services\TranslateService;
use digitalpulsebe\craftmultitranslator\MultiTranslator;

Event::on(
    TranslateService::class,
    TranslateService::EVENT_AFTER_ELEMENT_TRANSLATION,
    function (ElementTranslationEvent $event) {
        $event->targetElement->slug = MultiTranslator::getInstance()->translate->translateText(
            $event->sourceSite->language,
            $event->targetSite->language,
            $event->sourceElement->slug
        );
    }
);
```

### The `beforeFieldTranslation` event

[](#the-beforefieldtranslation-event)

Example:

```
use digitalpulsebe\craftmultitranslator\events\FieldTranslationEvent;
use digitalpulsebe\craftmultitranslator\services\TranslateService;

Event::on(
    TranslateService::class,
    TranslateService::EVENT_BEFORE_FIELD_TRANSLATION,
    function (FieldTranslationEvent $event) {
        if ($event->field->handle == 'fieldTable') {
            $event->isValid = false; // cancel translation for this field
        }
    }
);
```

### The `afterFieldTranslation` event

[](#the-afterfieldtranslation-event)

Example:

```
use digitalpulsebe\craftmultitranslator\events\FieldTranslationEvent;
use digitalpulsebe\craftmultitranslator\services\TranslateService;

Event::on(
    TranslateService::class,
    TranslateService::EVENT_AFTER_FIELD_TRANSLATION,
    function (FieldTranslationEvent $event) {
        if ($event->field->handle == 'body') {
            $event->translatedValue = 'CUSTOM VALUE';
        }
    }
);
```

###  Health Score

46

—

FairBetter than 93% of packages

Maintenance79

Regular maintenance activity

Popularity18

Limited adoption so far

Community21

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 96.6% 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

Every ~9 days

Recently: every ~14 days

Total

101

Last Release

36d ago

Major Versions

1.17.0 → 2.13.02025-05-26

1.18.0 → 2.15.02025-06-20

1.18.1 → 2.16.02025-07-04

1.19.0 → 2.19.02025-09-19

1.19.1 → 2.23.02026-02-05

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/102023374?v=4)[Jonathan De Baere](/maintainers/jodeba)[@jodeba](https://github.com/jodeba)

![](https://www.gravatar.com/avatar/fefb6475730ac948fa01153dea60fef3e12e3ee5909c0eb2dca0300bcef03d98?d=identicon)[bartdigitalpulse](/maintainers/bartdigitalpulse)

---

Top Contributors

[![jodeba](https://avatars.githubusercontent.com/u/102023374?v=4)](https://github.com/jodeba "jodeba (424 commits)")[![taylordaughtry](https://avatars.githubusercontent.com/u/3781851?v=4)](https://github.com/taylordaughtry "taylordaughtry (3 commits)")[![bartdigitalpulse](https://avatars.githubusercontent.com/u/75615033?v=4)](https://github.com/bartdigitalpulse "bartdigitalpulse (3 commits)")[![IrateGod](https://avatars.githubusercontent.com/u/4604584?v=4)](https://github.com/IrateGod "IrateGod (2 commits)")[![pascal-blaser](https://avatars.githubusercontent.com/u/116191091?v=4)](https://github.com/pascal-blaser "pascal-blaser (2 commits)")[![HigumaSan4050](https://avatars.githubusercontent.com/u/62851271?v=4)](https://github.com/HigumaSan4050 "HigumaSan4050 (2 commits)")[![birgerstoeckelmann](https://avatars.githubusercontent.com/u/10415259?v=4)](https://github.com/birgerstoeckelmann "birgerstoeckelmann (1 commits)")[![shoored](https://avatars.githubusercontent.com/u/26165948?v=4)](https://github.com/shoored "shoored (1 commits)")[![S-n-d](https://avatars.githubusercontent.com/u/46485243?v=4)](https://github.com/S-n-d "S-n-d (1 commits)")

### Embed Badge

![Health badge](/badges/digitalpulsebe-craft-deepl-translator/health.svg)

```
[![Health](https://phpackages.com/badges/digitalpulsebe-craft-deepl-translator/health.svg)](https://phpackages.com/packages/digitalpulsebe-craft-deepl-translator)
```

###  Alternatives

[spicyweb/craft-neo

A Matrix-like field type with block hierarchy

395798.1k10](/packages/spicyweb-craft-neo)[verbb/formie

The most user-friendly forms plugin for Craft.

101372.9k40](/packages/verbb-formie)[solspace/craft-freeform

The most flexible and user-friendly form building plugin!

52664.9k12](/packages/solspace-craft-freeform)[verbb/tablemaker

Create customizable and user-defined table fields.

40168.8k1](/packages/verbb-tablemaker)[supercool/tablemaker

Create customizable and user-defined table fields.

40141.7k](/packages/supercool-tablemaker)[verbb/vizy

A flexible visual editor field for Craft.

4348.6k](/packages/verbb-vizy)

PHPackages © 2026

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