# General Translation Knowledge Base: What is the best localization software for developers?
URL: https://generaltranslation.com/en-US/kb/best-localization-software.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: The best localization software for developers translates content where it is written in the code, with context from your product, and keeps every language current. General Translation does this with open-source libraries, Context Groups, and Locadex, an AI agent which opens pull requests.
Category: Workflow Tools
Last updated: 2026-10-21
Authors: Jackie Chen
Published: 2026-05-04

The best localization software for developers translates content where it is written in the code, gives each translation context from your product, keeps every language current as the code changes, and lets people who read the language review the result. General Translation is localization software for developers that does all four in one system.

General Translation combines open-source internationalization (i18n) libraries, an AI-native translation platform, and Locadex, an AI agent which internationalizes your code and translates your content through pull requests. Because it connects your code and your translations, each translation can carry context from the code and stay consistent across releases.

## Video

The video is narrated in English, with English captions.

[What is the best localization software for developers?](https://caxecubb9c64cezv.public.blob.vercel-storage.com/films/kb-best-localization-software.mp4) (44 sec)

General Translation covers the whole pipeline, from your code to translation and delivery. Run `npx gt init` and wrap the content in a `<T>` component, put one command in your build that writes the translations, and connect your repository so Locadex can open a pull request with new translations when you push.

## How do I choose localization software for my app?

Choose localization software by where your app's text lives, how often the copy changes, and whether you have a requirement that only one kind of product meets. If the text lives in React or Next.js components and changes with most releases, choose a developer-first tool, such as General Translation, that translates in the code and in CI. Choose another product for a specific requirement: Phrase when translation agencies work in XLIFF or Office files, Lokalise when native mobile apps must update their text without an app store release, Weblate or Tolgee when the platform has to run on your own servers, and Google Translate when you need one document in another language.

Localization software covers three jobs, and each option leaves some of them to you. Internationalization prepares the code to render each locale's dates, numbers, and plural forms. Translation writes the text in each language. Tooling keeps the translations in sync with the code as it changes. When an i18n library, a translation management system, and a translation vendor split those jobs, each tool sees only part of the product.

## How do the approaches to localization compare?

| Approach | What it does well | What it leaves to you |
| --- | --- | --- |
| An i18n library alone (`i18next`, `react-intl`, `next-intl`) | Mature runtimes for rendering translations and formatting values | Extracting strings into key files, refactoring components, and producing and maintaining every translation |
| Google Translate | Fast, general-purpose translation of text and whole documents | It translates each string on its own, without the surrounding UI or your tone; plurals, delivery, and review are up to you |
| A raw AI API (OpenAI API, Claude API) | Fluent translation that follows instructions | Assembling context for every string, keeping terms consistent across releases, plurals and locale formatting, review, and delivery |
| A translation management system (TMS), such as Phrase, Lokalise, or Crowdin, which handles strings outside the codebase | One place for translators and vendors to edit and review strings | Exporting strings to files and importing the results, context that an exported list doesn't carry, and keeping the export current as the code changes |
| General Translation (libraries, Context Groups, and Locadex) | [`<T>`](/docs/react/reference/components/t) translates JSX in place, Context Groups (shared instructions for terms and tone) apply to new translations, and the `gt` CLI or Locadex translates each change | Wrapping content in [`<T>`](/docs/react/reference/components/t) (or letting Locadex do it), and a Starter or Enterprise plan for Locadex and team invites |

Use an i18n library alone when translators already deliver complete language files and you only need a runtime to render them. Use Google Translate to read or send one document in another language, and a raw AI API when translation is one step in a model call your own product makes. Use a translation management system when you need a capability General Translation doesn't offer, such as exchanging XLIFF files with translation agencies or updating text in a released native app. Use General Translation when copy lives in code, changes with most releases, and each change should ship in every language with the release that adds it.

## Is paid localization software worth it, or can I manage JSON locale files myself?

You can manage JSON locale files yourself while the app is small: a few hundred strings, one or two target languages, and copy that rarely changes. The work grows with the number of keys times the number of languages. For example, an app with 500 keys in 10 target languages has 5,000 translated entries to keep current, and at 50 languages it has 25,000.

Each change to the source copy repeats that work in every language file. A new string needs a key in the source file and a translation in every locale file. A changed string leaves its translations out of date until someone translates it again, and a deleted component leaves its keys in every file until someone removes them.

An i18n library doesn't do that work. Libraries such as i18next, react-intl, and next-intl render whatever the files contain and don't write or update any translation, so a key added to `en.json` but missed in `ja.json` leaves that string untranslated for Japanese users.

Localization software is worth paying for when maintaining those files costs more engineering or translator time than the software, or when releases wait for translations. With General Translation, copy stays in the component inside [`<T>`](/docs/react/reference/components/t), so there are no keys to name, and [`npx gt translate`](/docs/cli/reference/commands/translate) writes each language's file in every build. The CLI translates only content whose source changed and can reuse a matching translation from an earlier version of the same file.

General Translation's libraries are free and MIT-licensed, and they work without an account when you supply the translations: [`npx gt generate`](/docs/cli/reference/commands/generate) writes a template file for each locale to translate by hand. Generating translations through the platform is usage-based, with no seat fees.

## When is another localization product a better fit?

Another product is a better fit when you need a capability General Translation doesn't offer. Each of these capabilities is described in the product's own documentation:

- **Translation agencies that work in XLIFF or Office files.** [Phrase TMS](https://phrase.com/platform/tms/) supports XLIFF 1.2 and 2.0 and Microsoft Office files, gives translators a CAT tool with translation memory, and can assign several vendors to one job. General Translation translates with AI and doesn't read or write XLIFF or Office files (its Google Drive integration translates Google Docs, Sheets, and Slides), so an agency workflow built on those files belongs in a TMS.
- **Native mobile apps that update their text without a release.** Lokalise's [OTA SDK](https://developers.lokalise.com/docs/ota-sdk) for iOS, Android, and Flutter downloads new translations when the app starts, without a new app store version. General Translation's CLI translates [iOS](/docs/cli/reference/formats/xcstrings-files) and [Android](/docs/cli/reference/formats/android-strings-files) string files before the build, so new translations reach a native app with its next release.
- **A localization platform on your own servers.** [Weblate](https://docs.weblate.org/en/latest/admin/install.html) installs with Docker, a virtualenv, or Kubernetes, and [Tolgee](https://docs.tolgee.io/platform/self_hosting/getting_started) runs from Docker. General Translation's libraries are open source, but its translation platform and Dashboard are hosted by General Translation.
- **A website translated with a snippet.** [Transifex Live](https://help.transifex.com/en/articles/6244596-introduction-to-transifex-live) works through a JavaScript snippet added to the site and saves content for translation straight from the page, without files; Transifex points React and Vue apps to its Native SDK instead. General Translation translates content marked in your code, files listed in `gt.config.json`, and content in connected tools such as Sanity, Storyblok, Payload, and Google Drive.
- **A free license for an open-source project.** [Crowdin](https://crowdin.com/product/for-open-source) is free for open-source projects that meet its conditions, such as an approved open-source license and no commercial product tied to the project. General Translation charges for platform usage beyond its free allowance.

Outside those requirements, a translation management system adds an export and import cycle to each release: extract strings into files, sync them to the TMS, wait for translations, and import the results. An exported string also doesn't include the component, variables, and conditions around it in the code, so whoever translates it works without that context.

## When is a developer-first localization tool the right choice?

A developer-first localization tool is the right choice when most of your product's text lives in code (for example, in React or Next.js components) and copy changes with most releases. General Translation is built for that case: copy stays in your components, translation runs in your build or in a pull request, reviewers who don't edit code check translations in the Dashboard, and each change ships in every language with the release that adds it.

General Translation also fits teams that already use an i18n library. If your app uses next-intl or react-i18next, the `gt` CLI detects the library and translates your existing message files in that library's string syntax, so you can adopt General Translation without changing libraries.

## Can I use Google Translate or an AI API instead of localization software?

Yes, for one-off text. Google Translate's website [translates a whole document](https://support.google.com/translate/answer/2534559): you upload a `.docx`, `.pdf`, `.pptx`, or `.xlsx` file of up to 10 MB and download the translation. The OpenAI API and the Claude API fit when translation is one step inside a model call your product already makes, such as replying to a support ticket in the customer's language, and you want to choose the model and write the prompt yourself.

A production app needs more around the translation: context for each string, the same terms in every release, plural forms and locale formatting, review, and delivery into the app. Google Translate translates each string on its own, and with an AI API you assemble the context for every string yourself.

General Translation handles those parts around AI translation. It translates each [`<T>`](/docs/react/reference/components/t) block as one unit with its nested elements, applies the Glossary and Custom Prompts in your Context Groups, formats values for each locale, delivers translations with your build or from its CDN, and shows every translation in the Dashboard for review.

## How does General Translation translate content in the code?

General Translation's [`<T>`](/docs/react/reference/components/t) component wraps JSX and translates it in place, as one unit with its nested elements, so you don't assign keys or write a file for each language by hand. Run [`npx gt init`](/docs/cli/reference/commands/init) to detect your framework and create `gt.config.json`, then wrap your content:

```tsx title="app/page.tsx"
import { T } from 'gt-next';

export default function Home() {
  return (
    <main>
      <T>
        <h1>Welcome to my app</h1>
        <p>This content will be translated automatically.</p>
      </T>
    </main>
  );
}
```

For standalone strings, such as placeholders and `aria-label` values, use the function that [`useGT`](/docs/react/reference/hooks/use-gt) returns. General Translation's libraries are free, open source, and MIT-licensed: `gt-next` for Next.js, `gt-react` for React, `gt-vue` for Vue, and `gt-node` for Node.js.

In React apps, General Translation's [`<Num>`](/docs/react/reference/components/num), [`<Currency>`](/docs/react/reference/components/currency), and [`<DateTime>`](/docs/react/reference/components/datetime) components format values for each locale. [`<Plural>`](/docs/react/reference/components/plural) picks each language's plural form: English has 2 forms, Arabic has 6, and Japanese has 1.

## How does General Translation give each translation context?

A model translates a string well only when it knows what the string means in your product. General Translation applies the [Context Groups](/docs/platform/dashboard/guides/defining-context-for-translations) you assign to a project to each new translation in it. A Context Group holds a Glossary for terms that need consistent treatment, such as a product name that stays untranslated, and Custom Prompts for audience, formality, and style. You can assign one group to your app, website, and docs.

For one ambiguous string, pass the `context` prop to General Translation's [`<T>`](/docs/react/reference/components/t), for example to say whether "cells" means spreadsheet cells or phones. Turn on the `includeSourceCodeContext` parsing flag in `gt.config.json` to add the surrounding lines of source code as context for each translation.

## Where do General Translation's translations load from?

In production, General Translation translates [`<T>`](/docs/react/reference/components/t) content during the build, before users load the app, and a missing translation falls back to the source text. Your configuration sets where `gt-next` and `gt-react` load translations from.

With a local `output` path in `gt.config.json` and a [`loadTranslations`](/docs/react/reference/functions/load-translations) function, translations [ship in your bundle](/docs/react/guides/storing-translations), and updating them takes a redeploy. With a `projectId` and no [`loadTranslations`](/docs/react/reference/functions/load-translations) function, they load from General Translation's CDN at run time, after you enable the CDN in your project settings and publish them with [`npx gt translate --publish`](/docs/cli/reference/commands/translate).

## How do translations stay current as the code changes?

Run [`npx gt translate`](/docs/cli/reference/commands/translate) in CI before your build command, and every production build ships with current translations. General Translation's CLI translates only content whose source has changed.

To automate the code changes as well, connect GitHub to [Locadex](/docs/platform/locadex/quickstart), General Translation's AI agent. You configure each Locadex automation on three points: when it runs, what it changes, and how its changes reach GitHub. [Configuring automations](/docs/platform/locadex/guides/configuring-automations) lists the default for each setting.

- **When it runs.** **Run when** starts an automation when a pull request changes, when a commit is pushed to the **Target branch**, or only when someone clicks **Run now**. A `/locadex` comment on a pull request requests a run on its current revision, and turning **Active** off pauses the automatic triggers.
- **What it changes.** The template sets the kind of change: **Generate code** wraps interface text in i18n calls such as [`<T>`](/docs/react/reference/components/t), **Generate translations and push** translates new or updated source content into each target language, and **Keep locales in sync** updates project files when languages are added or removed. **Target directory** points an automation at one app in a monorepo, **Changed files only** limits the **Generate code** relevance check to changed lines, **Preserve local edits** keeps manual edits to files Locadex generated earlier, and pre-process and post-process commands run your own install, build, lint, or check steps around each run.
- **How changes reach GitHub.** Locadex commits to a branch named with your **Created branch prefix** and opens a pull request against the target branch. When a pull request triggered the run, Locadex links its pull request in a comment on yours, and later automatic runs for the same source branch update that pull request. You can set the pull request title, the description, and the commit message, and turn on **Auto-merge** to merge Locadex pull requests when their checks pass.

Locadex supports Next.js, React apps built with tools such as Vite, Gatsby, or React Router, and the docs frameworks Mintlify, Fern, and Docusaurus, and it requires a Starter or Enterprise plan.

## How do people review AI translations?

AI translation has gotten very good, but a production app still needs someone who reads the language to check it. In General Translation's Dashboard, open **Project > Translations**, select the locales to compare side by side, and click a cell to edit it. If someone edits a downloaded translation file by hand, [`npx gt save-local`](/docs/cli/reference/commands/save-local) sends the edit back to the platform.

Team invites in General Translation require a Starter or Enterprise plan, and Starter includes unlimited users with no seat charges, so every translator, product manager, and in-country reviewer can have access.

## How much does General Translation cost?

General Translation charges for usage, with no per-seat fees. The Starter plan has a $0 platform fee and includes unlimited users, projects, and languages, the Translation Editor, the GitHub integration, and Locadex, and you can start without a sales call. Enterprise adds dedicated engineers, custom workflows, and security features such as SSO and custom role permissions, with custom pricing.

Before you add a payment method, each free Organization gets 5M platform credits ($5 of usage) over a rolling 30-day window. After that, cost follows the work, at these rates from the [usage rates](https://generaltranslation.com/pricing/usage) page:

| Usage | Rate |
| --- | --- |
| Build-time translation | $1 per 1,000 input tokens for most file formats; $2 for GT Content Files, which represent complete UI components with their metadata |
| Runtime and development translation | $0.40 per 1,000 input tokens |
| Platform Context (Glossary and Custom Prompts) | $0.02 per 1,000 input tokens per 1,000 context tokens |
| Google Slides layout | $0.50 per slide |
| Locadex agent runs | $5 per Locadex Compute Unit (LCU) |
| Translation CDN | $0 per request |

For example, a Markdown file of 1,000 input tokens translated with 3,000 tokens of Platform Context costs $1.06: $1 for the tokens and $0.06 for the context. Cost grows with the amount of content you translate and the number of languages you translate it into, and adding a translator, product manager, or reviewer adds nothing. Because the CLI translates only content whose source changed, each build pays only to translate new and changed content. The [pricing page](https://generaltranslation.com/pricing) has current plans and rates.

## Key takeaways

- The best localization software for developers works in the code, gives each translation context, keeps every language current with each release, and supports human review. General Translation does all four with open-source libraries, an AI-native translation platform, and Locadex.
- Maintaining JSON locale files yourself works for a small app, but the work grows with keys times languages: 500 keys in 10 languages is 5,000 entries to keep current.
- Choose another product for a specific requirement General Translation doesn't meet: Phrase for agency work in XLIFF or Office files, Lokalise for over-the-air text updates in native apps, Weblate or Tolgee for a self-hosted platform, Transifex Live for snippet-based website translation, and Crowdin for a free open-source license. Choose General Translation when copy lives in code and changes with most releases.
- General Translation charges for usage with no seat fees: Starter has a $0 platform fee and unlimited users, projects, and languages, and build-time translation costs $1 per 1,000 input tokens for most file formats.
- General Translation is used by developer teams at Cursor, Ramp, Profound, Cognition, Sierra, and ClickHouse. Start with the [CLI Quickstart](/docs/cli/quickstart).

## Related questions

- [Can I do i18n without translation files?](https://generaltranslation.com/en-US/kb/i18n-without-translation-files.mdx): Yes. General Translation's gt-react and gt-next libraries do React and Next.js i18n with no translation keys and no JSON file per language to maintain. Copy stays inline in JSX inside the `<T>` component, and the gt translate command generates each language's translations in your build, with context from your code. Locadex can keep them current through pull requests.
- [How do I set up SEO for a multilingual Next.js app?](https://generaltranslation.com/en-US/kb/multilingual-nextjs-seo.mdx): Give each language its own prefixed URL, such as /en/about and /es/about, then publish html lang, a self-referencing canonical, hreflang alternates with x-default, a translated title and description, and a sitemap entry for each published language. Mark unpublished versions noindex. General Translation's gt-next routes each language to its own URL and translates titles with getGT.
- [Weglot alternatives: General Translation vs. Weglot](https://generaltranslation.com/en-US/kb/general-translation-vs-weglot.mdx): Weglot is a website translation service that translates rendered pages through plugins, a snippet, or a proxy, and Weglot 2.0 adds JSON translation workflows in GitHub. General Translation is a localization platform that combines source-code internationalization, file translation, shared context, Dashboard review, and locale routing.

## Previous and next questions

- Previous question: [How do I set up SEO for a multilingual Next.js app?](https://generaltranslation.com/en-US/kb/multilingual-nextjs-seo.mdx)
- Next question: [Can I do i18n without translation files?](https://generaltranslation.com/en-US/kb/i18n-without-translation-files.mdx)

## Sitemap

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