PHPackages                             marblecms/marble-translate - 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. [Localization &amp; i18n](/categories/localization)
4. /
5. marblecms/marble-translate

ActiveMarble-plugin[Localization &amp; i18n](/categories/localization)

marblecms/marble-translate
==========================

AI translation plugin for Marble CMS: DeepL and Google Translate support for Item field values.

v1.0.1(3mo ago)00MITPHPPHP ^8.3

Since Apr 25Pushed 3mo agoCompare

[ Source](https://github.com/marblecms/plugin-translate)[ Packagist](https://packagist.org/packages/marblecms/marble-translate)[ RSS](/packages/marblecms-marble-translate/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (1)Versions (3)Used By (0)

Marble Translate
================

[](#marble-translate)

Machine translation for [Marble CMS](https://github.com/marblecms/admin) item field values using DeepL or Google Translate.

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

[](#installation)

```
composer require marblecms/marble-translate
php artisan marble:translate:install
```

Publish config:

```
php artisan vendor:publish --tag=translate-config
```

Configuration (`config/translate.php`)
--------------------------------------

[](#configuration-configtranslatephp)

KeyDefaultDescription`provider``deepl`Default provider: `deepl` or `google``api_key``''`API key for the chosen provider`deepl_pro``false`Use DeepL Pro endpoint (api.deepl.com vs api-free.deepl.com)**.env variables:**

```
TRANSLATE_PROVIDER=deepl
TRANSLATE_API_KEY=your-key-here
TRANSLATE_DEEPL_PRO=false

```

How it works
------------

[](#how-it-works)

1. Admin visits **Structure → Translate** to see all published items with translatable fields
2. Items show a per-language coverage indicator (tick = translated, "Missing" = not yet)
3. Click the arrow button to open the translation workspace for an item
4. Select source language, target language, and provider; click **Translate**
5. The plugin calls the API and creates a **pending TranslationJob** with the results
6. Review the source vs. translated values in the diff table
7. Click **Apply All** to write the translations back to `item_values`, or **Reject** to discard

Applying a job fires the `ItemTranslated` event.

Providers
---------

[](#providers)

### DeepL

[](#deepl)

Uses the [DeepL API v2](https://www.deepl.com/docs-api). Free tier uses `api-free.deepl.com`; Pro tier uses `api.deepl.com` (set `TRANSLATE_DEEPL_PRO=true`).

### Google Cloud Translation

[](#google-cloud-translation)

Uses the [Cloud Translation Basic (v2) API](https://cloud.google.com/translate/docs/reference/rest). Requires a Cloud Translation API key.

Admin nav
---------

[](#admin-nav)

Accessible via **Structure → Translate**.

Admin routes
------------

[](#admin-routes)

MethodURLRoute nameDescriptionGET`/{prefix}/translate``marble.translate.index`Items needing translationGET`/{prefix}/translate/item/{item}``marble.translate.show`Translation workspacePOST`/{prefix}/translate/item/{item}``marble.translate.translate`Trigger API translationPOST`/{prefix}/translate/job/{job}/apply``marble.translate.apply`Apply pending jobPOST`/{prefix}/translate/job/{job}/reject``marble.translate.reject`Reject pending jobEvents
------

[](#events)

EventProperties`ItemTranslated``$item`, `$job`Artisan Commands
----------------

[](#artisan-commands)

CommandDescription`marble:translate:install`Run migrationsDatabase
--------

[](#database)

**`translation_jobs`**

ColumnTypeNotes`id`bigintPK`item_id`bigintFK → items (cascade delete)`source_language_id`bigintFK → languages`target_language_id`bigintFK → languages`provider`string`deepl` or `google``status`string`pending`, `applied`, `rejected``translated_fields`json`{field_identifier: translated_value}``created_at` / `updated_at`timestamps`applied_at`timestampnullable — when job was appliedExtending with a custom provider
--------------------------------

[](#extending-with-a-custom-provider)

Implement a provider class with this interface:

```
public function translate(array $texts, string $sourceLang, string $targetLang): array;
```

Then extend `TranslationService::resolveProvider()` or bind your provider in a service provider.

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance82

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

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 ~0 days

Total

2

Last Release

90d ago

### Community

Maintainers

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

### Embed Badge

![Health badge](/badges/marblecms-marble-translate/health.svg)

```
[![Health](https://phpackages.com/badges/marblecms-marble-translate/health.svg)](https://phpackages.com/packages/marblecms-marble-translate)
```

PHPackages © 2026

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