Knowledge Base
Answers to common questions about localising apps, docs, and content with General Translation.
Internationalisation
Setting up i18n in a codebase: libraries, frameworks, and components.
- What should I check before launching a multilingual app?Before launching a multilingual app, test nine things in every supported locale: complete user journeys including errors, language detection and switching, variables and plurals, currency and time zones, text expansion, right-to-left layout, accessibility, production translation delivery, and crawlable language URLs for SEO. Each check needs an explicit pass condition.
- Should you build your own i18n or use General Translation?Hand-rolled i18n (a dictionary per language and a small t() helper) is fine for one or two languages and a little copy. As an app grows, you rebuild plural rules, fallbacks and file syncing, and you still need to produce translations. General Translation's open-source libraries handle rendering, and General Translation generates and updates translations from your code.
- react-intl alternatives: General Translation vs. react-intlGeneral Translation lets React teams keep ICU message syntax while adding translation generation, shared terminology, and Dashboard review. react-intl supplies formatting and FormatJS catalogue tooling; General Translation produces the translations too.
- i18next alternatives: General Translation vs. i18nextChoose General Translation to keep copy inline in React components and generate translations with its JSX structure and product context. You can also keep i18next and use General Translation to translate existing catalogues. i18next supplies message rendering and plural selection; translation generation comes from a separate service.
- General Translation vs. vue-i18n: which should you use?General Translation lets Vue teams write source copy directly in templates and generate translations with the CLI. Its gt-vue plugin renders that content with locale-aware plural and number formatting. Choose it to remove keyed source-file maintenance; vue-i18n remains a good fit for teams using Nuxt's i18n module and an established catalogue workflow.
- General Translation vs. Symfony Translation: which should you use?Symfony Translation renders messages in PHP and Twig. General Translation translates its YAML catalogues in CI, keeps them up to date as your source changes, and gives reviewers a Dashboard to edit them. Keep Symfony's rendering and add automated translation to your release workflow.
- General Translation vs. Rails I18n: do you need both?Rails I18n looks up messages and formats dates and numbers. General Translation produces the translations, keeps them up to date as your English changes, and gives your team a Dashboard for review. Use both to ship translated Rails catalogues with each release.
- General Translation vs. Paraglide JS: which should you use?Choose General Translation to keep copy inline and generate translations with the structure of your React components, shared terminology, and Dashboard review. Choose Paraglide JS for compiled, typed message functions and per-message tree-shaking. Paraglide renders your catalogues; General Translation connects source copy to translation generation and ongoing updates.
- General Translation vs. nestjs-i18n: which should you use?nestjs-i18n resolves each request's language in a NestJS app and renders messages from per-language JSON or YAML catalogues, but it doesn't translate anything. General Translation's CLI translates those catalogues, and its gt-node library translates content that only exists at run time, so you can keep nestjs-i18n and add General Translation.
- General Translation vs. Mobility: which should you use?Mobility stores translated model attributes in your database. General Translation produces those translations through its API, using your Glossary and Custom Prompts. Use both to translate product listings, posts and other database content while keeping your Rails models.
- General Translation vs. Lingui: which should you use?Choose General Translation to keep copy inline like Lingui and generate the translations with your JSX structure as context. Lingui extracts inline messages into catalogues for your translators or a connected service to translate. General Translation's CLI updates translations as your code changes, and your team reviews them in the Dashboard.
- General Translation vs. Intlayer: which should you use?Intlayer keeps each component's content in a typed declaration file next to it, with every language written side by side, and can fill missing languages with an AI provider you configure. General Translation keeps copy inline in your components in one language and generates the other languages with the context of your code.
- General Translation vs. i18next, react-intl, and next-intl: which i18n library should you use?Open-source libraries such as i18next, react-intl, and next-intl don't translate anything. They display translations you supply in a catalogue file for each language, written by you, your translators or a separate service. General Translation's libraries are open source too and do the same job, but General Translation also does the translating, using your code as context.
- General Translation vs. GNU gettext: do you need both?Keep GNU gettext for extraction and rendering, and add General Translation to generate and maintain the PO files. General Translation carries translator notes and message context into generation, applies shared terminology, and gives reviewers a Dashboard editor. Your existing gettext calls and compiled catalogues stay in place.
- General Translation vs. Django's translation framework: do you need both?Use Django's translation framework and General Translation together. Django handles message extraction, language selection and rendering. General Translation fills its PO files, including plural forms, with your product terminology and Dashboard review. Your templates and URL patterns stay the same while translations update with your code.
- General Translation vs. Babel and Flask-Babel: which should you use?Babel formats dates, numbers and currencies for any locale and manages gettext catalogues, and Flask-Babel connects it to Flask, but neither translates your strings. General Translation's CLI fills in Babel's PO files for every language, plural forms included, so you can keep Flask-Babel and stop translating catalogues by hand.
- Can I do i18n without translation files?Yes. With gt-react or gt-next, content stays inline in your components inside a <T> component, and translations are generated at build time as output, so there are no keys or per-locale JSON files to write and keep in sync.Video
- How do I translate conditional text in JSX?Rather than translating each side of a ternary separately, wrap the whole sentence in a <T> component and express the condition with <Branch>, so that the translator sees the full context and can reorder the sentence for each language.Video
Locale Formatting
Plurals, dates, numbers, currencies, and right-to-left text in every locale.
Translation
Machine and AI translation, quality, context, and glossaries.
Multilingual SEO
Locale routing, hreflang, sitemaps, and translated metadata for multilingual sites.
Workflow Tools
Choosing localisation tools and keeping translations in sync with continuous localisation.
- Why use General Translation instead of a TMS (Smartling, Lokalise, Phrase, Crowdin, or Transifex)?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.
- What's the best i18n library for a React app?The four main React i18n libraries are General Translation's gt-react, react-i18next, Lingui and React Intl. All four render and format translations, but only gt-react also generates them, from copy written inline in your JSX. Choose react-i18next to keep i18next catalogues and plugins, Lingui for extraction to compiled catalogues, and React Intl for FormatJS and ICU MessageFormat.
- Transifex alternatives: General Translation vs. TransifexChoose 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.
- Smartling alternatives: General Translation vs. SmartlingChoose 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.
- Phrase alternatives: General Translation vs. PhraseGeneral 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 localisation with a document-focused TMS, vendor management, and a broad choice of translation engines.
- next-intl alternatives: gt-next vs. next-intlnext-intl renders translations you supply in a message catalogue for each language. gt-next renders translations too, and General Translation also generates them from copy written inline in your JSX. Both are MIT-licensed and support the App Router and Server Components. If your next-intl catalogues already work, you can keep them and use General Translation to translate them without migrating.
- Lokalise alternatives: General Translation vs. LokaliseGeneral 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. Weblate: which should you use?Weblate is a self-hostable, Git-based localisation platform built for translating repository files with a community or team. General Translation integrates translation generation into development and releases, using marked JSX and shared product context. Keep your gettext files or adopt inline authoring to remove source-catalogue maintenance too.
- General Translation vs. Tolgee: which should you use?Tolgee combines keyed messages, in-context editing and AI translation in a self-hostable platform. General Translation keeps readable copy directly in your components and generates translations from the marked JSX, so you can ship new copy in every language without maintaining message keys.
- General Translation vs. Locize: which should you use?Locize is a translation management system from the creators of i18next that delivers translations from a CDN, collects new keys from your running app, and adds AI translation and an in-context editor. You still maintain the i18n library and its keys. General Translation can be your i18n library and translate it, or translate the i18next files you already have.
- General Translation vs. i18n-tasks: which should you use?i18n-tasks is a Ruby gem that finds missing and unused Rails I18n keys, tidies locale files, and can fill missing keys through Google Translate, DeepL, OpenAI, Yandex, or watsonx. General Translation translates whole locale files with your Glossary, Custom Prompts, and Dashboard review. They do different jobs, and many teams can use both.
- Crowdin alternatives: General Translation vs. CrowdinChoose 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 programmes.
- What is the best localisation software for developers?Look for one system that covers the whole pipeline, from the i18n library in your code to translation and delivery, instead of stitching together a separate library, translation management system and translation vendor.Video