Soft launch Dialecto is still in testing, and details on this site may change as we finish it.

Reference

The lookup page: exact values, no prose. For the ideas behind them, see Concepts.

Repo settings

SettingValuesDefault
frameworkelixir (gettext) · formatjs (JSON)elixir
scan_modeselected · allselected
scan_branch_regexregex string—
required_localeslist of locales[] (gate inactive)
gate_scopeincremental · whole_catalogincremental
gate_fuzzywarn · blockwarn
translation_modesuggest · autofill_submit · autofill_approvesuggest
auto_translate_on_scanbooleanfalse
quality_gateoff · warn · blockoff
quality_blocking_severitycritical · majorcritical
quality_localeslist of locales[] (falls back to required_locales)
quality_modelmodel override string—

All settings live in the repo’s Settings page and are enforced with database constraints — there is no config file to commit.

Roles & permissions

Organization roles: owner, admin, member.

Capabilityowneradminmember
billing, delete org✓——
manage org, connect repos✓✓—
team work✓✓✓

Team roles: owner, admin, developer, reviewer, translator, viewer. Repos belong to a team; repo access is team membership — there are no separate repo-level roles.

Capabilityowneradmindeveloperreviewertranslatorviewer
view✓✓✓✓✓✓
edit translation✓✓✓✓✓—
submit for review✓✓✓✓✓—
review✓✓✓✓——
assign work✓✓✓✓——
structural edit, rename msgid✓✓✓———
open PR, bulk operations✓✓✓———
manage team✓✓————

A translator membership can be scoped to specific locales (empty scope = all locales). Locale scoping applies to editing; a scoped check without a locale fails closed. Last-owner protection applies everywhere: the only owner of an org or team can’t be removed or demoted.

Supported PO constructs

The engine parses your files and splices edits into the original bytes — it never regenerates a file. Preserved verbatim across edits:

  • multi-line (wrapped) strings
  • plural entries (msgid_plural, msgstr[N] — plural count read from the catalog’s own Plural-Forms: header, which is never rewritten)
  • msgctxt (entries are keyed by context + msgid)
  • translator comments (#), extracted comments (#.), references (#:), flags (#,), previous-msgid markers (#|), obsolete entries (#~)
  • blank lines and file ordering

Parsing is strict: a malformed catalog rejects its whole scan (HTTP 422) rather than being half-ingested.

Supported JSON shapes

Edits are spliced into the original bytes here too. Supported layouts (catalog_layout: auto · flat · tree · extension, detected under auto):

  • flat <locale>.json objects with ICU messages
  • nested key trees (i18next, next-intl, vue-i18n), with a configurable key separator
  • browser-extension _locales/<locale>/messages.json (message, description, $name$ placeholders)

See the JSON guide.

Limits

LimitValue
Template files per scan1,000
Single template file5 MB
Scan request body10 MB
Usage snippets per scan50,000
API rate limit (scan + MCP)30 requests / minute / IP
MCP list_untranslated page500 entries
MCP token validity365 days
Voice: lexicon terms per profile50
Voice: exemplar strings per profile20
Voice: website scan6 pages / 50,000 chars
Voice: uploaded source10 MB in, 50,000 chars extracted
Voice card token budget~400 tokens
Quality findings shown per check run50