Localization your AI agents can run
Push any translation file. Claude translates it with your glossary and rules, identical strings are shared across every app, and your agents review, audit and fix it over MCP, CLI and API.
A replacement for Crowdin by Meter. See how they compare.
The problem
Translation management was designed before agents could do the work
Crowdin and tools like it are good at coordinating human translators. Most teams shipping apps today want something else: machine translation they can trust, and a workflow their agents can run end to end.
How it works
From source file to every language in four ops
- 1
push_filePush any file
Send the source file from your repo, CI or agent. The format is detected; strings are matched against every other app in the workspace.
- 2
translateClaude translates
New strings are translated into every target locale with their context, your glossary and your rules. Placeholders are checked on every string.
- 3
claim_tasksAgents review
Low-confidence translations, ambiguous merges and audit findings land in a queue an agent can work through in minutes.
- 4
pull_filePull every locale
Get each language back in the file's own format and path layout, with comments kept where the format has them.
npx @meterapp/glossa push locales/en.json --project webnpx @meterapp/glossa pull --project web --locale es,fr,deFormats
Every format your apps already use
12 formats are built in. Push one it has never seen and the AI writes a template for it from your file, which you approve once and reuse forever.
Review queue
A review queue an agent can rip through
Every decision that needs judgment becomes a small task with everything needed to decide it and a short list of actions. Agents claim a batch, decide, and resolve. Each resolution runs through the same ops a person would use.
merge_reviewKeys in different apps share text. Same meaning, or split?translation_reviewThe model was unsure, or a placeholder did not survive.audit_findingAn audit found a problem and proposes a fix.rule_suggestionAn audit proposes a rule for every future translation.glossary_suggestionA term that should be fixed or never translated.learn_formatThe AI wrote a template for a new file format.
curl -X POST https://glossa-meterapp.vercel.app/api/v1/claim_tasks \ -H "Authorization: Bearer gls_…" \ -d '{"kind":"translation_review","limit":20}'
curl -X POST https://glossa-meterapp.vercel.app/api/v1/resolve_task \ -H "Authorization: Bearer gls_…" \ -d '{"task":"…","action":"edit","text":"Iniciar sesión","note":"Use the infinitive for buttons"}'Deduplication
Fix once, fixed everywhere
Every key points at a unit: one source string with one translation per language, shared by every key in every file and app that uses the same text. When context says the same words mean different things, the key gets its own unit.
One translation per language, reviewed once. split_key separates a key whose context differs; merge_units joins near-duplicates.
Audits and rules
Translations that get better over time
Ask a question about a language and get an answer, a score and a list of fixes. What keeps going wrong becomes a rule or a glossary term, so the next batch does not repeat it.
- 01 · run_auditAsk"How is our Spanish? Are we consistent about tú and usted?"
- 02 · audit_findingFindThe audit scores the locale and files each problem with a proposed fix.
- 03 · resolve_taskFixAn agent or a person applies, edits or dismisses each finding.
- 04 · add_ruleLearnRecurring problems become glossary terms and rules that every future translation follows.
Every action is an API
48 ops. Dashboard, REST, MCP and CLI all call the same ones.
Each op has one name, one input schema and one handler. The dashboard has no private endpoints: whatever you can click, an agent can call.
Apps or repos, each with its source and target locales.
Deduplicated units, translations, merges and splits.
Plans, prices, checkout links and the subscription.
Integrations
Works where your agents already work
Connect Claude Code, Codex or Cursor to the MCP server, or run the CLI in GitHub Actions on every push.
claude mcp add --transport http glossa https://glossa-meterapp.vercel.app/api/mcp \ --header "Authorization: Bearer gls_…"# ~/.codex/config.toml
[mcp_servers.glossa]
url = "https://glossa-meterapp.vercel.app/api/mcp"
bearer_token_env_var = "GLOSSA_API_KEY"{ "mcpServers": { "glossa": { "url": "https://glossa-meterapp.vercel.app/api/mcp", "headers": { "Authorization": "Bearer gls_…" } } }}# .github/workflows/translations.ymlname: Translationson: push: branches: [main] paths: ["locales/en.json"]jobs: sync: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npx @meterapp/glossa push locales/en.json --project web env: GLOSSA_API_KEY: ${{ secrets.GLOSSA_API_KEY }}npx @meterapp/glossa loginnpx @meterapp/glossa push locales/en.json --project webnpx @meterapp/glossa pull --project web --locale es,fr,denpx @meterapp/glossa run_audit --locale es --question "Are brand names consistent?"Full setup, including OAuth sign-in and the plugin, in the MCP guide.
FAQ
Questions
Glossa is a translation management system built around AI. You push translation files in whatever format your apps use, Claude translates them following your glossary and rules, and every string is deduplicated across files and apps. Everything you can do in the dashboard is also an API call, an MCP tool and a CLI command, so coding agents can run your localization.
JSON (including i18next), YAML, Xcode String Catalogs (.xcstrings), Apple .strings and .stringsdict, Android strings.xml, gettext PO, XLIFF 1.2 and 2.0, Flutter ARB, Java .properties, .NET RESX and CSV/TSV. When you push a format it has not seen, the AI writes a reusable template for it from a sample, which you review once.
Claude Opus. Every prompt includes the string's context, your glossary (brand names are never translated) and your standing rules for that language, and every translation is checked to keep the source's placeholders.
Identical source strings across every file and app share one unit with one translation per language. Fix "Sign in" in Spanish once and every key that uses it is fixed. When the same text means different things ("Open" the verb and "Open" the store status), the key is split into its own unit, and the review queue asks about merges that look ambiguous.
Yes. Add the MCP server at /api/mcp with an API key, or install the plugin, and the agent gets one tool per operation: push and pull files, search strings, work the review queue, run audits, add rules. The same operations are available over REST (POST /api/v1/{op}) and the CLI (npx @meterapp/glossa).
Crowdin is built around human translators working in an editor, with machine translation and AI as add-ons. Glossa assumes AI translates and agents review, so the API covers every action, strings dedupe across projects, and audits feed fixes back into rules. Crowdin has a much larger integration catalog, translator marketplace and vendor workflow features that Glossa does not try to match.
Glossa is free for one app (2,000 AI translations a month). Pro is $49 a month for 25,000 AI translations, Team $199 a month for 150,000; yearly is two months free. Every plan has every feature, and imports, reviews and edits are free. Write to jonathan@welcome.meterapp.co for Enterprise.
No. Files stay in your repository. Push the source file from CI or a pre-commit hook, and pull translated files back in the same format and path layout. Comments, key order and file-specific details are preserved where the format allows.
Push your first file
Glossa is free for one app. Sign in, push a translation file, and pull it back in every language.