Skip to content

docs(kb): add head-to-head comparisons with nine competitors - #645

Merged
pie575 merged 15 commits into
mainfrom
kb/gt-vs-competitors
Oct 20, 2026
Merged

pie575 merged 15 commits into
mainfrom
kb/gt-vs-competitors

Conversation

@kevinwu98

@kevinwu98 kevinwu98 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

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 main back in. It keeps main'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.

Article Reader intent Public URL after merge
General Translation vs. i18next (kb/general-translation-vs-i18next.mdx, Internationalization) A developer on react-i18next or next-i18next deciding whether to switch, or to keep i18next and let General Translation translate its JSON https://generaltranslation.com/kb/general-translation-vs-i18next
General Translation vs. react-intl (kb/general-translation-vs-react-intl.mdx, Internationalization) A developer with ICU defaultMessage catalogs weighing the extract and compile workflow against generated translations https://generaltranslation.com/kb/general-translation-vs-react-intl
General Translation vs. Lingui (kb/general-translation-vs-lingui.mdx, Internationalization) A developer who likes inline macros and PO catalogs, asking what General Translation adds https://generaltranslation.com/kb/general-translation-vs-lingui
General Translation vs. vue-i18n (kb/general-translation-vs-vue-i18n.mdx, Internationalization) A Vue or Nuxt developer comparing vue-i18n with gt-vue https://generaltranslation.com/kb/general-translation-vs-vue-i18n
General Translation vs. Smartling (kb/general-translation-vs-smartling.mdx, Workflow Tools) An engineering or localization lead evaluating Smartling https://generaltranslation.com/kb/general-translation-vs-smartling
General Translation vs. Lokalise (kb/general-translation-vs-lokalise.mdx, Workflow Tools) A team evaluating Lokalise for app and mobile strings https://generaltranslation.com/kb/general-translation-vs-lokalise
General Translation vs. Phrase (kb/general-translation-vs-phrase.mdx, Workflow Tools) A team weighing Phrase Strings and Phrase TMS https://generaltranslation.com/kb/general-translation-vs-phrase
General Translation vs. Crowdin (kb/general-translation-vs-crowdin.mdx, Workflow Tools) An open-source or product team evaluating Crowdin https://generaltranslation.com/kb/general-translation-vs-crowdin
General Translation vs. Transifex (kb/general-translation-vs-transifex.mdx, Workflow Tools) A team evaluating Transifex or Transifex Native https://generaltranslation.com/kb/general-translation-vs-transifex

Not covered here:

How the articles are written. Each one follows the feedback on #644:

  • Library articles say plainly, from the summary on, that the other library doesn't translate and General Translation does. Each credits the library's strengths, shows tested code for both sides, gives a migration path, and says when to keep the library.
  • TMS articles lay out the round trip engineers still run with that vendor (keys and files, sync, wait, merge and wire up). Each credits the vendor's strengths and covers four benefits: faster, cheaper, higher quality, and lower risk. A final section says when the vendor is the better fit.
  • Parent articles in docs(kb): add comparison articles for i18n libraries, Google Translate, and TMS vendors #644 now link each library and vendor name in their tables to its head-to-head article, and their related-questions lists point to the new articles.

How claims were verified

  • Libraries: the npm registry (versions, licenses, and downloads for the full week of September 29, 2026, because the API's "last week" window includes a day with no recorded downloads), plus each library's official docs, changelog, and source.
  • TMS vendors: each vendor's own site, docs, help center, and pricing pages, checked 2026-10-16. I re-checked the key claims in a browser:
    • Smartling's pull request mode: a pull request "should not be merged or deleted" until translations are delivered.
    • Smartling's published turnaround: instant for machine and AI translation, 1 day for AI-assisted human translation, 2 days for expert human translation.
    • Smartling's visual context: none by default for JSON, iOS, and Android files.
    • Crowdin's hourly GitHub sync.
    • Lokalise's and Phrase's 14-day trials and what their plans meter.
    • Transifex Native's SDKs and CDS: Apache-2.0 on npm and GitHub.
  • General Translation: docs in this repo and the published packages (gt-react 11.4.12, gt-vue 0.1.22, gt 2.26.5).

Code examples

Ran (Node 24):

  • react-i18next: the inbox in English and Spanish. A Polish catalog with only _one/_other and an English fallback renders English for 2, 5, and 22, with nothing in the debug log; i18next-cli status exits 1 on the missing forms.
  • react-intl 12.1.4: the inbox in English and Spanish, plus formatjs extract output.
  • Lingui 6.10.0: Babel macro, lingui extract, a hand-filled Spanish PO file, lingui compile, then render in English and Spanish.
  • vue-i18n 11.4.14: the inbox in English and Spanish. With the default rule, Polish renders the wrong forms for 1, 2, and 22; it's correct with a custom pluralRules. The v12 alpha is correct with no custom rule.
  • gt-vue 0.1.22: <T>/<Plural>/<Num>, gt generate with no credentials, a hand-filled Spanish catalog, then server rendering in English, Spanish, and Polish.
  • gt-react 11.4.12: the <T> inbox, and useGT with react-intl's ICU plural string, which renders "12,345" in English and "12.345" in Spanish. gt validate, gt generate, and tsc --noEmit all pass.
  • CLI dry runs: npx gt translate --dry-run finds i18next catalogs.

Not run:

  • A credentialed npx gt translate, so no General Translation output is shown or claimed. Spanish templates were filled in by hand.
  • Vendor CLIs and integrations (Smartling, Lokalise, Phrase, Crowdin, Transifex), which need accounts.

Validation

  • CI runs on this pull request now that it targets main.
  • scripts/: npm test (54 passed) and validate:unsafe-html, validate:callouts, validate:reference-links, validate:structure, validate:blog-order, validate:kb (17 articles), typecheck, and validate-links all pass. The javascript: URL check is clean.
  • pnpm build:content passes (590 static pages).
  • Rendering: all 11 changed pages return 200 in the apps/content preview, 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

  • date is 2026-10-16; update it if publication moves.
  • Docs gaps found while testing the CLI (left out of the articles):
    • The CLI docs say it detects react-i18next and next-i18next, but gt@2.26.5 checks only for i18next in package.json. A project that lists only next-i18next is detected as a base project.
    • The JSON jsonSchema option (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.
    • The PO file type's config key is pot; a po key silently matches nothing.
  • Left out because they're untested or unverified:
    • Whether gt translate generates extra plural keys for i18next JSON, or Polish branches for gt-vue.
    • Whether Lingui PO catalogs translate correctly through the CLI.
    • Exact plan caps for Lokalise's Explorer plan.
    • Any competitor dollar prices; pricing is described by what each vendor meters, with dated links.
  • Fairness choices:
    • The vue-i18n article says gt-vue is 0.x and marked unstable, and that vue-i18n wins on Nuxt.
    • The Transifex article notes that Native's SDKs are open source too; its "lower risk" point rests on shipping translations as files.
    • The TMS articles acknowledge each vendor's Git automation, so none of them says engineers upload files by hand.

🤖 Generated with Claude Code

kevinwu98 and others added 8 commits October 16, 2026 13:25
…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>
Base automatically changed from kb/why-general-translation-comparisons to main October 16, 2026 22:44
kevinwu98 and others added 3 commits October 16, 2026 15:56
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>
kevinwu98 and others added 3 commits October 16, 2026 17:00
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>
@kevinwu98
kevinwu98 marked this pull request as ready for review October 19, 2026 21:15
@kevinwu98
kevinwu98 requested review from a team as code owners October 19, 2026 21:15

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router

kevinwu98 added a commit that referenced this pull request Oct 20, 2026
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>
Co-authored-by: Kevin Wu <kw@generaltranslation.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router

@pie575 pie575 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

@pie575
pie575 merged commit c88f225 into main Oct 20, 2026
8 checks passed
@pie575
pie575 deleted the kb/gt-vs-competitors branch October 20, 2026 03:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants