Repository navigation
docs(kb): add head-to-head comparisons with nine competitors - #645
Conversation
…e, and TMS vendors Add three Knowledge Base articles that answer "Why use General Translation instead of X?" questions: - general-translation-vs-i18n-libraries: i18next, react-intl, next-intl, Lingui, and vue-i18n compared with General Translation's libraries, plus how to keep an existing library and use the CLI. - general-translation-vs-google-translate: browser translation, the Website Translator widget, and the Cloud Translation API compared with context-aware translation in the build. - general-translation-vs-tms: Smartling, Lokalise, Phrase, Crowdin, and Transifex compared with General Translation's code-first workflow, including when a TMS is the better fit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Google Translate: open the General Translation section with the two differences that matter (it understands each string's whole context, and it automates the whole localization workflow), then the code. - i18n libraries: state upfront that General Translation's libraries do the same job as i18next, react-intl, and next-intl, and also generate the translations. - TMS: spell out the manual steps a TMS still leaves to engineers (extract, send, wait, wire back in), with Smartling's published vendor turnaround, and add a benefits section: faster, cheaper, higher quality, and lower risk with open-source libraries and CLI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove "inexpensive" from the Google Translate article's summary and "at a per-character price" from its use-when line, following the earlier removal of the Cloud Translation price from the intro. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- i18n libraries: the summary, intro, General Translation section, comparison table (new "Translates your content?" column), and key takeaways now state that i18next, react-intl, next-intl, and the other libraries don't translate anything, while General Translation does the translating. - TMS: name all five platforms in the title and summary: Smartling, Lokalise, Phrase, Crowdin, and Transifex. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
npm's last-week download counts include a day with no recorded downloads, so use the full week of September 29, 2026 (i18next about 28 million, react-i18next about 21 million). The libraries "handle" plurals rather than all handling them "well": vue-i18n 11 needs a custom plural rule for languages such as Polish, now noted in the comparison table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
react-intl and Lingui generate message IDs from inline source text, so describe catalogs as filled "by key or by extracting inline messages" and call them catalog files. Scope the dependency note to gt-react and gt-next, since gt-react-native uses Intl polyfills. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add one "General Translation vs. X: which should you use?" article per competitor without an existing comparison: - Open-source libraries: i18next, react-intl, Lingui, and vue-i18n. Each says plainly that the library doesn't translate, while General Translation does, and shows tested code for both. - TMS vendors: Smartling, Lokalise, Phrase, Crowdin, and Transifex. Each lays out the round trip engineers still run, the vendor's real strengths, and the four reasons teams choose General Translation. Link the two parent comparisons to the new articles from their tables and related questions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep main's versions of the three parent comparisons, including the review fixes made before #644 merged, and re-apply only this branch's cross-links to the nine head-to-head articles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Drop competitor download counts, matching the edit to the parent libraries article. - Don't claim that translation supplies each language's extra plural forms; say instead that each English form is translated with the block and <Plural> picks a branch with the reader's plural rules. - Point library links at the parent's new "vs." title, and label the TMS benefit "Cheaper to run" as the parent does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Make each TMS page's benefit bullets answer that vendor's own workflow, pricing, and context model instead of shared copy. - Add a Common questions section to all nine articles. - Cite customer locale counts and security certifications, with links to the Enterprise page and trust center. - Restore hub-to-hub related links on the TMS and library parents. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Translations get only the plural forms the source has, so the i18next and vue-i18n FAQ answers now say to review languages with more forms than English. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Reword the customer and security line per page, citing one relevant deployment, and drop it where no known customer uses that stack. - Keep only FAQ answers the body does not already give, as question-shaped H2s; remove the rest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Credit Kevin Wu and Jackie Chen on every head-to-head article. - Link each vendor and library claim to the vendor's own docs, pricing, changelog, or repository, verified against the claim. - Correct claims the sources contradict or do not support: gettext 1.0 LLM drafts, Symfony's English-only polyfill, Lokalise AI context, Crowdin QA checks and Enterprise-only EU residency, Smartling tier names, Transifex TQI scope, Intlayer strict mode, Tolgee CLI formats, Phrase pricing units, and i18next adoption. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Risk: medium. This automation is not approving: nine new public Knowledge Base comparison articles (~800 lines of user-facing marketing copy) exceed the low-risk, small-blast-radius bar. Human review is needed, and no reviewers were assigned. Cursor Bugbot and Cursor Security Agent were not running after the first poll.
Sent by Cursor Approval Agent: Pull Request Router
State that translation generates each target language's plural forms from inline <Plural> branches in the intlayer and in-house comparisons, matching the #645 comparisons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Risk: medium. This automation is not approving: nine new public Knowledge Base comparison articles exceed the low-risk, small-blast-radius threshold. Human review is needed, and no reviewers were assigned. Cursor Bugbot and Cursor Security Agent were not running after the first poll.
Sent by Cursor Approval Agent: Pull Request Router



Summary
Adds one head-to-head Knowledge Base article for each competitor that doesn't have a dedicated comparison yet: "General Translation vs. X: which should you use?". These sit one level below the three category comparisons in #644 and link to them.
Builds on #644, now merged. #644 was squash-merged, so this branch merges
mainback in. It keepsmain's versions of the three parent articles, including the review fixes made before #644 merged. The diff is just the nine new articles and the parents' cross-links. The articles also match those review fixes: no competitor download counts, no claim that translation supplies each language's extra plural forms, and the parent's new "vs." title in link text.kb/general-translation-vs-i18next.mdx, Internationalization)kb/general-translation-vs-react-intl.mdx, Internationalization)defaultMessagecatalogs weighing the extract and compile workflow against generated translationskb/general-translation-vs-lingui.mdx, Internationalization)kb/general-translation-vs-vue-i18n.mdx, Internationalization)gt-vuekb/general-translation-vs-smartling.mdx, Workflow Tools)kb/general-translation-vs-lokalise.mdx, Workflow Tools)kb/general-translation-vs-phrase.mdx, Workflow Tools)kb/general-translation-vs-crowdin.mdx, Workflow Tools)kb/general-translation-vs-transifex.mdx, Workflow Tools)Not covered here:
next-intl-vs-gt-next.How the articles are written. Each one follows the feedback on #644:
How claims were verified
gt-react11.4.12,gt-vue0.1.22,gt2.26.5).Code examples
Ran (Node 24):
_one/_otherand an English fallback renders English for 2, 5, and 22, with nothing in the debug log;i18next-cli statusexits 1 on the missing forms.formatjs extractoutput.lingui extract, a hand-filled Spanish PO file,lingui compile, then render in English and Spanish.pluralRules. The v12 alpha is correct with no custom rule.<T>/<Plural>/<Num>,gt generatewith no credentials, a hand-filled Spanish catalog, then server rendering in English, Spanish, and Polish.<T>inbox, anduseGTwith react-intl's ICU plural string, which renders "12,345" in English and "12.345" in Spanish.gt validate,gt generate, andtsc --noEmitall pass.npx gt translate --dry-runfinds i18next catalogs.Not run:
npx gt translate, so no General Translation output is shown or claimed. Spanish templates were filled in by hand.Validation
main.scripts/:npm test(54 passed) andvalidate:unsafe-html,validate:callouts,validate:reference-links,validate:structure,validate:blog-order,validate:kb(17 articles),typecheck, andvalidate-linksall pass. Thejavascript:URL check is clean.pnpm build:contentpasses (590 static pages).apps/contentpreview, with the expected title, sections, table, code blocks, and KB links. I checked at desktop width and at 375px; tables fit their wrapper, and the page doesn't scroll horizontally. They weren't rendered in the landing app itself (gt-cloud).Editorial notes
dateis 2026-10-16; update it if publication moves.react-i18nextandnext-i18next, butgt@2.26.5checks only fori18nextinpackage.json. A project that lists onlynext-i18nextis detected as a base project.jsonSchemaoption (key selection) exists in the CLI's types and published config schema, but the general docs mention it only on the Mintlify config page and in keyed metadata.pot; apokey silently matches nothing.gt translategenerates extra plural keys for i18next JSON, or Polish branches forgt-vue.gt-vueis 0.x and marked unstable, and that vue-i18n wins on Nuxt.🤖 Generated with Claude Code