Skip to content
Grav 2.0 is officially stable. Read the announcement →
Premium / AI Translate
Premium Plugin · v3.0.6

AI Translate

Instant multilingual workflows for Grav Admin

AI Translate brings professional-grade translation tools directly into Grav Admin. Add one-click translation buttons to your fields, use industry-leading DeepL and Google Translate, or reuse the AI providers you already manage with AI Pro, and deliver consistent multilingual content. Smart detection, caching, and result-chunking keep large pages accurate while staying inside the editing experience your team already knows.

Grav 1.7+

Everything you need. Nothing you don’t.

Over 10 distinct features and integrations, out of the box.

01
One-click Translate buttons on specific form text, textarea, and editor fields inside Grav Admin
02
Works with DeepL out-of-the-box or any provider configured in AI Pro, including OpenAI, Claude, Gemini, and custom registries
03
NEW - Google Translate first-party support. Very fast and reasonably priced!
04
Built-in language detection auto-identifies the source language and pre-selects the correct target language
05
Floating Translation Tuner panel lets editors swap providers or models without leaving the page
06
Adaptive chunking engine keeps long Markdown and Twig content within provider limits while preserving formatting
07
Translation caching prevents duplicate requests, lowering API costs and speeding up frequent edits
08
Respectful of Grav permissions, only exposing translation controls to authorized users
09
Manual mode, exclusion rules, and blueprints toggles give granular control over which fields surface translation actions
10
Unified AJAX tasks and CLI hooks so developers can trigger translations, language detection, or batch jobs programmatically
Translate Without Leaving The Field

Translate Without Leaving The Field

Translation buttons live beside every supported field, so editors can generate localized content while they type—no copy/paste or context switching required.

Switch Providers On Demand

The Translation Tuner panel surfaces all available DeepL and AI Pro providers, model lists, and runtime status so teams can choose the best engine for each job in seconds.

Switch Providers On Demand
Highly Configurable

Highly Configurable

Full control over where the AI translate functionality appears in your page forms. Also customize the built-in translation prompt to suit your needs.

Frequently Asked Questions

Common questions about AI Translate and how it fits alongside AI Pro

Do I need AI Pro to use AI Translate?

No. AI Translate ships with a full DeepL integration, including support for formality controls and regional variants. When AI Pro is present, you can reuse any configured provider (even custom ones) without duplicating API keys or prompts.

Can editors choose different models for each translation?

Yes. The Translation Tuner panel lists every enabled AI Pro provider and their available models. Editors can switch providers, pin a preferred model, and the plugin updates the configuration immediately—perfect for mixing lightweight models for drafts with premium models for publication.

How does AI Translate handle large or repeated content?

The plugin automatically chunks oversized passages, adds context overlap, then recombines results so headings, shortcodes, and Markdown survive intact. Completed translations are cached in Grav, so revisiting the same content or running batch processes avoids duplicate API calls.

$75 Buy Now

AI Translate Changelog

v3.0.6

18 hours ago

    • Translating with DeepL now works when a specific source language is chosen, instead of only when the source is detected automatically.

v3.0.5

2 months ago

    • The editor translate button now sits just below Editor Pro's toolbar in both the classic and new admin, and follows it down when the toolbar grows to more than one row, instead of overlapping or hiding behind it.

v3.0.4

2 months ago

    • The editor translate button now hovers above the toolbar instead of being hidden behind it when the toolbar wraps onto more than one row.

v3.0.3

3 months ago

    • The AI Translate floating widget's permission check now goes through the declarative authorize field instead of a runtime block inside the event handler, matching the standard pattern used across other admin-next plugins. Requires grav-plugin-api ≥ 1.0.0-rc.11.

v3.0.2

3 months ago

    • Translation now reaches the editor view under collaborative editing. Setting the field via the web component's plain value = setter is intentionally a no-op while a Yjs binding is active (so routine prop syncs can't wipe peer state), so translated content was being stored on the host but never displayed. The widget now prefers replaceContent(markdown) when the web component exposes it, which goes through the editor's real setContent transaction and propagates to peers via y-prosemirror.

v3.0.1

3 months ago

    • Admin-next: page-context gating for inline translate buttons, with plugin opt-in via event. Translate buttons used to attach to every text/textarea/editor/array field in every blueprint — including plugin and theme config screens, where there's no language switcher and __GRAV_CONTENT_LANG is empty (so clicks no-oped with a console warning). The onApiBlueprintResolved listener now strictly auto-annotates only context === 'page' (using the new explicit discriminator carried by grav-plugin-api ≥ 1.0.0-beta.15; older API plugin versions get a conservative fallback that treats any non-'account' template as a page). Other contexts (plugin / theme / account) are skipped by default, so the buttons no longer clutter blueprint forms that have no useful target language. Plugins that legitimately need translate buttons outside /pages (e.g. the translation-strings plugin's per-row language list) can opt-in two ways: (1) set translate: true directly in their blueprint YAML — pre-existing markers are preserved regardless of the gate; or (2) listen to the new onAiTranslateAnnotateFields event and either flip $event['allow'] = true to request the default annotator for their context, or call the now-public AiTranslatePlugin::annotateFields(array &$fields, ?array $extraTypes = null, ?array $extraExclusions = null) directly with their own type whitelist / exclusions.
    • Admin-next widget honors the data-ai-translate-lang ancestor override — already supported in classic admin since v2.1.2, now matched in the admin-next floating-widget script. Per-field target language is resolved by walking from the field DOM up to the closest [data-ai-translate-lang] ancestor first, falling back to __GRAV_CONTENT_LANG. Same mechanism the translation-strings plugin uses to give each list-row its own target language on a non-page screen. Both single-field and array-row translation paths share the lookup.
    • Inline translate buttons no longer go missing for admin-next users. onApiBlueprintResolved was gated on access.admin.super / access.admin.ai-translate, so users authenticated through admin-next's access.api.super authority were silently skipped — the floating widget loaded (styles injected, FAB rendered) but blueprint fields never received translate: true, so the button-injection MutationObserver had nothing to act on. The blueprint-resolved hook now accepts access.api.super as well, matching onApiFloatingWidgets.

v3.0.0

4 months ago

    • Added Grav 2.0, API, and Admin 2.0 support

v2.1.3

5 months ago

    • Better support for Deepl language variations (e.g. ES_419 for Latin American Spanish na dPT-BR for Brazilian Portuguese)

v2.1.2

5 months ago

    • Added YAML-aware translation mode — when translating YAML content (e.g., in CodeMirror fields with mode: yaml), keys are preserved and only string values are sent for translation
    • Added data-ai-translate-lang attribute support for field-level target language overrides, enabling translation on non-page admin locations like plugin config pages
    • Added isTranslatableValue() filter that skips URLs, email addresses, file paths, hex colors, and CSS class strings during YAML translation
    • getTargetLanguage() now accepts a field parameter and checks for data-ai-translate-lang on ancestor elements before falling back to page language
    • shouldAddButton() now allows translate buttons on non-pages admin sections when a data-ai-translate-lang ancestor is present
    • getFieldType() now detects YAML CodeMirror fields and returns 'yaml' type for proper routing through the YAML-aware translation pipeline
    • setFieldValue() for YAML fields now directly locates the sibling CodeMirror instance within the same .form-field container for reliable content updates in list items
    • Each translated YAML string value is individually run through ContentProtector to preserve any Markdown/HTML syntax within values

v2.1.1

5 months ago

    • Fixed DeepL failing with regional language codes (e.g. fr-fr, fr-ca, de-de) — normalizeLanguageCode() now strips unsupported regional suffixes while preserving valid DeepL variants like EN-GB and PT-BR
    • Fixed translate button tooltip staying visible after click, obscuring the undo button
    • Fixed .grid.vertical CSS rule leaking into nested list field children — scoped to direct children only so buttons in list items with horizontal labels are positioned correctly
    • Provider tuner panel now shows whenever 2+ providers are configured (DeepL, Google Translate, or AI Pro), not only when AI Pro is installed