# General Translation Knowledge Base: General Translation vs. Crowdin: which should you use?
URL: https://generaltranslation.com/en-US/kb/general-translation-vs-crowdin.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Choose General Translation to keep copy in your components and generate translations with your build. Crowdin manages translation projects around resource files, translators, and review workflows, which engineers connect to the app and maintain as the product changes. Crowdin remains a strong fit for open-source community translation and vendor-led programs.
Category: Workflow Tools
Last updated: 2026-10-16
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-16

Crowdin's [localization platform](https://crowdin.com/) organizes localization around translation projects: engineers maintain resource files, connect them to Crowdin, and bring translated catalogs back into the app. Its automation moves content through that workflow. General Translation brings translation into development itself: copy stays in your components, and translations generate with your build.

## What Crowdin does well

- **Free to start.** The [Free plan](https://crowdin.com/pricing) includes 60,000 hosted words, with translations shared into Crowdin's translation memory, and open-source projects that meet its [open-source license criteria](https://crowdin.com/product/for-open-source) (such as an OSI license and no related commercial product) can get a free license.
- **Developer tooling.** A CLI configured in `crowdin.yml`, Git integrations for GitHub, GitLab, Bitbucket, and Azure Repos, a GitHub Action, an MCP server, and [700+ apps and integrations](https://store.crowdin.com/).
- **AI with context.** You can [bring your own OpenAI, Anthropic, Gemini, or other provider keys](https://support.crowdin.com/crowdin-ai/), or use a Crowdin-managed model. Each request includes the string's context, key, and maximum length, and prompts can add your glossary, translation memory, style guide, neighboring strings, and tagged screenshots.
- **Human translation.** A vendor marketplace, and [Crowdin Language Services](https://crowdin.com/features/vendor-integrations) ordered inside a project.
- **Context and QA.** Screenshots tagged to strings, an [In-Context editor for web apps](https://support.crowdin.com/in-context-localization/), a Figma plugin, and built-in QA checks.
- **Mobile over-the-air updates.** iOS, Android, and Flutter SDKs and a JavaScript client update strings from [Crowdin's CDN](https://support.crowdin.com/content-delivery/) without an app release.

## What Crowdin still leaves to your engineers

Engineers still set up and maintain the round trip between the app and Crowdin's translation projects:

1. Set up an i18n library, extract each English string into a resource file under a key, and reference the key in the component.
2. Describe the files in `crowdin.yml` and send them with [`crowdin upload sources`](https://crowdin.github.io/crowdin-cli/commands/crowdin-upload-sources), or use a Git integration or GitHub Action.
3. Set up AI, machine translation, vendors, or your translators to fill in each language, with the review steps your project needs.
4. Bring translated catalogs into the app. [Crowdin's GitHub integration](https://support.crowdin.com/github-integration/) returns them through an `l10n_` service branch. Its automatic sync runs hourly by default, with a configurable interval and an immediate sync option.

Crowdin can also collect context from code: its coding-agent skills and [`crowdin context` commands](https://crowdin.github.io/crowdin-cli/commands/crowdin-context) have an agent analyze the codebase and upload descriptions for strings. With General Translation's [`<T>`](/docs/react/reference/components/t), the marked JSX itself supplies the text, nested elements, and named placeholders used for translation.

Paid plans are priced mainly by hosted words, which are source words times target languages, plus manager seats, so each new language raises the hosted-word count. (See [Crowdin pricing](https://crowdin.com/pricing), checked October 2026.)

## Crowdin vs. General Translation at a glance

| Feature | Crowdin | General Translation |
| --- | --- | --- |
| Where strings live | Keyed resource files in your repository, synced to Crowdin projects | In your code inside [`<T>`](/docs/react/reference/components/t), or in the resource files you already have |
| How code connects | `crowdin.yml` with the CLI, Git integrations, or a GitHub Action | [`npx gt translate`](/docs/cli/reference/commands/translate) in your build, or [Locadex](/docs/platform/locadex/quickstart) pull requests |
| Who translates | Machine translation or AI providers, vendors, or your translators | AI with context from your code, Glossary, and Custom Prompts, reviewed by your team in the Dashboard |
| Context for each string | Key, maximum length, screenshots, glossary, translation memory, and agent-written context | Marked JSX, named placeholders, developer notes, and the project's assigned Glossary and Custom Prompts |
| Pricing | Free plan; paid plans by hosted words and manager seats | Translation usage; see [pricing](https://generaltranslation.com/pricing) |
| Native mobile apps | Over-the-air SDKs for iOS, Android, and Flutter | The CLI translates iOS and Android resource files for the app's release |
| Open source | Free license for qualifying open-source projects | MIT-licensed JavaScript libraries and CLI |

## Why teams choose General Translation over Crowdin

General Translation removes the catalog authoring work for React UI: copy stays in your components inside [`<T>`](/docs/react/reference/components/t). Deleting a component removes its inline copy too, instead of leaving keys to clean up elsewhere.

- **Faster.** Put [`npx gt translate`](/docs/cli/reference/commands/translate) before your app build to generate and download translations in the same workflow. It reuses existing translations and generates the new or changed content. For a pull-request workflow, [Locadex](/docs/platform/locadex/quickstart) prepares the translation changes for you.
- **Cheaper to run.** Crowdin's hosted-word count grows with the source catalog and number of target languages. General Translation charges for translation usage rather than keeping that catalog hosted. Keeping completed translations does not create a recurring translation charge; [pricing](https://generaltranslation.com/pricing) lists the usage rates.
- **Higher quality.** A [`<T>`](/docs/react/reference/components/t) block can keep a heading, sentence, link, and dynamic placeholders together, so the translator receives their relationship instead of isolated keys. Add developer notes and a shared [Glossary and Custom Prompts](/docs/platform/dashboard/guides/defining-context-for-translations) for product terminology. Reviewers can edit the result in the [Translation Editor](/docs/platform/dashboard/guides/reviewing-translations).
- **Lower risk.** You can keep your existing i18n library and import reviewed translations before changing how new ones are produced. That lets you adopt General Translation without rewriting every component or discarding your translators' work.

Cursor ships 14+ locales across web and docs with General Translation. (See [production deployments](https://generaltranslation.com/enterprise).)

## When Crowdin is the better fit

Choose Crowdin when an open-source project qualifies for its free license and wants community translators, when you run a human translation program with vendors and multi-step review, when you exchange XLIFF or Office files, or when native mobile apps need its over-the-air SDKs.

## Moving from Crowdin to General Translation

For supported catalogs such as JSON, YAML, PO, and iOS or Android resource files, configure their source and locale paths in `gt.config.json`. Follow the [file translation setup](/docs/cli/quickstart) and run [`npx gt upload`](/docs/cli/reference/commands/upload) to import existing translations before generating new ones. Bring your glossary into a [Context Group](/docs/platform/dashboard/guides/defining-context-for-translations) so new translations use the same terminology.

In a React app, you can then introduce [`<T>`](/docs/react/reference/components/t) as you build new screens. For a comparison across vendors, see [Why use General Translation instead of a TMS?](/kb/general-translation-vs-tms).

## Is General Translation an alternative to Crowdin?

Yes. General Translation combines AI translation, an editor for human review, and libraries that keep React copy in JSX. It also translates existing catalogs, so replacing Crowdin does not require replacing your i18n library first.

## Key takeaways

- Crowdin is a strong TMS for open-source and human translation programs, with a free plan and AI that draws on keys, screenshots, and glossaries.
- Crowdin automates catalog delivery; engineers still connect those catalogs to the app and configure the translation workflow.
- Choose General Translation to remove keyed catalogs from React authoring, generate translations during a release, and retain your existing reviewed translations during adoption.

## Related questions

- [Why use General Translation instead of a TMS (Smartling, Lokalise, Phrase, Crowdin, or Transifex)?](https://generaltranslation.com/en-US/kb/general-translation-vs-tms.mdx): A translation management system (TMS) such as Smartling, Lokalise, Phrase, Crowdin, or Transifex coordinates translators, but engineers still extract strings, send them out, wait for translations, and wire them back into the product. General Translation translates content in your code with its context, ships every language with each release, and runs on open-source libraries with no lock-in.
- [General Translation vs. Lokalise: which should you use?](https://generaltranslation.com/en-US/kb/general-translation-vs-lokalise.mdx): General Translation is a strong Lokalise alternative for teams that want readable copy in JSX and translation built into development. Lokalise is built around shared keys, design-tool integrations, and mobile over-the-air delivery. General Translation generates translations from the app's marked content and supports review in its Dashboard or in GitHub pull requests.
- [General Translation vs. Phrase: which should you use?](https://generaltranslation.com/en-US/kb/general-translation-vs-phrase.mdx): General Translation is a strong Phrase Strings alternative when your app and documentation ship together. It generates translations from code and content files, applies shared terminology, and runs in your release workflow. Phrase combines software localization with a document-focused TMS, vendor management, and a broad choice of translation engines.
- [General Translation vs. Smartling: which should you use?](https://generaltranslation.com/en-US/kb/general-translation-vs-smartling.mdx): Choose General Translation when you want app translations generated from code as part of your release. Smartling combines a translation management system, AI and human services, and a website translation proxy. General Translation keeps copy in your components, carries its context into translation, and gives your team a Dashboard for review.
- [General Translation vs. Transifex: which should you use?](https://generaltranslation.com/en-US/kb/general-translation-vs-transifex.mdx): Choose General Translation to translate marked JSX with its structure and developer context, then bundle the results or serve them from its CDN. Transifex Native also keeps strings in code, but publishes them through its content delivery service. Transifex is a strong fit for teams using its translation partners, quality scores, or snippet-based website translation.

## Previous and next questions

- Previous question: [General Translation vs. Babel and Flask-Babel: which should you use?](https://generaltranslation.com/en-US/kb/general-translation-vs-flask-babel.mdx)
- Next question: [General Translation vs. Django's translation framework: do you need both?](https://generaltranslation.com/en-US/kb/general-translation-vs-django-i18n.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/kb/sitemap.md) for every article.
