Documentation

Translate your project

Set up translations for a project, keep them current through Quality Control, and know what they cost.

Coroid translates your product with the same engine it uses for its own thirteen languages. Your catalogues stay files in your repository. Every change to them arrives as a normal task and pull request, and only strings that are new, changed or broken are sent to a model.

Translations live under Quality Control → Translations. The list shows each project, whether translations are configured, and the latest scan. Open a project to get its workbench.

Storefront
Configured · source en · 4 target locales
OverviewSetupConfigurationContributorsSuggestionsAutomations
Latest scanView findingsView run
LocaleMissingStale
de02
fr140
ja141
ar140
  • TranslationsTask QA and pull requests · changed strings onlyPublished
  • Translation auditScheduled · every catalogue and locale pageDraft

Quality Control → Translations for one project: the latest translation check per locale, and the Translations and Translation audit controls. Illustrative data.

What your repository needs

Coroid reads catalogues in these formats:

FormatUse it for
ICU JSONMessage files with ICU plurals and selects
i18next JSONi18next and react-i18next catalogues, including plural suffixes
Vue i18n JSONvue-i18n messages, including linked messages and pipe plurals
Rails YAMLconfig/locales/*.yml, with %{name} interpolation and plural keys
gettext PO.po files and a .pot template, with Plural-Forms per language
Markdown and MDXDocumentation pages under a language folder (docs/en/…): text, image descriptions and chosen frontmatter fields; code and markup stay as written
CustomAny other format, through a small adapter command in your repository

You do not need translations yet. If your project has no i18n, Coroid can introduce it.

Set up

The Setup tab walks through three steps.

  1. Detect. Coroid prepares a discovery task. It runs the pinned translation engine against your repository and records the stack, the catalogues, which language is the source, and anything it is unsure about.
  2. Choose. Pick Adopt existing i18n to keep your framework and catalogues and add Coroid's checks and delta engine. Pick Introduce i18n to have Coroid wire your framework, extract representative strings, and add locale routing, fallbacks and right-to-left support.
  3. Create. Coroid creates the setup task with a Specification and acceptance criteria. It ends in a pull request you review like any other.
Storefront
Not configured yet · setup in progress
OverviewSetupConfigurationContributorsSuggestionsAutomations
  1. Detect
  2. 2Choose
  3. 3Create
Detected: Next.js with next-intl · 3 JSON catalogues · source en
Adopt existing i18n

Keep your current framework and catalogues, and add Coroid’s translation checks and delta engine.

Introduce i18n

Wire your framework, extract representative strings, and add locale routing, fallbacks and RTL behaviour.

Source locale
en
Target locales
de, fr, ja, ar
Continue

The Setup tab after detection: adopt the existing i18n or introduce it, with the source and target locales. Illustrative data.

Setup is ready once that pull request is merged to the default branch Coroid syncs. Until then, nothing else in the workbench assumes it.

The repository file

Setup writes .coroid/i18n.json. It describes your repository, so it lives in your repository and changes through pull requests:

{
  "version": 1,
  "cli": { "version": "1.7.0", "sha256": "…" },
  "sourceLocale": "en",
  "targetLocales": ["de", "fr", "ja", "ar"],
  "catalogs": [
    {
      "id": "ui",
      "format": "i18next-json",
      "source": "messages/{locale}.json"
    }
  ],
  "localeTier": { "ja": "escalation" }
}
  • cli pins the exact engine version and its checksum. Coroid downloads and verifies that version before every run, so an update never changes your output by surprise.
  • sourceLocale can be any language. A Swedish source translated to English and German works the same way.
  • localeTier asks for the stronger translation route for a locale. You choose a tier, never a model.

The file can also hold a glossary, protected terms, product context and per-locale instructions.

To change it, edit the proposal on the Configuration tab and choose Propose change. Coroid opens a task that applies exactly that file and repairs any translations the change affects.

The same tab holds the settings that belong to Coroid rather than your repository: which sites may open the suggestion picker, whether suggestions are reviewed by default, and the project's translation spend limit.

Check every change

Translations become part of verification through two Quality controls. Add them from the Overview tab.

  • Translations runs on task QA and on pull requests. It checks only the strings a change touched.
  • Translation audit runs on a schedule. It checks every catalogue and locale and can include a Browser test of your locale pages, for right-to-left layout, overflow and text left untranslated on the page.

Adding a control prepares a policy draft. Review it and publish it under Quality policies to turn it on.

Each problem becomes a finding with an issue code:

CodeMeaningBlocks by default
missingThe string has no translationYes
invalid_syntaxThe translation does not parse, for example broken ICUYes
placeholder_mismatchPlaceholders differ from the sourceYes
plural_categoriesA plural form the locale needs is missingYes
staleThe source changed after the string was translatedNo

You choose which codes block in the control's settings. Glossary, length and forbidden-term rules report their own codes when your file configures them.

Quality Control
Findings from the latest runs, filtered to the Translations check.
PoliciesFindings4Runs
  • missingui · checkout.total · frNot translated
  • staleui · nav.deals · deSource changed since translation
  • placeholder_mismatchui · cart.items · jaPlaceholders differ from the source
  • plural_categoriesui · cart.count · arPlural forms missing for this locale

Quality findings from the Translations check, one issue code per finding. Illustrative data.

When a translation finding blocks a task, the developer agent repairs it the same way every time: it opens a translation session for the task and runs the engine on the changed strings. It never edits target catalogues by hand.

The Translator model

Translation has its own role in AI profiles, Translator, next to Architect, Developer, QA and Reviewer. By default it uses Hy-MT2, a translation model, with GPT-6 Luna as the fallback, where your organisation policy allows them. Change the mapping in an AI profile like any other role.

The engine also batches strings by size, validates every reply against your placeholders and plural rules, and retries or escalates a string that fails.

Costs

Translations are available on every plan. Translation calls go through Coroid's translation gateway and are billed as model usage to your organisation, the same as agent runs. Setup tasks count toward your plan's agent hours like any other task.

With the default Translator route, translating costs about two cents per 1,000 strings per language. Translating a 2,000-string catalogue into ten languages cost about $0.33 when we measured it.

  • Only changes cost money. The engine keeps a cache keyed by the source text, so unchanged strings are never sent again.
  • Each task has a translation limit. A session stops at the task's spend limit, $1 by default. A project can set a lower limit under Configuration → Access and spend.
  • Checks make no model calls. The Translations control and the audit read your catalogues; they do not translate.

Translating outside Coroid

The engine is a command-line tool, coroid-i18n. Your own CI can run the same pinned version with its own OpenRouter key. Inside Coroid, tasks always use the translation gateway, so spend and limits stay in one place.