Skip to main content
Version: 2.0.0

Settings

Open Settings -> Plugins -> i18n (or the plugin's own Settings nav item inside the i18n CP section) to configure the defaults used by new translation jobs and by the console commands. Individual translation jobs (see Usage) can override the provider, source/target site, sections and safety flags per job — the settings below are the plugin-wide defaults.

provider, googleApiKey, geminiApiKey, chatgptApiKey, deepLApiKey and libreTranslateApiKey can additionally be overridden per Craft site, so a multi-site install can use a different provider or API key per target language.

Translation providers

SettingTypeDefaultPurpose
providerstringmymemoryDefault provider handle used when a job does not define its own provider sequence.
fallbackProvidersarray['mymemory']Providers tried in order, after the primary one, when a translation request fails or the provider is unavailable.
providerCooldownMsint (ms)100Minimum delay enforced between two requests to the same provider, to avoid rate limiting.
providerErrorCooldownMsint (ms)300How long a provider is paused after it returns an error, before i18n tries it again.

Supported provider handles, and the API key setting each one needs:

HandleProviderRequires API keySettings field
mymemoryMyMemoryno— (free, rate-limited public API)
libretranslateLibreTranslateoptionallibreTranslateApiKey, libreTranslateEndpoint (defaults to https://libretranslate.com/translate, can point at a self-hosted instance)
apertiumApertiumno
argostranslateArgos Translateno
lingvaLingvano
googleGoogle TranslateyesgoogleApiKey
geminiGoogle GeminiyesgeminiApiKey, geminiModel (default gemini-2.5-flash)
chatgptOpenAI ChatGPTyeschatgptApiKey, chatgptModel (default gpt-4o-mini)
deeplDeepLyesdeepLApiKey

MyMemory is the default because it needs no API key, but it is rate-limited and best suited for low-volume or evaluation use — for a production multi-language store, configuring DeepL, Google or an LLM provider (with its own API key) as the primary provider, with MyMemory left in fallbackProviders as a free last resort, is the recommended setup.

Default languages, sites and sections

SettingTypeDefaultPurpose
sourceLanguagestring (ISO 639-1)enDefault source language for new jobs.
targetLanguagestring (ISO 639-1)enDefault target language for new jobs.
sourceSiteIdint|nullnullDefault Craft site to pull canonical (source) content from.
targetSiteIdint|nullnullDefault Craft site to write translations into.
sectionIdsarray<int>[]Sections included when queueing translations via php craft i18n/translate/queue (see Developer).

Batching, queue and cron behavior

SettingTypeDefaultPurpose
batchSizeint20Entries translated per batch inside a running job.
batchPauseMsint (ms)0Pause between batches during long-running jobs.
cronBatchSizeint50Entries processed per run when triggered from cron/CLI (i18n/translate/queue).
queuePriorityint1024Craft queue priority used when pushing translation jobs.
queueTtrSecondsint300Maximum seconds a queue runner reserves the job for (time-to-run).
queueMaxAttemptsint3Queue retry attempts before a job is marked failed.
queueEntryLimitint500Maximum entries translated in a single queue run.
errorThresholdint3Errors allowed per entry before it is skipped (blocked) until statistics are cleared.
continueOnErrorbooltrueIf enabled, job execution moves on to the next provider/entry after a failure instead of stopping the whole job.

Safety flags

SettingTypeDefaultPurpose
alwaysTranslateFieldsboolfalseWhen enabled, target fields are overwritten every run, even if already translated/populated. When disabled (default), a field that already has translated content is skipped.
skipMismatchedTargetsbooltrueWhen enabled, an entry whose target content has diverged from a straight translation (e.g. a translator hand-edited it) is left alone, so i18n does not silently overwrite manual edits. Only takes effect when alwaysTranslateFields is off.
logStatisticsbooltrueWhether detailed translation statistics are logged for reporting/digest purposes.

Individual jobs also have their own translateUntranslatedOnly flag (default true), which skips entries the job has already translated, so re-running a job only picks up new/changed entries.

Digest email

SettingTypeDefaultPurpose
digestRecipientsstring''Comma-separated list of email addresses that receive the statistics digest.
digestFrequencystringdailyOne of hourly, two-hourly, daily. Controls both the scheduled digest cadence and the minimum interval enforced before another digest is sent for the same window.

The digest can also be triggered on demand from the CP (Settings → Send digest) or from the console (php craft i18n/statistics/send-digest, see Developer).

License

pluginLicenseEntitlementToken, pluginLicenseEntitlements, pluginLicenseLastValidatedAt, pluginLicenseGraceUntil and pluginLicenseItems store the plugin's license activation state and are managed automatically by the CP license flow (i18n/license); they are not meant to be edited by hand. dashboardLayout stores the saved layout of the i18n dashboard widgets.